# 25.13、Dockerfile 常用命令

1、`FROM` 格式：**FROM 或 FROM : 基础镜像来源**，必须在第一行指令中指定，不指定标记则默认为latest。

2、`LABEL` 格式：**LABEL = 指定添加元数据到镜像**，可指定多个标签信息。

3、`RUN` 格式：**RUN** 每条指令将在当前镜像基础上执行，并提交为新的镜像。

4、`CMD` 格式：**CMD** **指定启动容器时执行的命令**，每个Dockerfile只能有一条CMD指令，如果指定了多条CMD指令，则只会执行最后一条CMD指令。如果在启动镜像时指定了启动指令，则镜像预设的CMD指令不执行。一般用于执行容器时提供默认值。

5、`EXPOSE` 格式：**EXPOSE 指定镜像启动后暴露的端口**，在容器启动时需要通过 -p 做端口映射

6、`ENV` 格式：**ENV 指定环境变量**，使用在构建阶段中的所有后续指令的环境。

7、`ADD` 格式：**ADD 该指令会在(本地文件系统或远程网络位置) 进行复制新文件**，并将它们添加到路径上图像的文件系统中。

8、`COPY` 格式：**COPY 复制本地主机的  (为 Dockerfile 所在目录的相对路径) 到容器中的** 。

9、`ENTRYPOINT` 格式：**ENTRYPOINT 配置容器启动后执行的命令**，并且不可被docker run提供的参数覆盖。如果指定了多条ENTRYPOINT指令，则只会执行最后一条ENTRYPOINT指令。

10、`VOLUME` 格式：**VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点**，一般用来存放数据库和需要保持的数据等

11、`USER` 格式：**USER : | USER : 指定运行容器时的用户名或 UID**，后续的 RUN 也会使用指定用户。

12、`WORKDIR` 格式：**WORKDIR**  为后续的 COPY、ADD、RUN、CMD、ENTRYPOINT 指令配置工作目录。（可以使用多个 WORKDIR 指令，后续命令如果参数是相对路径， 则会基于之前命令指定的路径）

13、`ARG` 格式：**ARG \[=] 该ARG指令定义了一个变量**，用户可以docker build使用该--build-arg = 标志在构建时将该变量传递给构建器。

14、`ONBUILD` 格式：**ONBUILD \[INSTRUCTION] 配置当所创建的镜像作为其它新创建镜像的基础镜像时**，所执行的操作指令，就好像它已经FROM在下游指令之后立即插入一样 Dockerfile。

15、`STOPSIGNAL` 格式：**STOPSIGNAL 设置将发送到容器的系统调用信号以退出**。此信号可以是与内核的系统调用表中的位置匹配的有效无符号数，例如9，或SIGNAME格式的信号名，例如SIGKILL。

16、`HEALTHCHECK` 格式：**HEALTHCHECK \[OPTIONS] CMD command 测试容器以检查它是否仍在工作**。即使服务器进程仍在运行，这也可以检测到陷入无限循环且无法处理新连接的Web服务器等情况。当容器指定了运行状况检查时，除了正常状态外，它还具有运行状况。这个状态最初是starting。每当健康检查通过时，它就会变成healthy（以前所处的状态）。经过一定数量的连续失败后，它就变成了unhealthy。

17、`SHELL` 格式：**SHELL \["executable", "parameters"] 该SHELL指令允许覆盖用于shell命令形式的默认shell**。Linux上的默认shell是\["/bin/sh", "-c"]，而在Windows上\["cmd", "/S", "/C"]。该SHELL指令必须以JSON格式写入Dockerfile。
