Docker中CMD和ENTRYPOINT的区别

一.CMD

  1. CMD指令为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。
  2. CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
  3. 类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:CMD 在docker run 时运行,RUN 是在 docker build时运行。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
用法

The CMD instruction has three forms:
# 用法
CMD ["executable","param1","param2"] (exec form, this is the preferred form)

CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

CMD command param1 param2 (shell form)
  • 用法1
    带有括号的形式,这时,命令没有在任何shell终端环境下,如果我们要执行shell,必须把shell加入到括号的参数中。
FROM centos:7

CMD ["/bin/bash","-c","echo 'this is a test!'"]

采用中括号的形式,那么第一个参数必须是命令的全路径才行;而且一个dockerfile最多只能有一个cmd,如果有多个,只有最后一个生效
在这里插入图片描述

以上是默认的cmd,如果我们在run的时候指定了命令或者有ENTRYPOINT,那么cmd就会被覆盖
在这里插入图片描述

  • 用法2
    作为 ENTRYPOINT的参数
  • 用法3
    shell form,即没有中括号的形式。那么命令command默认是在“/bin/sh -c”下执行的
FROM centos:7

CMD echo "hello world !"

在这里插入图片描述

二.ENTRYPOINT

  1. 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
  2. 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
  3. 在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
用法

ENTRYPOINT has two forms:
 # 用法
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)

ENTRYPOINT command param1 param2 (shell form)

用法1命令行模式,也就是带中括号的和cmd的中括号形式是一致的,但是这里貌似是在shell的环境下执行的,与cmd有区别。如果run命令后面有东西,那么后面的全部都会作为entrypoint的参数。如果run后面没有额外的东西,但是cmd有,那么cmd的全部内容会作为entrypoint的参数,这同时是cmd的第二种用法。

  • 用法1
    run后面不带参数
FROM centos:7

CMD ["this is a test !"]

ENTRYPOINT ["echo"]

在这里插入图片描述
run后面带参数
在这里插入图片描述

  • 用法2
    是shell模式的。在这种模式下,任何run和cmd的参数都无法被传入到entrypoint里。
FROM centos:7

CMD ["this is a test !"]

ENTRYPOINT echo                  

在这里插入图片描述

三.总结

CMD设置的指令在镜像运行时自动运行,无法追加指令,只能把指令全部覆盖

ENTRYPOINT设置的指令在镜像运行时与CMD一样,可以在新建镜像时设置的指令后追加新的指令,也可以使用 --entrypoint 覆盖指令。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值