CMD、ENTRYPOINT
- 相同点
# 将命令放在列表中,会原样执行命令
CMD ['touch', '/test'] # 实际执行命令 touch /test
# 不将命令放在列表中,会在命令前加上/bin/sh -c
CMD touch /test # 实际执行命令 /bin/sh -c touch /test
- 不同点
- docker run指定的启动命令会覆盖CMD命令
- docker run指定的启动参数会传递给ENTRYPOINT执行
# nginx Dockerfile
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]
# 1. dokcer run
docker run -itd nginx:1.9 -g "daemon off;"
# 实际执行命令
/usr/sbin/nginx -g "daemon off;" # -g "daemon off;" 覆盖了CMD的-h
# 2. docker run
docker run -itd nginx:1.9
# 实际运行命令
/usr/sbin/nginx -h
RUN
RUN命令只在构建镜像时有效
WORKDIR
- 设置镜像的根目录,在WORKDIR之后的命令都会在这个目录中执行
- 可以通过docker run -w指定工作目录
ENV
在镜像构建过程中设置环境变量
USER
设置运行镜像的用户名或UID或组或GID或组合
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
VOLUME
ADD和COPY
相同点:
- 目标目录不存在会自动创建
- 文件末尾有’/'被视为目录,否则被视为文件
不同点:
- ADD能复制远程文件到容器内
- 能够将压缩包(gzip、bzip2、xz)自动解压缩到容器内,不支持URL压缩包
- ADD使构建缓存无效,ADD之后的指令不能使用之前的构建缓存?
LABEL
为docker镜像设置元数据,元数据是键值对的形式,不同元数据之间用空格分隔。
建议所有元数据写到一条LABEL中,避免创建过多的镜像层
STOPSIGNAL
设置停止容器时发送什么系统调用信号给容器。
ARG
- 定义构建时需要的变量,变量可以设置初始值,也可以只设置变量名
- 变量都可以在docker build 时使用–build-arg指定该变量的值
# Dockerfile
ARG build
ARG webapp_user=user
# 指定变量build的值,webapp_user会使用默认值
docker build --build-arg build=123 -t image:tag
- 预定义的ARG变量
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
FTP_PROXY
ftp_proxy
NO_PROXY
no_proxy
ONBUILD
为镜像添加触发器,当镜像被用作其他镜像的基础镜像时,该镜像的触发器竟会被执行。