Dockerfile中的CMD和ENTRYPOINT

因为不怎么用得到,所以之前一直对Dockerfile中的CMD、ENTRYPOINT命令迷迷糊糊,没有彻底区分开这两者的区别和各自的作用,最近做练习,就根据网上的资料做测试和总结

先说一下两者的各自功能

1、CMD

用于运行程序,只是在运行容器时,即docker run时执行,目的是为启动的容器指定默认要运行的程序(默认,默认,默认,重要的事情说三遍),因为是默认,所以,即使Dockerfile中有CMD命令,但是在docker  run时指定了命令或者有entrypoint,那么CMD命令就会被覆盖

2、ENTRYPOINT

也是在运行容器时执行程序,正如其名,这才是真正的程序入口,所以指定ENTRYPOINT命令会覆盖默认的CMD命令

大部分使用场景

FROM busybox

# 场景1   Dockerfile中只有CMD且只有一条命令,并且docker run不指定任何命令    output: hello world
# CMD ["echo","hello","world"]  
# CMD  echo  "hello" "world"     

# 场景2   Dockerfile中只有CMD且只有一条命令,但docker run时指定echo love you 命令,
# 此时输出结果为容器运行时指定的命令,CMD命令会被覆盖    output: love  you
# docker run --name bbox01 -itd cmdt:v1 echo "love" "you"   

# 场景3   Dockerfile中只有CMD命令且有多条命令,只有最后一条命令生效  output: hello  world
# CMD ["echo","welcome to china"]   
# CMD echo "hello","world"

# 场景4  Dockerfile中有ENTRYPOINT 和 CMD(以中括号引用的CMD命令)命令,不管哪个前哪个后,都是ENTRYPOINT命令生效,
# 并且CMD命令中参数会被当做前者的参数   ouput:  welcome to china echo hello world,
# 并且此时,再在运行时指定命令,那么Dockerfile中的CMD命令会被替代,ENTRYPOINT命令不会变;
ENTRYPOINT ["echo","welcome to china"]
CMD ["echo","hello","world"]

 

参考:

https://www.cnblogs.com/klvchen/p/9238410.html

https://blog.csdn.net/u010900754/article/details/78526443

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值