在Docker中,docker run cmd entrypoint 有什么区别?

简介: 在Docker中,docker run cmd entrypoint 有什么区别?

在Docker中,docker runCMDENTRYPOINT 是相互关联又各有不同的概念,它们都涉及到如何配置和启动容器。下面详细介绍它们的区别和联系:

  1. docker run
  • docker run 是 Docker 客户端命令,用于创建一个新的容器并运行其中的应用程序。当你执行 docker run 时,你可以指定一系列参数,如镜像名称、命令、环境变量、端口映射、卷挂载等。它接受的命令行参数可以用来覆盖或者附加到镜像构建阶段定义的 CMDENTRYPOINT 指令。
  1. CMD
  • 在 Dockerfile 中,CMD指令用于定义容器启动时默认执行的命令及其参数。它可以有三种格式:
  • CMD ["executable", "param1", "param2"]:JSON数组格式,推荐使用,exec形式执行程序,不会经过shell解析。
  • CMD ["param1", "param2"]:如果指定了 ENTRYPOINT,那么 CMD 中的参数将作为 ENTRYPOINT 的参数传递。
  • CMD command param1 param2:shell格式,会通过shell执行命令。
  • 如果用户在 docker run 命令后面指定了命令,则 CMD 中定义的默认命令会被新指定的命令替换。若没有指定命令,则执行 CMD 中指定的命令。
  1. ENTRYPOINT
  • ENTRYPOINT 也是在 Dockerfile 中定义的,它用于指定容器启动时始终执行的命令,这个命令不那么容易被 docker run 的命令行参数覆盖,除非以组合的形式追加参数。
  • ENTRYPOINT也有两种格式,与CMD相似:
  • ENTRYPOINT ["executable", "param1"]:exec形式,优先级高于 CMD,并且无论是否提供 docker run 后的命令,都会执行此命令,并将 docker run 后的参数追加到 ENTRYPOINT 后。
  • ENTRYPOINT command param1:shell格式。
  • 使用 ENTRYPOINT 可以确保每次容器启动时都执行同一命令,这有助于将容器设计得更加“应用导向”,使得容器的行为更一致。当同时设置了 CMDENTRYPOINT 时,CMD 的内容会被视为 ENTRYPOINT 的参数。

总结起来:

  • CMD 是容器启动时如果没有指定命令时的默认行为,它的灵活性较高,易于被 docker run 后的命令覆盖。
  • ENTRYPOINT 更像是容器的核心功能定义,常用于定义容器的主应用程序,并且能接收 docker run 的参数,这样可以确保容器启动时总是执行预期的程序,并且可以处理任何额外的参数。

综上所述,两者可以配合使用,共同决定容器启动时的具体行为,从而更好地控制容器的应用场景和定制程度。

相关文章
|
19天前
|
搜索推荐 应用服务中间件 nginx
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
|
19天前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
|
1月前
|
Docker 容器
docker run
【9月更文挑战第08天】
33 1
|
1月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
111 0
|
2月前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
201 5
|
2月前
|
Ubuntu 开发者 Docker
在Docker中,stage和step有什么区别?
在Docker中,stage和step有什么区别?
|
2月前
|
Kubernetes 网络协议 Docker
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
|
2月前
|
Linux KVM 虚拟化
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
|
Linux 开发工具 Docker
【docker】CMD和ENTRYPOINT的区别
【docker】CMD和ENTRYPOINT的区别
|
Linux Docker 容器
Docker从入门到精通——CMD与ENTRYPOINT区别
Docker从入门到精通——CMD与ENTRYPOINT区别
232 0