Docker——Dockerfile常用命令

Dockerfile常用命令

  • CMD、ENTRYPOINT
  • RUN
  • WORKDIR
  • ENV
  • USER
  • VOLUME
  • ADD和COPY
  • LABEL
  • STOPSIGNAL
  • ARG
  • ONBUILD

CMD、ENTRYPOINT

  1. 相同点
# 将命令放在列表中,会原样执行命令
CMD ['touch', '/test']  # 实际执行命令 touch /test

# 不将命令放在列表中,会在命令前加上/bin/sh -c
CMD touch /test    # 实际执行命令 /bin/sh -c touch /test
  1. 不同点
  • 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

  1. 设置镜像的根目录,在WORKDIR之后的命令都会在这个目录中执行
  2. 可以通过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

为镜像添加触发器,当镜像被用作其他镜像的基础镜像时,该镜像的触发器竟会被执行。

你可能感兴趣的:(Docker)