Dockerfile 中 ENTRYPOINT 和 CMD 有什么区别 ?

Docker 彻底改变了容器化的世界,开发人员更容易管理和部署应用程序。Dockerfiles 是构建和理解容器镜像的关键组件,理解 Dockerfiles 中指令的区别是很有必要的。
在在本文中,我们将探讨 Dockerfile 中的 ENTRYPOINT 和 CMD 指令的用法,以及它们是如何交互的。
1. ENTRYPOINT 介绍
ENTRYPOINT 指令用于指定容器启动时默认可执行文件或命令。
基本语法:
ENTRYPOINT ["executable", "param1", "param2"]
或者
ENTRYPOINT command param1 param2
2. CMD 介绍
CMD 指令用于为 ENTRYPOINT 指令 提供默认参数或定义一个默认命令,如果没有指定 ENTRYPOINT 指令,该命令将被执行。不像 ENTRYPOINT,CMD 没有定义容器的主要用途,相反,它提供了一个可以轻松覆盖的默认行为。
基本语法:
CMD ["executable", "param1", "param2"]
或者
CMD command param1 param2
3. ENTRYPOINT 和 CMD 区别
Purpose
ENTRYPOINT 用于定义容器的主要目的,而 CMD 提供了可以覆盖的默认行为。
Overriding
当运行一个容器时,可以通过提供额外的命令行参数轻松覆盖 CMD 指令,而 ENTRYPOINT 指令不能被重写,除非使用 -entrypoint 选项显式指定。
Interaction
如果 Dockerfile 同时指定 ENTRYPOINT 和 CMD 指令,CMD 为 ENTRYPOINT 指令参数提供默认值。
4. 结合 ENTRYPOINT 和 CMD
通过在 Dockerfile 中同时使用 ENTRYPOINT 和 CMD,您可以灵活的创建容器镜像,同时具有明确的定义和可定制的行为。ENTRYPOINT 指令指定要执行的默认命令, CMD 指令提供该命令的默认参数。
FROM ubuntu:latest
ENTRYPOINT ["/bin/ping"]
CMD ["localhost"]
在本例中,ENTRYPOINT 指令指定容器应该执行 ping 命令,CMD 指令提供默认参数“ localhost ”。如果运行容器时没有附加参数,它将执行 ping localhost 命令。
我的开源项目
评论已关闭
