📜  RUN vs CMD vs ENTRYPOINT Docker 命令之间的区别(1)

📅  最后修改于: 2023-12-03 14:47:10.032000             🧑  作者: Mango

RUN vs CMD vs ENTRYPOINT Docker 命令

在Dockerfile中,我们可以使用RUN、CMD和ENTRYPOINT命令来执行不同类型的操作。在本文中,我们将详细介绍这些命令之间的区别。

RUN命令

RUN命令用于在Docker镜像构建过程中执行命令。它以当前镜像为基础,在新的镜像中运行命令并提交结果,常常用于安装软件包和依赖项。 语法:

RUN <command>

示例:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl

解释:该Dockerfile从Ubuntu镜像开始新的构建,然后使用RUN命令安装curl软件包。

CMD命令

CMD命令用于指定Docker容器启动时应运行的默认命令。如果Dockerfile中已经有CMD,则使用最后一个CMD,因为只能有一个CMD。 语法:

CMD ["executable","param1","param2"]

示例:

FROM ubuntu:latest
CMD ["echo","Hello, World!"]

解释:该Dockerfile从Ubuntu镜像开始新的构建,然后使用CMD命令定义默认命令为打印"Hello, World!"。

ENTRYPOINT命令

ENTRYPOINT命令类似于CMD命令,它用于定义容器启动时要运行的命令。不同之处是,ENTRYPOINT命令不可被覆盖。如果在docker启动容器时提供的命令与ENTRYPOINT命令不匹配,则会将用户提供的命令作为ENTRYPOINT命令的参数。 语法:

ENTRYPOINT ["executable","param1","param2"]

示例:

FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]

解释:该Dockerfile从Ubuntu镜像开始新的构建,使用ENTRYPOINT定义默认命令为"echo"。CMD命令是可选的,用于传递默认参数。当使用此Docker映像创建容器时,在运行容器时可以提供其他要打印的消息,如:docker run <image-name> Hello, Docker!

总结
  • RUN命令用于在Docker镜像构建过程中执行命令。
  • CMD命令用于指定Docker容器启动时应运行的默认命令。
  • ENTRYPOINT命令用于定义容器启动时要运行的命令,并且无法被覆盖。