当前位置: 首页 > article >正文

如何通俗易懂地理解Dockerfile中的NTRYPOINT 和 CMD

文章目录

  • 一、核心区别
  • 二、解释
  • 三、代码示例
  • 四、组合使用
  • 五、总结

一、核心区别

ENTRYPOINT:

  • 用于定义不可变的主命令。
  • 它告诉 Docker 容器必须始终运行这个命令。
  • 可以结合容器启动时的参数,形成灵活的执行效果。

CMD:

  • 用于定义默认命令或参数。
  • 如果在运行容器时指定了其他命令或参数,它会被覆盖。

二、解释

假设你开了一家披萨店:

  • ENTRYPOINT 就像是固定的主菜:披萨永远是店里必备的产品。无论顾客点什么附加的调料(参数),披萨都会被做出来。
  • CMD 就像是披萨的默认口味。如果顾客不说要什么口味(没有额外指定参数),那就按默认的“玛格丽特披萨”来做。

三、代码示例

使用 CMD

FROM ubuntu
CMD ["echo", "Hello World"]

如果你运行容器:docker run myimage,它会输出:
Hello World
如果你运行容器时指定命令:docker run myimage echo Bye,它会输出:
Bye
(CMD被覆盖了)

使用 ENTRYPOINT

FROM ubuntu
ENTRYPOINT ["echo", "Hello"]

如果你运行容器:docker run myimage,它会输出:
Hello

如果你运行容器时指定参数:docker run myimage Bye,它会输出:
Hello Bye
(ENTRYPOINT不会被覆盖,参数附加到命令后面)

四、组合使用

FROM ubuntu
ENTRYPOINT ["echo"]
CMD ["Hello World"]

如果你运行容器:docker run myimage,它会输出:
Hello World

如果你运行容器时指定参数:docker run myimage Bye,它会输出:
Bye
(ENTRYPOINT固定执行,CMD作为默认参数)

五、总结

  • ENTRYPOINT 更适合用来定义核心任务,确保容器运行时总是执行特定的逻辑。
  • CMD 更适合定义默认参数,允许在需要时被覆盖。
  • 如果需要灵活性,可以结合使用两者!

http://www.kler.cn/a/455241.html

相关文章:

  • Windows Powershell实战指南(未完成)
  • CTF-RE: 安卓逆向 + 加密算法分析爆破 [第一届国城杯 round] 赛后学习
  • 中关村科金外呼机器人智能沟通破解营销难题
  • QT线程 QtConcurrent (深入理解)
  • 邮箱手机号脱敏
  • Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉
  • 消息中间件——rabbitmq,kafka,rocketmq
  • GitHub 上排名前 11 的开源管理后台(Admin Dashboard)项目
  • 宏集eX710物联网工控屏在石油开采机械中的应用与优势
  • 【C++】剖析lower_bound upper_bound
  • Hive on Spark 离线数据仓库中拉链表全流程使用
  • Java设计模式 —— 【结构型模式】外观模式详解
  • 24.try块怎么用 C#例子
  • 【Linux】硬件信息和系统及内核信息收集并对比差异
  • 深入理解HTML页面加载解析和渲染过程(一)
  • 双刃剑下的机遇与风险:交易中的杠杆效应
  • C#开发实例1—彩票选号
  • tryhackme-Cyber Security 101-Networking-Tcpdump: The Basics(tcpdump:基础知识)
  • 【只生一个好 - 单例设计模式(Singleton Pattern)】
  • C++第五六单元测试
  • VUE3+VITE简单的跨域代理配置
  • 详细对比JS中XMLHttpRequest和fetch的使用
  • 【开发问题记录】执行 git cz 报require() of ES Module…… 错误
  • 内置ALC的前置放大器D2538A/D3308
  • 一个服务器可以搭建几个网站?搭建一个网站的流程介绍
  • Rocky DEM tutorial7_Conical Dryer_锥形干燥器