Dockerfile 中 RUN、CMD 和 ENTRYPOINT 之间有什么区别

要构建 Docker 镜像,需要使用 Dockerfile,其中包含指令。这些指令分别是 CMDRUNENTRYPOINT,用于定义 Docker 镜像的多个方面。由于工作原因,开发人员常常会对它们感到困惑。

本博客将列出并解释RUN、CMD和ENTRYPOINT命令之间的多种差异。

在 Dockerfile 中 RUN、CMD 和 ENTRYPOINT 之间有什么区别?

RUN 用于执行命令指令并创建新的镜像层。CMD 用于设置在容器启动后默认执行的命令及其参数。ENTRYPOINT 配置容器启动时要执行的命令,从功能的角度来看,类似于 CMD。

让我们通过下面提供的指令来检查 RUN、CMD 和 ENTRYPOINT 的工作原理。

首先,创建一个Dockerfile,并将以下代码粘贴到其中,该代码包含alpine基础镜像和Docker容器的RUN运行指令:

FROM alpine

RUN ["echo", "My new image created"]

之后,运行 docker build 命令来使用 Dockerfile 构建 Docker 镜像:

docker build -t alphine_img .

如您所见,Dockerfile 中提供的指令在构建镜像时已被执行:

接下来,通过运行以下命令检查现有图像的列表:

docker images

正如您所看到的,特定的图像已成功创建:

现在,在现有的Dockerfile中添加将在容器启动时执行的CMD指令:

FROM alpine

RUN ["echo", "My new image created"]

CMD ["Hi Welcome to my LinuxHint World!!"]

完成后,通过执行提供的命令构建新的 Docker 镜像:

docker build -t alphine_img1 .

现在,使用docker run命令创建一个Docker容器:

docker run --name gol_con1 alphine_img1

正如你所看到的,容器已创建,并且CMD指令已成功执行:

要覆盖CMD指令的内容,现在请执行以下命令构建一个带有新指令的容器:

docker run --name gol_container alphine_img1 "it's my LinuxHint

World"

上述命令的输出显示 CMD 指令已经被覆盖:

现在,在之前创建的Dockerfile中添加ENTRYPOINT指令,这将告诉容器的入口点:

FROM nginx:latest

COPY t_prg.html /usr/share/nginx/html/index.html

ENTRYPOINT ["nginx", "-g", "daemon off;"]

然后,通过执行以下命令来构建新镜像:

docker build -t oreo_img .

接下来,运行docker images命令以列出所有现有的镜像:

docker images

正如您所看到的,新创建的图像存在于列表中:

现在,运行以下命令以生成带有图像的容器:

docker run -d --name=sticky_con oreo_img:latest

最后,通过运行ls命令列出容器的内容:

ls

就是这样!我们已经描述并用示例说明了 RUNCMDENTRYPOINT 之间的一些区别。

结论

在Docker中,RUN用于执行命令指令并创建新的镜像层。而CMD用于设置命令及其参数,ENTRYPOINT配置容器启动时执行的命令。这篇博客说明了RUNCMDENTRYPOINT之间的一些重要区别。

🔥运维干货分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企鹅侠客

您的打赏是我创作旅程中的关键燃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值