Dockerfile 中 ENTRYPOINT 与 CMD 的区别

Dockerfile 有两个启动配置, CMD 和 ENTRYPOINT , 可以在 Dockerfile 中来配置容器启动时自动执行的命令, 但是这二者有什么区别呢, 接下来总结如下:

首先来看一下 CMD , 有三种格式的配置, 分别是:

  • CMD [“executable”,“param1”,“param2”] (exec 格式, 推荐的格式)
  • CMD [“param1”,“param2”] (作为 ENTRYPOINT 的默认参数)
  • CMD command param1 param2 (shell 格式)

在使用时, 要注意一下问题:

  1. 包含可执行文件时, 为容器指定默认执行命令, 这个是主要用途;
  2. 不包含可执行文件时, 必须提供 ENTRYPOINT 配置, CMD 作为默认参数;
  3. Dockerfile 中只能有一个 CMD 起效, 如果出现了多个, 则最后一个起效;

而 ENTRYPOINT , 有两种格式的配置, 分别是:

  • ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式, 推荐)
  • ENTRYPOINT command param1 param2 (shell 格式)

CMD 和 ENTRYPOINT 两种配置格式的区别是:

  • exec 格式 推荐这种格式, 使用这种模式时, 可以不需要 shell 进程, 让 Docker 应用的可执行程序成为容器的 PID 1 进程, 可以接收 Unix 信号, 比如执行 docker stop <container style="box-sizing: border-box;">时能够接收到 SIGTERM。</container>

  • shell 格式 会始终调用一个 shell 进程, 成为 /bin/sh -c 的子命令, 可执行程序不能响应 Unix 信号。

注意: ENTRYPOINT 使用 shell 格式 时, 会忽略 CMD 和 run 传入的参数, 如果要替换默认的 ENTRYPOINT 命令, 则需要在执行 docker run 的时候指定 --entrypoint 参数。

当 CMD 和 ENTRYPOINT 的使用总结如下:

在 Dockerfile 中, 应该至少指定一个 CMD 和 ENTRYPOINT;
将 Docker 当作可执行程序时, 应该使用 ENTRYPOINT 进行配置;
CMD 可以用作 ENTRYPOINT 默认参数, 或者用作 Docker 的默认命令;
CMD 可以被 docker run 传入的参数覆盖;
docker run 传入的参数会附加到 ENTRYPOINT 之后, 前提是使用了 exec 格式 。

最后我们来看一个实例:

ENTRYPOINT 使用 exec 格式, ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。

比如下面的 Dockerfile 片段:


image.png

当容器通过 docker run -it [image] 启动时,输出为:

image.png

而如果通过 docker run -it [image] CloudMan 启动,则输出为:

image.png

参考文档

http://www.google.com
http://t.cn/Rn2s509
http://t.cn/Rn2s7gM

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 夜深了,我却久久不能入睡,因为我在思念着你,也在担心着你,担心你是否睡得安稳,担心你是否玩得开心,是否安全无疑 从...
    Tender丶Lea阅读 1,657评论 0 1
  • “后悔”,这个词好像已经很久没有听到过了,都不知道后悔长成什么样子。 昨天朋友问:“离开以前的公司,你后悔吗?”都...
    小鹿庄园zhlu阅读 1,306评论 0 0
  • 男神偶像最近有一首现场的演出歌曲,林禾巴巴的推荐给好友岳南听,并全神贯注看她听歌的表情。 岳南听完淡淡的说还可以。...
    fcf4e1974294阅读 1,898评论 0 1
  • 光阴吐丝,网住了生活 直到,眸子日趋暗淡了光泽 不能仰望星空 无法畅饮春风 十八岁,送我一匹野马 让我骑到三十八,...
    长夏漫歌阅读 1,911评论 0 2
  • 打架,偷钱,玩蚂蚁,点火,逃学没有干过正经事。 我妈没少揍我。但,我拥有很多“狐朋狗友”陪着我度过。 否则,没有电...
    Aoru阅读 1,618评论 0 1