Docker ENTRYPOINT 和 Kubernetes 容器规范命令之间的区别?

新手上路,请多包涵

Dockerfile 有一个 ENTRYPOINT 参数,在编写 Kubernetes 部署 YAML 文件时,容器规范中有一个 COMMAND 参数。

我无法弄清楚有什么区别以及如何使用它们?

原文由 tusharfloyd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 728
2 个回答

Kubernetes 为我们提供了如何使用这些命令的多种选择:

当您覆盖 Kubernetes .yaml 文件中的默认入口点和 Cmd 时,这些规则适用:

  • 如果您不为容器提供命令或参数,则使用 Docker 映像中定义的默认值。
  • 如果您只为容器提供 args,则 Docker 映像中定义的默认入口点将使用您提供的 args 运行。
  • 如果您为容器提供命令,则仅使用提供的命令。 Docker 镜像中定义的默认 EntryPoint 和默认 Cmd 将被忽略。您的命令使用提供的 args 运行(如果没有提供,则没有 args)。

这是一个例子:

Dockerfile:

 FROM alpine:latest
COPY "executable_file" /
ENTRYPOINT [ "./executable_file" ]

Kubernetes yaml 文件:

  spec:
    containers:
      - name: container_name
        image: image_name
        args: ["arg1", "arg2", "arg3"]

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

原文由 Berk Soysal 发布,翻译遵循 CC BY-SA 4.0 许可协议

主要区别在于术语。 Kubernetes 认为 Docker 用来定义容器接口的术语很尴尬,所以他们使用了不同的、 重叠 的术语。由于 Kubernetes 编排的绝大多数容器都是 Docker,因此混乱比比皆是。

具体来说,docker 入口点是 kubernetes 命令,docker 命令是 kubernetes args,如此 处所示

 -------------------------------------------------------------------------------------
| Description                           | Docker field name | Kubernetes field name |
-------------------------------------------------------------------------------------
| The command run by the container      | Entrypoint        | command               |
| The arguments passed to the command   | Cmd               | args                  |
-------------------------------------------------------------------------------------

@Berk 对 Kubernetes 如何使用这些运行时选项的描述是正确的,但对于 docker run 如何使用它们也是正确的,只要您翻译这些术语。关键是要了解任一系统中映像和运行规范之间的相互作用,并在谈到另一个时翻译术语。

原文由 billkw 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题