首页 > 其他分享 >docker的CMD和ENTRYPOINT

docker的CMD和ENTRYPOINT

时间:2023-05-27 22:58:01浏览次数:43  
标签:容器 CMD 命令 ENTRYPOINT docker Dockerfile

在 Dockerfile 中,`CMD` 和 `ENTRYPOINT` 都用于定义容器启动时要执行的命令或程序,但它们有一些关键的区别。

1. `CMD` 的作用:
- `CMD` 指令用于设置容器启动时的默认命令或程序。
- `CMD` 可以在 Dockerfile 中只出现一次,如果有多个 `CMD` 指令,只有最后一个指令会生效。
- `CMD` 可以是一个完整的命令,也可以是一个命令加参数的数组形式。
- 如果在运行 `docker run` 命令时没有提供其他命令,将会执行 Dockerfile 中的 `CMD`。

2. `ENTRYPOINT` 的作用:
- `ENTRYPOINT` 指令也用于设置容器启动时要执行的命令或程序。
- `ENTRYPOINT` 可以在 Dockerfile 中只出现一次,如果有多个 `ENTRYPOINT` 指令,只有最后一个指令会生效。
- `ENTRYPOINT` 一般使用命令加参数的数组形式,类似于 `CMD`。
- `ENTRYPOINT` 的主要目的是定义容器的主要可执行程序,它不会被覆盖。
- 如果在运行 `docker run` 命令时提供了其他命令,它们将作为参数传递给 `ENTRYPOINT` 指定的命令。

区别总结:
- `CMD` 提供容器默认的命令和参数,可以在运行容器时被覆盖。
- `ENTRYPOINT` 提供容器的主要可执行程序,参数可以在运行容器时添加,但不会被覆盖。
- 如果同时在 Dockerfile 中使用了 `CMD` 和 `ENTRYPOINT`,`CMD` 的内容会被作为参数传递给 `ENTRYPOINT` 指定的命令。

使用 `CMD` 和 `ENTRYPOINT` 可以根据需要灵活地定义容器启动时的命令和行为,使容器能够根据预期的用途和场景执行所需的操作。

 

选择使用 `CMD` 还是 `ENTRYPOINT` 取决于你的具体需求和容器的用途。下面是一些建议和指导,帮助你在使用 Dockerfile 时决定使用哪个指令:

使用 `CMD`:
- 当你希望定义容器的默认命令或程序,并且希望用户在运行容器时可以覆盖该默认命令时,可以使用 `CMD`。这样用户可以在 `docker run` 命令中指定不同的命令来替代默认命令。
- 例如,如果你的容器是一个 Web 服务器,你可以使用 `CMD` 来指定启动该服务器的命令,并且用户可以在启动容器时指定其他的命令,如调试模式或不同的配置文件。

使用 `ENTRYPOINT`:
- 当你希望定义容器的主要可执行程序,它应该始终执行,而且不太可能被覆盖时,可以使用 `ENTRYPOINT`。
- `ENTRYPOINT` 定义了容器的入口点,通常是一个可执行程序或脚本。该程序将在容器启动时始终执行,并且不会轻易被替换。
- 如果用户在 `docker run` 命令中提供了其他命令,它们将作为参数传递给 `ENTRYPOINT` 指定的程序。

使用 `CMD` 和 `ENTRYPOINT` 组合:
- 在某些情况下,你可能需要同时使用 `CMD` 和 `ENTRYPOINT`,以便在容器启动时执行一个主要程序,并且允许用户通过传递参数来修改默认行为。
- 这可以通过在 Dockerfile 中定义 `ENTRYPOINT` 和 `CMD` 指令来实现。`ENTRYPOINT` 指定主要程序,而 `CMD` 提供默认参数。
- 这种组合的一个常见用途是在容器启动时执行一些预配置操作,然后根据用户提供的命令或参数执行相关的操作。

最终的选择取决于你的具体需求和容器的设计。考虑容器的用途、默认行为、用户需求和可灵活性,以及与容器交互的方式来决定使用 `CMD`、`ENTRYPOINT` 还是它们的组合。

