Docker run cmd entrypoint有什么区别?

在Docker中,docker runcmdentrypoint是相互关联又各有不同的概念,它们都涉及到如何配置和启动容器

1、docker run

  • docker run是Docker客户端命令,用于创建一个新的容器并运行其中的应用程序。当你执行docker run时,你可以指定一系列参数,如镜像名称、命令、环境变量、端口映射、卷挂载等。它接受的命令行参数可以用来覆盖或者附加到镜像构建阶段定义的CMDENTRYPOINT指令

2、CMD

  • 在Dockerfile中,CMD指令用来定义容器启动时默认执行的命令及其参数,它可以有三种格式:
    • CMD ["executable", "param1", "param2"]:JSON数组格式,推荐使用,exec形式执行程序,不会经过shell解析
    • CMD ["[param1", "param2"]:如果指定了ENTRYPOINT,那么CMD中的参数将作为ENTRYPOINT的参数传递
    • CMD command param1 param2:shell格式,会通过shell执行命令
  • 如果用户在docker run 命令后面指定了命令,则CMD中定义的默认命令会被新指定的命令替换。若没有指定命令,则执行CMD中指定的命令

3、ENTRYPOINT

  • ENTRYPOINT也是在Dockerfile中定义的,它用于指定容器启动时始终执行的命令,这个命令不会被docker run的命令行参数覆盖,除非以组合的形式追加参数
  • ENTRYPOINT也有两种格式,与CMD相似:
    • ENTRYPOINT ["executable", "param1"]:exec形式,优先级高于CMD,并且无论是否提供docker run后的命令,都会执行次命令,并将docker run后的参数追加到ENTRYPOINT
    • ENTRYPOINT command param1:shell格式
  • 使用ENTRYPOINT可以确保每次容器启动时都执行同一命令,有助于将容器涉及的更加“应用导向”,使容器的行为更加一致。当同时设置了CMDENTRYPOINT时,CMD的内容会被视为ENTRYPOINT的参数

总结:
CMD是容器启动时如果没有指定命令时的默认行为,灵活性较强,易于被docker run后的命令覆盖
ENTRYPOINT更像是容器的核心功能定义,常用于定义容器的主应用程序,并且能接收docker run的命令作为参数,这样可以确保容器启动时总是执行预期的程序

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值