当前位置:   article > 正文

Docker 之 Dockerfile 参数说明_dockerfile接收外部多个参数

dockerfile接收外部多个参数

Docker 之 Dockerfile 参数说明

FROM
FROM <image> [AS <name>]
FROM <image> [:<tag>] [AS <name>]
FROM <image> [@<digest>] [AS <name>]
  • 1
  • 2
  • 3

指定基础镜像。当前镜像是基于哪个镜像创建的,有点类似 java 中的类继承。FROM 指令必是 Dockerfile 文件中的首条命令。

MAINTAINER
MAINTAINER <name>
  • 1

镜像维护者的信息,该命令已经被标记为不推荐使用了。

LABEL
LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • 1

指定一些作者、邮箱等信息。给镜像添加元数据,可以用 LABEL 命令替换 MAINTAINER 命令。

ENV
ENV <key> <value>
ENV <key>=<value> ...
  • 1
  • 2

设置环境变量。设置的变量可供后面指令使用。跟 java 中定义变量差不多的意思。

WORKDIR
WORKDIR /path/to/workdir
  • 1

设置工作目录。在该指令后的 RUNCMDENTRYPOINTCOPYADD 指令都会在该目录执行。如果该目录不存在,则会创建。

RUN
RUN <command>
RUN ["executable", "param1", "param2"]
  • 1
  • 2

RUN 会在当前镜像的最上面创建一个新层,并且能执行任何的命令,然后对执行的结果进行提交。提交后的结果镜像在 Dockerfile 的后续步骤中可以使用。

ADD
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
  • 1
  • 2

从宿主机拷贝文件或者文件夹到镜像,也可以复制一个网络文件!如果拷贝的文件是一个压缩包,会自动解压缩。

COPY
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
  • 1
  • 2

从宿主机拷贝文件或者文件夹到镜像,不能复制网络文件也不会自动解压缩。

VOLUME
VOLUME ["/data"]
  • 1

创建挂载点。一般配合 RUN 命令的 -v 参数使用。

EXPOSE
EXPOSE <port> [<port>/<protocol>...]
  • 1

指定容器运行时对外暴露的端口,但是该指定实际上不会发布该端口,它的功能是镜像构建者和容器运行者之间的记录文件。
回到容器命令中的 RUN 命令部分,RUN 命令有 -p-P 两个参数。

  • 如果是 -P 就是 随机 端口映射,容器内会随机映射到 EXPOSE 指定的端口。
  • 如果是 -p 就是 指定 端口映射,告诉运维人员容器内需要映射的端口号。
CMD
CMD ["executable", "param1", "param2"]
CMD ["param1", "param2"]
CMD command param1 param2
  • 1
  • 2
  • 3

指定容器启动时默认运行的命令,在一个 Dockerfile 文件中,如果有多个 CMD 命令,只有一个最后一个会生效。
同样是可以执行命令,可能你会觉得跟上面的 RUN 指令很相似。

  • RUN 指令是在 构建镜像 时候执行的。
  • CMD 指令是在每次 容器运行 的时候执行的。
  • docker run command 命令会覆盖 CMD 的命令。
ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
  • 1
  • 2

这个指令与 CMD 指令类似,都是指定启动容器时要运行的命令,如果指定了 ENTRYPOINT,则 CMD 指定的命令不会执行。
在一个 Dockerfile 文件中,如果有多个 ENTRYPOINT 命令,也只有一个最后一个会生效。

  • docker run command 命令会覆盖 CMD 的命令,不会覆盖 ENTRYPOINT 的命令。
  • docker run 命令中指定的任何参数都会被当做参数传递给 ENTRYPOINT
RUN,CMD,ENTRYPOINT 区别
  • RUN 指令是在镜像构建时运行,而后两个是在容器启动时执行。
  • CMD 指令设置的命令是容器启动时默认运行的命令,如果 docker run 没有指定任何的命令,并且 Dockerfile 中没有指定 ENTRYPOINT,那容器启动的时候就会执行 CMD 指定的命令。有点类似代码中的缺省参数
  • 如果设置了 ENTRYPOINT 指令,则优先使用。并且可以通过 docker run 给该指令设置的命令传参。
  • CMD 有点类似代码中的缺省参数。
USER
USER <user>[:<group>]
USER <UID>[:<GID>]
  • 1
  • 2

用于指定运行镜像所使用的用户。

ARG
ARG <name>[=<default value>]
  • 1

指定在镜像构建时可传递的变量,定义的变量可以通过 docker build --build-arg= 的方式在构建时设置。

ONBUILD
ONBUILD [INSTRUCTION]
  • 1

当所构建的镜像被当做其他镜像的基础镜像时,ONBUILD 指定的命令会被触发。

STOPSIGNAL
STOPSIGNAL signal
  • 1

设置当容器停止时所要发送的系统调用信号

HEALTHCHECK
HEALTHCHECK [OPTIONS] CMD command # 在容器内运行运行命令检测容器的运行情况)
HEALTHCHECK NONE # 禁止从父镜像继承检查
  • 1
  • 2

该指令可以告诉 Docker 怎么去检测一个容器的运行状况。

SHELL
SHELL ["executable""parameters"]
  • 1

用于设置执行命令所使用的默认的 shell 类型!该指令在 Windows 操作系统下比较有用,因为 Windows 下通常会有 cmdpowershell 两种 shell,甚至还有 sh

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/74239
推荐阅读
相关标签
  

闽ICP备14008679号