docker 系列之 Dockerfile 文件里 cmd命令与entrypoint命令区别

这篇具有很好参考价值的文章主要介绍了docker 系列之 Dockerfile 文件里 cmd命令与entrypoint命令区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、cmd:

cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也从侧面说明了entrypoint的含义,它才是真正的容器启动以后要执行命令。

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加入到中括号的参数中。这种用法就像一个c语言的exec函数,意思是我们要执行一个进程。如果采用非shell的方法,那么上面的例子要修改为:

FROM centos
 
CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]

注意:采用中括号形式,那么第一个参数必须是命令的全路径才行。而且,一个dockerfile至多只能有一个cmd,如果有多个,只有最后一个生效。官网推荐采用这种方法。

当然,以上都是体现了cmd的“默认”行为。如果我们在run时指定了命令或者有entrypoint,那么cmd就会被覆盖。仍然是上面的image。run命令变了:
docker entrypoint和cmd,运维部署,docker,linux,运维
可以看到,最终容器里面执行的是run命令后面的命令,而不是cmd里面定义的。

用法2:shell form,即没有中括号的形式

那么命令command默认是在“/bin/sh -c”下执行的。比如下面的dockerfile:

FROM centos
 
CMD echo "hello cmd!"

运行:
docker entrypoint和cmd,运维部署,docker,linux,运维

注意:采用中括号形式,那么第一个参数必须是命令的全路径才行。而且,一个dockerfile至多只能有一个cmd,如果有多个,只有最后一个生效。

二、entrypoint:

entrypoint才是正统地用于定义容器启动以后的执行体的,其实我们从名字也可以理解,这个是容器的“入口”。
有两种用法:命令行和shell。

ENTRYPOINT has two forms:
 
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)

第一种:命令行模式,也就是带中括号

和cmd的中括号形式是一致的,但是这里貌似是在shell的环境下执行的,与cmd有区别。如果run命令后面有东西,那么后面的全部都会作为entrypoint的参数。如果run后面没有额外的东西,但是cmd有,那么cmd的全部内容会作为entrypoint的参数,这同时是cmd的第二种用法。这也是网上说的entrypoint不会被覆盖。当然如果要在run里面覆盖,也是有办法的,使用–entrypoint即可。

例如:
dockerfile为:

FROM centos
 
CMD ["p in cmd"]
ENTRYPOINT ["echo"]

如果run不带参数:
docker entrypoint和cmd,运维部署,docker,linux,运维
如果run带参数:
docker entrypoint和cmd,运维部署,docker,linux,运维
而且,确实entrypoint的中括号形式下,command是在shell环境下运行的,否则这里的echo是无法被执行的。

第二种:shell模式

在这种模式下,任何run和cmd的参数都无法被传入到entrypoint里。官网推荐第一种用法。
例如:

FROM centos
 
CMD ["p in cmd"]
ENTRYPOINT echo

docker entrypoint和cmd,运维部署,docker,linux,运维

三、总结:

一般还是会用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认版本,也就是run里面没有任何参数时使用的默认参数。如果我们想用默认参数,就直接run,否则想用其他参数,就run 里面加参数。文章来源地址https://www.toymoban.com/news/detail-744186.html

到了这里,关于docker 系列之 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日
    浏览(52)
  • dockerfile用ENTRYPOINT好还是用CMD好

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

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

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

    2024年02月01日
    浏览(25)
  • PowerShell系列(一):PowerShell介绍和cmd命令行的区别

    目录 1、cmd命令行窗口有哪些缺点呢? 2、PowerShell的产生 3、PowerShell优点 4、PowerShell使用场景 什么是Windows系统的命令行环境,之前我们在使用XP、Win7系统的时候,用的最多的就是微软官方自带的cmd命令窗口了,我们通过敲命令行窗口可以实现和操作系统之间的交互。当然随着

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

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

    2024年01月21日
    浏览(30)
  • docker ENTRYPOINT 执行多条命令

    如何在docker里面同时启动多个pm2进程_祥仔先生的博客-CSDN博客_docker pm2 ENTRYPOINT 命令1 命令2 命令3 dockerfile中添加: RUN chmod -x setup.sh ENTRYPOINT [\\\"sh\\\", \\\"./setup.sh\\\"]

    2024年02月12日
    浏览(27)
  • Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

    Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享: 数据持久化 :容器自身是易失的,当容器被删除时,存储在容器内部的数据也

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

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

    2024年02月16日
    浏览(24)
  • Dockerfile——ENTRYPOINT详解

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

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

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

    2024年02月05日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包