D

Docker CMD 与 ENTRYPOINT:解释差异

2025-06-08

Docker CMD 与 ENTRYPOINT:解释差异

我们IT人士都喜欢摆弄新技术,Docker也不例外。事实上,在2019年的Stack Overflow开发者调查中,Docker被评为最想要的平台第一名、最受喜爱的平台第二名和使用最广泛的平台第三名。在2020年的调查中,Docker也被评为最想要的平台第一名、最受喜爱的平台第二名和最流行平台第三名

如果你碰巧读到这篇文章,你很可能被 水果狗狗CMD和Dockerfile 中定义的指令之间的区别ENTRYPOINT,用于描述如何运行 Docker 容器。

但是 Docker 容器是什么?

容器是轻量级、独立、可执行的软件包,旨在运行特定任务,无论是短期还是长期运行。因此,容器的生命周期取决于其内部正在进行的进程。

一旦进程停止,容器也会停止。

好的,但是我们的 Dockerfile 在这里扮演什么角色?

容器依赖于镜像,并使用镜像构建运行时环境来运行应用程序。Dockerfile 是一个脚本,其作用是定义最终镜像的创建流程,以及如何运行绑定到该镜像的容器。

创建 Docker 镜像的过程通常始于一个FROM命令,定义一个基础镜像,用于构建镜像。接下来我们通常会执行一系列RUN指令,用于运行修改底层文件系统的命令。

每条RUN指令都会创建一个包含对文件系统的修改的新图像层。

好的。那么 CMD 和 ENTRYPOINT 之间如何呢?

CMDENTRYPOINT是两种不同类型的指令,用于定义 Docker 容器的运行方式。
让我们深入了解一下它们的细节:

命令

指令CMD定义了从镜像运行 Docker 容器所使用的默认命令。

给出如下简单图像:

FROM alpine
CMD ["echo", "Hello, World!"]
Enter fullscreen mode Exit fullscreen mode

使用以下命令运行它:

docker container run my-container
Enter fullscreen mode Exit fullscreen mode

将产生以下结果:

Hello, World!
Enter fullscreen mode Exit fullscreen mode

Dockerfile 可以包含多CMD条指令,但除了最后一条指令之外,其他每条指令都将被忽略。

CMD可以通过传递给的参数覆盖指令docker container run例如:

docker container run my-container echo "Hello again!"
Enter fullscreen mode Exit fullscreen mode

将产生:

Hello again!
Enter fullscreen mode Exit fullscreen mode

入口点

ENTRYPOINT指令定义用于启动容器的默认命令,就像它们的 CMD 兄弟一样。

FROM alpine
ENTRYPOINT ["echo", "Hello, World!"]
Enter fullscreen mode Exit fullscreen mode

将产生:

Hello, World!
Enter fullscreen mode Exit fullscreen mode

很酷,那么...现在有什么区别?

嗯,主要的区别是,如果在 Dockerfile 中定义了CMD和指令,则该指令将连接到以下指令:ENTRYPOINTCMDENTRYPOINT

FROM alpine
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]
Enter fullscreen mode Exit fullscreen mode

威尔带领我们看到:

Hello, World!
Enter fullscreen mode Exit fullscreen mode

此外,虽然CMD根据设计,可以通过向docker container run命令传递参数来轻松覆盖指令,但ENTRYPOINT通过强制用户使用标志,故意使其更难以手动覆盖--entrypoint

这让我们得出一个模式

这种设计使我们形成了一致的模式。我们喜欢模式,模式有益于我们的心理健康:

我们可以使用它ENTRYPOINT来定义始终执行的基本命令,并CMD为该命令定义默认参数,可以通过将自定义参数传递给来轻松覆盖docker container run

鏂囩珷鏉ユ簮锛�https://dev.to/hood/docker-cmd-vs-entrypoint-explaining-the-difference-55g7
PREV
Webhooks 教程:Webhooks 入门指南
NEXT
像专业人士一样使用 React Context API Context API 背后的概念考虑这个例子使用 Context 创建 Context