乐闻世界logo
搜索文章和话题

Dockerfile 中的 CMD 和 ENTRYPOINT 指令有什么区别?

3 个月前提问
3 个月前修改
浏览次数20

1个答案

1

CMD 指令与 ENTRYPOINT 指令的比较

CMD (Command) 指令

  • 定义:CMD 指令用于为容器提供默认的执行命令。这个命令会在容器启动时运行,但如果在启动容器时指定了其它命令,CMD 中的命令会被覆盖。
  • 用例:如果你有一个应用程序,通常情况下总是用相同的命令运行,那么可以使用 CMD。例如,一个常见的用法是启动一个 Web 服务器。
  • 例子
    Dockerfile
    FROM ubuntu CMD ["echo", "Hello world"]

ENTRYPOINT 指令

  • 定义:ENTRYPOINT 指令也用于为容器提供默认的执行命令,但它的设计是为了让容器像一个可执行程序一样运行。与 CMD 不同的是,ENTRYPOINT 在运行时不易被覆盖,除非明确使用 docker run --entrypoint
  • 用例:如果你的容器设计为运行一个特定的程序,并且你不希望结束用户轻易更改这个程序,那么就应该使用 ENTRYPOINT。例如,如果你的容器被设计为一个特定的服务或应用程序,如数据库服务或应用服务器。
  • 例子
    Dockerfile
    FROM ubuntu ENTRYPOINT ["top", "-b"]

组合使用 CMD 和 ENTRYPOINT

  • 目的:可以将 ENTRYPOINT 理解为容器的执行程序,而 CMD 提供所需的默认参数。如果不提供任何命令行参数,就会使用 CMD 的参数。
  • 例子
    Dockerfile
    FROM ubuntu ENTRYPOINT ["sleep"] CMD ["5"]
    这里,如果用户没有提供任何参数运行容器(如 docker run myimage),则默认运行 sleep 5。如果用户提供了参数(如 docker run myimage 10),则 10 会覆盖 CMD 指定的 5,运行 sleep 10

通过这种方法,可以灵活地控制容器的行为,同时也在保证容器能够按预定目的运行的情况下为用户提供了一定的自定义选项。

2024年8月9日 13:47 回复

你的答案