文章字数:844,阅读全文大约需要3分钟
构建过程
- 编写
dockerfile
1 | FROM nginx |
FROM基于那个镜像做的定制RUN执行后面的命令,执行一次会生成一层镜像,避免镜像膨胀过大,多个命令可以用&&连接,而不是多个RUN
指令
- COPY
1 | COPY [--chown=<user>:<group>] <源路径1>... <目标路径> |
[--chown=<user>:<group>]: 可选,更改复制到容器内文件的拥有者和所属组<源路径>可以是文件或目录,也可以是通配符。需要满足go的filepath.Match规则<目标路径>容器内的路径,不存在会自动创建
- ADD
- 使用同
COPY - 在源文件是
tar压缩文件时使用,可以自动解压到目标目录 gzip,bzip2,xz压缩格式
- RUN
两种使用格式
1
2RUN <命令行命令>
RUN ["可执行文件", "参数1", "参数2"]多个命令一起执行
1 | RUN <命令行命令> \ |
- CMD
- 使用同
RUN - 作用是指定容器启动后执行的
cmd命令,可被启动时传入的cmd覆盖。作用即设置默认cmd命令 - 多条
cmd只有最后一条有用
- ENTRYPOINT
- 多条只有最后一个有效
- 可以使用
--entrypoint覆盖 - 和
CMD一样,容器启动后的默认执行的,一般搭配CMD一起使用,组合成一条命令
1 | FROM nginx |
这样运行时会执行
1 | nginx -c /etc/nginx/nginx.conf |
然后可以通过修改cmd达到参数变化的效果
1 | docker run nginx:test -c /etc/nginx/new.conf |
- ENV
- 定义环境变量
1 | ENV <key> <value> |
1 | ENV NODE_VERSION 7.2.0 |
- ARG
- 效果和
ENV类似,只是作用域不同。ARG设置的智能在dockerfile里有效果 - 可以使用
--build-arg <参数名>=<值>覆盖
- VOLUME
- 用于定义默认挂载路径
- 可以被
-v覆盖
1 | VOLUME ["<路径1>", "<路径2>"...] |
- EXPOSE
1 | EXPOSE <端口1> [<端口2>...] |
- 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
- 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
- WORKDIR
- 切换目录,切换之后命令会在新的目录下执行
- 需要是存在的目录
- USER
- 指定后续执行命令的用户和用户组(切换用户)
1
USER <用户名>[:<用户组>]
- HEALTHCHECK
1 | HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令 |
- ONBUILD
- 本次构建时不会执行,其他
dockerfile使用FROM调用次dockerfile时会执行
1 | ONBUILD <其它指令> |
- LABEL
- 添加元数据
metadata
1 | LABEL <key>=<value> <key>=<value> <key>=<value> ... |