Docker之Dockerfile的CMD 与 ENTRYPOINT 的区别

shell格式和Exec格式运行命令

我们可用两种方式指定 RUN、CMD 和 ENTRYPOINT 要运行的命令:Shell 格式和 Exec 格式:

  • Shell格式: 。例如:apt-get install python3
  • Exec格式: [“executable”, “param1”, “param2”, …]。
    例如: [“apt-get”, “install”, “python3”]

一.CMD

1.定义

设置容器启动后默认执行的命令和参数

CMD在容器运行的时候提供一些命令及参数,用法如下

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) 
  • 第一种用法:运行一个可执行的文件并提供参数。
  • 第二种用法:为ENTRYPOINT指定参数。
  • 第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令
2.例子

创建Dockerfile文件,内容如下:

FROM ubuntu
ENV name lss0555
CMD echo "hello $name"

创建镜像:

docker build -t lss0555/docker-cmd .

(1) 运行指令后如下:

docker run lss0555/docker-cmd

结果输出:

hello lss0555

(2) 如果运行指令为

docker run lss0555/docker-cmd echo hi

结果输出:

hi

总结
  1. 当 run 时没带其他命令, 默认执行 CMD 里的命令
  2. 如果docker run指定了其他命令,cmd命令则会被忽略
  3. 如果定义了多个CMD,只有最后一个会被执行.

二.ENTRYPOINT

1.定义

设置容器启动时运行的命令

2.两种写法:
  • 写法一:

ENTRYPOINT [“executable”, “param1”, “param2”] (the preferred exec form)

  • 写法二:

ENTRYPOINT command param1 param2 (shell form)

第二种(shell form)会屏蔽掉docker run时后面加的命令和CMD里的参数

3.例子

创建Dockerfile文件,内容如下:

FROM ubuntu
ENTRYPOINT ["/bin/echo","hello"]

创建镜像

docker build -t lss0555/docker-entrypoint .

(1)运行结果如下:

docker run lss0555/docker-entrypoint

结果:

hello

(2) 如果运行执行为

docker run lss0555/docker-entrypoint world

运行结果如下:

hello world

4.总结
  1. 让容器以应用程序或者服务的形式运行(比如:数据库的服务)
  2. 不会被忽略,一定会被执行
  3. 最佳实践:写一个shell脚本作为entrypoint

三.ENTRYPOINT与CMD一起用

编写Dockerfile问下,如下:

FROM ubuntu
ENTRYPOINT ["/bin/echo","hi,"]
CMD ["hello"]

创建镜像文件为:

docker build -t lss0555/docker-entrypoint-cmd .

(1) 运行该镜像

docker run lss0555/docker-entrypoint-cmd

结果为:

hi, hello

(2) 如果运行指令后面加上 world

docker run lss0555/docker-entrypoint-cmd world

则运行结果为:

hi,world

总结
  1. 当 run 时没带其他命令, 执行 ENTRYPOINT + CMD 里的命令
  2. 当 run 时带有其他命令, 会覆盖 CMD 里的命令, 执行 ENTRYPOINT + 输入的命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值