标签:容器,CMD,命令,ENTRYPOINT,docker,Dockerfile
From: https://www.cnblogs.com/tangjicheng/p/17437510.html

相关文章

  • dockerfile里的EXPOSE
    在Dockerfile中,`EXPOSE`指令用于声明容器运行时将要监听的网络端口。`EXPOSE`并不会实际打开容器的端口,它只是向用户和开发人员提供了容器内部服务的网络接口信息。通过在Dockerfile中使用`EXPOSE`,你可以向其他人传达容器暴露的网络服务和端口,以便更好地理解容器的使用和......
  • kubeadm极速部署Kubernetes,教你如何轻松处理容器运行瓶颈(Docker丨容器化技术丨DevOps
    kubeadm极速部署Kubernetes1.25版本集群前言随着Kubernetes的普及,快速部署和管理Kubernetes集群已成为容器领域的关键技能之一。本文将介绍使用kubeadm工具部署Kubernetes集群的方法,为您提供一个简单且高效的解决方案。不再需要自行构建集群,通过使用本文的方法,您将能够在最短的时......
  • Docker 安装
     安装软件软源和基础软件#安装要求的软件包yuminstallyum-utilsdevice-mapper-persistent-datalvm2-y#添加基础yum源和Dockerrepository。yum-config-manager--add-repohttp://mirrors.163.com/.help/CentOS7-Base-163.repoyum-config-manager--add-repohttp:/......
  • K8S单Master集群安装(Docker)
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]文章基于CentOS7.8系统使用docker作为容器运行时通过kubeadm指导搭建k8s单机master集群,使用calico作为k8s集群的网络插件。需要服务器可以联网。环境节点说明主机名IP地址操作......
  • 410随身wifi刷debian,挂docker
    简介:随身wifi是个好玩的小东西,内置wifi,4gmodem,还有ttl,可以刷debian,openwrt。难能可贵的是便宜,9.9包邮。加之最近看电影已经改了阿里云转存,alist转webdav,电视或盒子kodi看共享,便下单几个,刷好送朋友玩。记录一下刷机过程一:备份备份不可少,虽然便宜,刷坏也不好救。推荐mikoser......
  • Docker网络配置
    1、Docker网络概念1.1、网络驱动Docker网络子系统使用可插拔的驱动,默认情况下有多个驱动程序,并提供核心联网功能。bridge:桥接网络,这是默认的网络驱动程序(不指定驱动程序创建的容器默认是bridge驱动)。host:主机网络。消除容器和主机的网络隔离,直接使用主机的网络。overlay:覆盖网络。......
  • 网安--Docker
    二、容器技术Docker1、开箱即用2、快速部署3、可移植性强4、环境隔离docker可以理解为假的操作系统,可以不安装操作系统使用,虚拟机必须按照操作系统,速度更快,占用内存更小一般为mb,进程间隔离性差,安全性差。docker可以打包好一个环境,如(一键安装php+mysql+apache)......
  • Centos7配置普通用户不加sudo直接运行docker命令
    平时普通用户执行docker命令都要在docker命令前加上sudo就挺麻烦的,咱们把普通用户执行docker要加的sudo去掉.设置用户组sudogroupadddocker如果出现groupadd:cannotopen/etc/group,则使用以下两行命令解锁,如果没有则不需要运行,直接跳过即可sudochattr-i/etc/shad......
  • docker中数据卷和数据卷容器有什么区别
    在Docker中,数据卷(datavolumes)和数据卷容器(datavolumecontainers)是用于在容器之间共享和持久化数据的两种不同的机制。数据卷是一个特殊的目录,可以绕过容器文件系统的常规层,直接在主机的文件系统上进行管理。数据卷可以在容器之间共享,并且可以持久存在,即使容器被删除,数据卷仍然......
  • 云原生(docker jenkins k8s)
    docker(1)架构●Docker_Host:○安装Docker的主机●DockerDaemon:○运行在Docker主机上的Docker后台进程●Client:○操作Docker主机的客户端(命令行、UI等)●Registry:○镜像仓库○DockerHub●Images:○镜像,带环境打包好的程序,可以直接启动运行●Containers:○......