【日常记录-Docker】CMD与ENTRYPOINT

Author:赵志乾
Date:2024-08-01
Declaration:All Right Reserved!!!

1. 简介

        CMD和ENTRYPOINT都是Dockerfile中用于定义容器启动时执行命令的两个重要指令,两者在原理、用法以及相互关系上有显著的区别;

        CMD:在Dockerfile中用于为容器提供默认的执行命令或参数,当容器启动时,若没有通过docker run命令指定其他命令,则会执行CMD中定义的命令;即CMD的主要用途是为容器内的应用程序提供默认的运行方式或参数;

        ENTRYPOINT:在Dockerfile中用于指定容器启动时运行的命令,该命令在容器每次启动都会执行,并且不会被docker run中指定的其他命令覆盖(但可以通过--entrypoint选项覆盖);即ENTRYPOINT通常用于设置容器的主进程或服务,例如启动一个Web服务器或数据库服务器;

2. 基本语法

        CMD有三种语法格式:

  • exec模式,例如 CMD["executable","param1","param2"],这是推荐的格式,拥有更好的性能和安全性;
  • shell模式,例如 CMD command param1 param2 ;
  • 传递参数,例如 CMD ["param1","param2"],这种格式下,CMD提供的参数会作为默认参数传递给ENTRYPOINT;

        ENTRYPOINT有两种语法格式:

  • exec模式,例如:ENTRYPOINT ["executable","param1","param2"];
  • shell模式,例如:ENTRYPOINT command param1 param2;

3. 区别与联系

  • 覆盖机制:CMD提供的默认指令或参数可以被docker run命令中指定的命令或参数覆盖;而ENTRYPOINT指定的命令不会被覆盖,但可以通过docker run命令传递参数给ENTRYPOINT指定的命令;
  • 用途:CMD主要用于为容器内的应用程序提供默认的运行方式或参数;ENTRYPOINT则用于定义容器的主进程或服务,确保容器始终按照预期的方式运行;
  • 配合使用:CMD和ENTRYPOINT可以配合使用,以提供更灵活的容器行为;当同时设置CMD和ENTRYPOINT时,CMD会被视为ENTRYPOINT的参数;

4. 注意事项

  • 每个Dockerfile中只能有一条CMD指令,若指定了多条,只有最后一条会被执行;
  • 每个Dockerfile中只能有一条ENTRYPOINT指令,若指定了多条,只有最后一个生效;
  • 结合使用CMD和ENTRYPOINT的方式主要用于需要固定容器入口点,但又想提供默认参数或允许用户覆盖参数的场景;

5. 结合CMD与ENTRYPOINT

ENTRYPOINT ["echo", "Message from ENTRYPOINT:"]  
CMD ["Hello,"]

        若运行容器时,不提供任何参数( docker run <image_name>),容器将输出 Message from ENTRYPOIN:Hello,;若运行容器时提供了新的参数(docker run <image_name> Docker),容器将输出Message from ENTRYPOINT:Docker;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫白小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值