云计算-7-Dockerfile深度解析CMD和ENTRYPOINT指令

发布于 2024-07-19
880

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读
Dockerfile深度解析

Dockerfile深度解析

CMD指令

CMD用于指定容器启动时的默认命令和参数。Docker中的容器本质是进程,启动时需要明确的程序运行指令。CMD有两种格式:

  • Shell格式:CMD command arg1 arg2
  • Exec格式:CMD ["可执行文件", "arg1", "arg2"]
  • 第三种写法:CMD ["arg1", "arg2"],用于为ENTRYPOINT提供默认参数。

示例中展示了如何使用CMD指令启动容器,并解释了其行为。尤其强调了CMD与容器主进程的关系:主进程退出后,容器也随之退出。

示例1

基于nginx镜像构建,使用CMD打印文本。运行容器后,通过docker logs查看日志。

示例2

基于CentOS镜像构建,安装nginx并使用CMD启动nginx服务。提示指出CMD写法需要注意进程前后台的区别,否则可能导致容器意外退出。

ENTRYPOINT指令

ENTRYPOINT与CMD类似,也是用于指定容器启动程序和参数。其格式分为:

  • Shell格式:command param1 param2
  • Exec格式:ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT允许用户在运行容器时覆盖或补充参数。若同时指定CMD和ENTRYPOINT,则CMD内容作为参数传递给ENTRYPOINT。

示例3

安装nginx并使用ENTRYPOINT启动服务。通过docker run可传入参数,例如-v用于查看nginx版本。

示例4

类似示例3,展示了ENTRYPOINT与CMD组合使用的效果。

提示与限制

  • Dockerfile中只能有一个CMD指令,后续CMD会覆盖前一个。
  • CMD用于提供默认值,主要为执行中的容器配置默认命令或参数。
  • CMD为ENTRYPOINT提供默认参数时需使用JSON数组格式。
  • 运行容器时传递参数会覆盖CMD内容。

示例展示了CMD与ENTRYPOINT结合使用的场景及效果。

springboot葵花宝典

主要分享JAVA技术,主要包含SpringBoot、SpingCloud、Docker、中间件等技术,以及Github开源项目

275 篇文章
浏览 253.8K

还在用多套工具管项目?

一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。

加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线