dockerfile 中的CMD 和 ENTRYPOINT 的区别

网友投稿 257 2022-10-20

dockerfile 中的CMD 和 ENTRYPOINT 的区别

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

前面两篇博客描述了dockerfile基础及自定义dockerfile,今日来个小练习

前面两篇博客为:dockerfile【命令脚本】 构建镜像基础知识​  、  docker 镜像的生成方式,初识dockerfile,dockerfile 指定匿名挂载

CMD 采取的是替换策略,ENTRYPOINT 采取的追加策略

练习 1

使用CMD命令编写一个简易的dockerfile

FROM centosMAINTAINER wolong.ChenCMD ["ls","-a"]

2、构建镜像

docker build -f dockerfile01 -t cmdtest .

2.1、构建过程如下:

Sending build context to Docker daemon 3.072kBStep 1/3 : FROM centos ---> 5d0da3dc9764Step 2/3 : MAINTAINER wolong.Chen ---> Running in 980f186a8d7fRemoving intermediate container 980f186a8d7f ---> 4692e342d894Step 3/3 : CMD ["ls","-a"] ---> Running in e56481f6d5f7Removing intermediate container e56481f6d5f7 ---> d0e4226cd576Successfully built d0e4226cd576Successfully tagged cmdtest:latest

3、查看构建的镜像

docker images

4、运行镜像

docker run d0e4226cd576

5、说明

此镜像直接以centos为基础镜像,并通过CMD执行 ls -a 命令

6、执行如下命令是否能运行cmdtest镜像

docker run d0e4226cd576 -l

因为镜像中会执行 ls -a 命令,我们运行时加上 -l 是希望直接运行 ls -al 命令,此时容器是否能成功执行呢?

答案是执行报错,报错信息如下:

docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.ERRO[0001] error waiting for container: context canceled

大致意思是 -l 不是一条有效的命令

因此,也证明了CMD采取的并非追加策略,而是替换策略

练习 2

使用ENTRYPOINT命令编写一个简易的dockerfile

此时只需将我们的dockerfile 中的cmd 替换为 ENTRYPOINT 即可

编写dockerfile 如下:

FROM centosMAINTAINER wolong.ChenENTRYPOINT ["ls","-a"]

构建镜像

docker build -f dockerfile01 -t enttest .

执行镜像 ,并在后面追加命令参数 -l

docker run 8a2063322a2e -l

执行结果:

由此可见 CMD 属于命令替换,而 ENTRYPOINT 属于命令追加

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot在一定时间内限制接口请求次数的实现示例
下一篇:docker 容器间数据同步 --volumes-from 指定父容器 子容器 有点像主从复制
相关文章

 发表评论

暂时没有评论,来抢沙发吧~