cmd与entrypoint的区别

前言

环境:centos7.9 docker version 20.10.14
Dockerfile中最容易让人混淆的是CMDENTRYPOINT这两个指令,本篇我们来介绍这两个指令的用法和区别。

CMD 指定容器启动时默认运行命令

如果docker run指定了其他命令,CMD指定的默认命令将会被忽略掉;
如果Dockerfile存在多个CMD指令,则只有最后一个CMD有效;

1、exec格式:CMD ["executable","param1","param1"] 这是CMD的推荐格式
2、CMD ["param1","param1"] 为ENTRYPOINT提供额外的参数,此外ENTRYPOINT 必须使用exec格式
3、shell格式:CMD command param1 param2

演示示例:

CMD ["echo","Hello world"]
docker run -it [image]
Hello world									#输出结果

CMD echo "Hello world"
docker run -it [image]
Hello world									#输出结果

docker run -it [image] /bin/bash  			#CMD命令会被忽略
/:											#进入到容器内了
									
CMD ["/bin/sh","-c","echo hello,$name"]    	#-c表示解析变量

ENTRYPOINT 指定容器启动时运行的命令

ENTRYPOINT 指令也是指定容器启动时运行的命令,如果Dockerfile存在多个ENTRYPOINT 指令,则只有最后一个ENTRYPOINT 有效;
ENTRYPOINTCMD很类似,但是ENTRYPOINT 一定不会被忽略,一定会执行;

1、exec格式:ENTRYPOINT ["executable","param1","param1"] 这是ENTRYPOINT 的推荐格式
ENTRYPOINT的exec格式用于设置要执行的命令和参数,同时可通过CMD提供额外的参数
2、shell格式:ENTRYPOINT command param1 param2
注意:ENTRYPOINT的shell格式会忽略任何CMD或docker run提供的参数

ENTRYPOINT 中的参数始终会被使用,而CMD中的额外参数可以在容器启动时动态替换掉。
如果Dockerfile文件既有CMD,又有ENTRYPOINT ,那么CMD将会被当做参数传递给ENTRYPOINT

演示示例:

CMD ["World"]
ENTRYPOINT ["/bin/echo","Hello"]
docker run -it [images] 			#启动容器,输出结果如下
Hello World

CMD ["World"]
ENTRYPOINT ["/bin/echo","Hello"]
docker run -it [images] Man			#在命令行指定参数,启动容器,输出结果如下
Hello Man							#CMD被命令行参数忽略掉了,所以输出就是Hello Man


CMD ["World"]
ENTRYPOINT "/bin/echo" "Hello" 		#使用shell格式
docker run -it [images]				#启动容器,输出结果如下
Hello								#shell格式的ENTRYPOINT会忽略任何CMD或命令行参数

docker run -it [images] Man			#即使在命令行指定参数,启动容器,输出结果如下
Hello								#shell格式的ENTRYPOINT会忽略任何CMD或命令行参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值