Dockerfile 中 CMD 写法的区别

CSDN 中文章不一定能及时更新,欢迎点击前往我的博客查看最新版本:许盛的博客

Dockerfile 中的 CMD 是个非常重要的指令,主要用于为容器提供启动命令,但是写法上有好几种方式,一段时间不看的话,容易忘记,记录一下作为备忘。

可以直接参考官方文档中对 CMD 的讲解:https://docs.docker.com/engine/reference/builder/#cmd

CMD 命令的写法有三种格式:

  • CMD ["executable", "param1", "param2"]: 这种写法叫做 exec form,也是最为推荐的一种写法
  • CMD ["param1", "param2"] 这种写法会作为 ENTRYPOINT 的默认参数使用
  • CMD command param1 param2:这种写法叫做 shell form

在上面的用法中,最重要的就是需要理解 exec formshell form 的区别。

举个例子,以 nginx 镜像为例:

FROM nginx
MAINTAINER https://www.xuxusheng.com
CMD ["nginx", "-g", "daemon off;"]

上面这种写法就是 exec form ,在运行的容器中,pid 为 1 的主进程是 nginx。

再换一种写法:

FROM nginx
MAINTAINER https://www.xuxusheng.com
CMD nginx -g "daemon off;"

这种写法就是 shell form,此时运行的容器中,pid 为 1 的进程就变成了 /bin/sh -c nginx -g "daemon off;"

推荐使用 exec form 形式,将实际的应用程序作为主进程,而不是 sh 作为主进行,避免一些信号传递的问题,具体可以参考:Dockerfile 中 CMD 为什么要避免使用 sh -c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值