导读:目前正在解读《Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较(4/4)》的相关信息,《Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较(4/4)》是由用户自行发布的知识型内容!下面请观看由(国外服务器 - www.2bp.net)用户发布《Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较(4/4)》的详细说明。

---> 3c26b6a8ef1b

Step 4 : RUN chmod a+x /opt/startup

---> Using cache

---> 04d9b53d6148

Step 5 : ENTRYPOINT /opt/startup arg1

---> Running in 54947233dc3d

---> 15a485253b4e

Removing intermediate container 54947233dc3d

Step 6 : CMD arg2

---> Running in 18c43d2d90fd

---> 4684ba457cc2

Removing intermediate container 18c43d2d90fd

Successfully built 4684ba457cc2

复制代码

下面运行docker run启动两个test:latest镜像的容器,第一条docker run命令没有指定参数,第二条docker run命令指定了参数arg3,其运行结果如下,

lienhua34@test$ sudo docker run -ti --rm=true test

in startup, args: arg1 arg2

lienhua34@test$ sudo docker run -ti --rm=true test arg3

in startup, args: arg1 arg3

从上面第一个容器的运行结果可以看出CMD指令为ENTRYPOINT指令设置了默认参数;从第二个容器的运行结果看出,docker run命令指定的参数覆盖了CMD指令指定的参数。

4.3注意点

CMD指令为ENTRYPOINT指令提供默认参数是基于镜像层次结构生效的,而不是基于是否在同个Dockerfile文件中。意思就是说,如果Dockerfile指定基础镜像中是ENTRYPOINT指定的启动命令,则该Dockerfile中的CMD依然是为基础镜像中的ENTRYPOINT设置默认参数。

例如,我们有如下一个Dockerfile文件,

复制代码

FROM ubuntu:14.04

MAINTAINER lienhua34@xxx.com

ADD startup /opt

RUN chmod a+x /opt/startup

ENTRYPOINT ["/opt/startup", "arg1"]

复制代码

通过运行docker build命令生成test:0.0.1镜像,然后创建该镜像的一个容器,查看运行结果,

复制代码

lienhua34@test$ sudo docker build -t test:0.0.1 .

Sending build context to Docker daemon 6.144 kB

Step 1 : FROM ubuntu:14.04

---> a5a467fddcb8

Step 2 : MAINTAINER lienhua34@163.com

---> Running in 57a96522061a

---> c3bbf1bd8068

Removing intermediate container 57a96522061a

Step 3 : ADD startup /opt

---> f9884fbc7607

Removing intermediate container 591a82b2f382

Step 4 : RUN chmod a+x /opt/startup

---> Running in 7a19f10b5513

---> 16c03869a764

Removing intermediate container 7a19f10b5513

Step 5 : ENTRYPOINT /opt/startup arg1

---> Running in b581c32b25c3

---> c6b1365afe03

Removing intermediate container b581c32b25c3

Successfully built c6b1365afe03

lienhua34@test$ sudo docker run -ti --rm=true test:0.0.1

in startup, args: arg1

复制代码

下面新建一个Dockerfile文件,基础镜像是刚生成的test:0.0.1,通过CMD指定要通过echo打印字符串“in test:0.0.2”。文件内容如下所示,

FROM test:0.0.1

MAINTAINER lienhua34@xxx.com

CMD ["/bin/bash", "-c", "echo in test:0.0.2"]

运行docker build命令生成test:0.0.2镜像,然后通过运行docker run启动一个test:0.0.2镜像的容器来查看结果,

复制代码

lienhua34@test$ sudo docker build -t test:0.0.2 .

Sending build context to Docker daemon 6.144 kB

Step 1 : FROM test:0.0.1

---> c6b1365afe03

Step 2 : MAINTAINER lienhua34@163.com

---> Running in deca95cf4c15

---> 971b5a819b48

Removing intermediate container deca95cf4c15

Step 3 : CMD /bin/bash -c echo in test:0.0.2

---> Running in 4a31c4652e1e

---> 0ca06ba31405

Removing intermediate container 4a31c4652e1e

Successfully built 0ca06ba31405

lienhua34@test$ sudo docker run -ti --rm=true test:0.0.2

in startup, args: arg1 /bin/bash -c echo in test:0.0.2

复制代码

从上面结果可以看到,镜像test:0.0.2启动的容器运行时并不是打印字符串”in test:0.0.2”,而是将CMD指令指定的命令当做基础镜像test:0.0.1中ENTRYPOINT指定的运行脚本startup的参数。


提醒:《Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较(4/4)》最后刷新时间 2023-03-27 02:11:57,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较(4/4)》该内容的真实性请自行鉴别。