文章字数: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> ... |