Dockerfile: CMD与ENTRYPOINT区别

CMD和ENTRYPOINT的作用


CMD和ENTRYPOINT这两个命令,我接触到的是用在了Dockerfile中用于构建容器。

CMD:The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是为正在执行的容器提供默认值。也就是指定这个容器启动的时候要运行的命令。

ENTRYPOINT:也是指定这个容器启动的时候要运行的命令。
 

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)

Dockerfile中只有一条CMD指定,如果列出多个,只有最后一个CMD才会生效。
CMD的主要目的是为正在执行的容器提供默认值。这些默认值可以包括可执行问卷,也可以省略可执行问卷,在这种情况下必须指定给一条ENTRYPOINT指令。

ENTRYPOINT语法

ENTRYPOINT 有两种形式:

exec形式,这是首选形式:

ENTRYPOINT ["executable", "param1", "param2"]
外壳形式:

ENTRYPOINT command param1 param2

与CMD类似再Dockerfile中只有一条ENTRYPOINT指定,如果列出多个,只有最后一个ENTRYPOINT生效。

CMD与ENTRYPOINT的区别

docker run后面的参数会将CMD指定的参数进行覆盖。

ENTRYPOINT与CMD的区别是不可以被docker run 后的参数覆盖,会把docker run后面的参数传递给ENTRYPOINT指定的参数。

案例


使用使用Dockerfile构建centos镜像,再Dockerfile中使用CMD和ENTRYPOINT。当docker run +参数的时候进行CMD 和ENTRYPOINT的测试,CMD指定的参数是否会被覆盖,以及ENTRYPOINT指定的参数是否会最佳docker run后面的参数。
 

测试CMD

1.创建一个名为dockerfile-centos-test的文件,再编写dockerfile文件。

# 编写dockerfile文件
$ vim dockerfile-centos-test
FROM centos
CMD ["ls","-a"] #再容器运行的时候列出所有目录
# 构建镜像
$ docker build -f dockerfile-centos-test -t cmd-test:0.1 .
# 运行镜像
$ docker run cmd-test:0.1

列出了所有目录

2.这个时候我们再追加一个命令-l 变成ls-al

出现错误,再CMD的情况加-l 替换了CMD[“ls”,“-l”].由于-l不是命令所以报错。

3.我们再输入docker run cmd-test:0.1 ls

这个时候就执行成功了。验证了 docker run时输入的命令会替换掉CMD的命令

测试ENTRYPOINT

和之前测试CMD一样,

#创建一个文件docker-test-entrypoint
#编写dockerfile文件
$ vim docker-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
#构建镜像
$ docker build -f docker-test-entrypoint -t entrypoint-test:0.1 .
#运行镜像
$ docker run entrypoint-test:0.1```
这个时候追加一个命令-l 成为ls-al
```powershell
# 想追加一个命令 -l 成为ls -al
$ docker run cmd-test:0.1 -l

总结一下:

CMD的情况下 -l 替换了CMD的ls -a。

而ENTRYPOINT的情况下-l 追加到了ls -a 的后面 变成了ls -al。

相关推荐

  1. docker中CMD和ENTRYPOINT区别

    2024-01-12 17:04:02       39 阅读
  2. Dockerfile中 CMD和ENTRYPOINT区别

    2024-01-12 17:04:02       15 阅读
  3. Dockerfile: ENTRYPOINT和CMD的区别

    2024-01-12 17:04:02       10 阅读
  4. Dockerfile 里 ENTRYPOINT 和 CMD 的区别

    2024-01-12 17:04:02       9 阅读
  5. Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别

    2024-01-12 17:04:02       14 阅读
  6. nacoseureka区别

    2024-01-12 17:04:02       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-12 17:04:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-12 17:04:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-12 17:04:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-12 17:04:02       20 阅读

热门阅读

  1. 【Linux】ubantu学习笔记

    2024-01-12 17:04:02       39 阅读
  2. 做亚马逊怎么选品?

    2024-01-12 17:04:02       40 阅读
  3. 【嵌入式——QT】QAbstractTableModel继承

    2024-01-12 17:04:02       40 阅读
  4. React---函数组件的常用hook

    2024-01-12 17:04:02       39 阅读
  5. Linux实用命令

    2024-01-12 17:04:02       36 阅读
  6. springboot整合jasypt对yml配置文件密码加密

    2024-01-12 17:04:02       36 阅读
  7. c++ 凯撒密码

    2024-01-12 17:04:02       27 阅读
  8. 【无标题】

    2024-01-12 17:04:02       36 阅读