Dockerfile: CMD与ENTRYPOINT区别

这篇具有很好参考价值的文章主要介绍了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

列出了所有目录

Dockerfile: CMD与ENTRYPOINT区别,Docker,java,服务器,linux

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

Dockerfile: CMD与ENTRYPOINT区别,Docker,java,服务器,linux

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

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

Dockerfile: CMD与ENTRYPOINT区别,Docker,java,服务器,linux

这个时候就执行成功了。验证了 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

Dockerfile: CMD与ENTRYPOINT区别,Docker,java,服务器,linux

总结一下:

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

而ENTRYPOINT的情况下-l 追加到了ls -a 的后面 变成了ls -al。文章来源地址https://www.toymoban.com/news/detail-784969.html

到了这里,关于Dockerfile: CMD与ENTRYPOINT区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 48-Dockerfile-CMD/ENTRYPOINT指令

    前言 本篇来学习下Dockerfile中的CMD/ENTRYPOINT指令 CMD 作用 启动容器时默认执行的命令 说明: 一个 Dockerfile 只有一个 CMD 指令,只有最后一个 CMD 指令生效 使用 docker run -d xxx CMD 命令是可以覆盖 Dockerfile 中的 CMD 指令的 格式 使用示例 新建dockerfile 制作镜像 运行容器 可以看到只执

    2024年02月04日
    浏览(69)
  • dockerfile用ENTRYPOINT好还是用CMD好

    在 Dockerfile 中使用 `ENTRYPOINT` 和 `CMD` 都有其用途和优劣势,具体取决于你的应用和需求。这两个指令的主要区别在于如何处理容器启动时的命令参数。 1. `CMD` 指令:    - `CMD` 用于定义容器启动时的默认命令,但它可以在运行容器时被替代。如果在运行容器时提供了命令参数

    2024年02月08日
    浏览(49)
  • docker的run,cmd,entrypoint分析和对比

    本文一起看下Dockerfile中经常用到的几个类似命令,RUN,CMD,ENTRYPOINT。 想要有容器我们就必须先创建镜像,而想要有镜像,我们则必须写一个用来描述想要创建的镜像的文件,这个文件我们一般叫做Dockerfile (非强制) ,则容器怎么来的就如下图: 经过上图的 过程1 我们就有

    2024年02月01日
    浏览(33)
  • Dockerfile——ENTRYPOINT详解

      Entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部。 ENTRYPOINT 有两种格式: ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式,首选) ENTRYPOINT command param

    2024年02月08日
    浏览(35)
  • Dockerfile ENTRYPOINT 使用变量

    如下 Dockerfile 文件中: 本意是想在 entrypoint 执行的命令中添加变量参数 JAVA_OPTS 和 PARAMS,如果按照这样写,变量是不被解析的,会报错。 那么正确的写法是使用 sh -c 命令来执行后面的命令,示例如下: (END)

    2024年02月16日
    浏览(35)
  • 【Java】微服务——Docker容器部署(docker安装,docker配置镜像加速,DockerHub,docker基本操作,Dockerfile自定义镜像.Docker-Compose)

    微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1.1.1.应用部署的环境问题 大型项目组件较多,运

    2024年02月04日
    浏览(54)
  • Dockerfile 与 Docker Compose区别

    目录 Dockerfile Docker Compose 综合比较 Dockerfile 用途: Dockerfile 用于定义单个容器的构建过程。它包含了一系列指令,每个指令都代表容器构建过程中的一个步骤。这些步骤包括从基础镜像中构建、安装依赖、拷贝文件、设置环境变量等操作。 语法: Dockerfile 是一个文本文件,其

    2024年02月05日
    浏览(38)
  • dockerfile ENTRYPOINT 执行.sh脚本提示找不到文件或文件不存在 No such file or directory

    我这里记录的是我遇到的一种特殊情况,如果你也遇到了这个问题,且都试了在百度中找到的解决方法还没有解决可以看看是不是和我遇到的问题一样。 在Dockerfile中,我ADD了两个文件,一个是jar包,一个是一个执行jar包的.sh文件 但是在使用命令: 就会提示 /bin/sh: 0: cannot

    2024年01月21日
    浏览(43)
  • cmd控制台通过sftp命令下载服务器文件

    因为同事电脑没有远程连接工具,所以使用cmd连接远程,打开cmd控制台。 1.sftp连接服务器 如果远程主机的 IP 是 192.168.1.100或者是域名www.test.cn,用户名是user,在命令行模式下输入:sftp user@192.168.1.100或者 user@www.test.cn。回车,根据提示输入密码。   2.如果下载的是文件夹,可

    2024年02月11日
    浏览(106)
  • 服务器设置tomcat开机自启动(cmd命令行语句)

    1 找到tomcat安装目录,进入bin/文件夹下面,在此打开windows 命令行窗口。 2 输入 将tomcat注册成为windows服务,其中tomcatXXX为服务名。 3查看刚刚注册的服务 “我的电脑”-》右键管理 发现刚刚的服务是手动的,并不是自动的,而且无法通过界面修改启动方式。 4 命令行修改启动

    2024年02月13日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包