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

Dockerfile 有一个用于 入口的参数,在编写 Kubernetes 部署 YAML 文件时,Container spec 中有一个用于 命令的参数。

我不能弄清楚它们之间的区别,以及它们是如何使用的?

87575 次浏览

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

在 Kubernetes. yaml 文件中覆盖默认的 Entrypoint 和 Cmd 时,以下规则适用:

  • 如果不为 Container 提供命令或参数,则默认值为 使用 Docker 映像中定义的。
  • 如果只为 Container 提供参数,则默认的 Entrypoint 在 Docker 映像中定义的参数是使用您提供的参数运行的。
  • 如果为容器提供命令,则只有 默认的 EntryPoint 和默认的 Cmd 将忽略在 Docker 映像中定义的 使用提供的参数运行(如果没有提供参数,则不运行)。

这里有一个例子:

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/

关键的区别在于术语,库伯内特认为 Docker 用来定义接口的术语 一个容器是笨拙的,所以他们使用不同的,overlapping术语。由于库伯内特精心安排的绝大多数集装箱都是 Docker 集装箱,因此混淆比比皆是。

Specifically, docker entrypoints are kubernetes commands, and docker commands are kubernetes args, as indicated 给你.

-------------------------------------------------------------------------------------
| 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 如何使用这些选项也是正确的,只要你翻译这些术语。关键是要理解图像和运行规范在任何一个系统中的相互作用,并在谈到另一个系统时转换术语。

YAML 文件中的 命令覆盖 docker 文件中的 入口中提到的任何内容。

基本上,COMMAND 可以覆盖 docker ENTRYPOINT 中提到的内容

举个简单的例子:

要覆盖 dockerfile ENTRYPOINT,只需将这些字段添加到 K8s 模板(查看 指挥官Args) :

apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["/bin/sh"]
args: ["-c", "printenv; #OR WHATEVER COMMAND YOU WANT"]
restartPolicy: OnFailure

K8s 文件:

命令字段对应于某些容器运行时中的入口点。 请参阅下面的 笔记

您可以输入 Notes 链接(K8s 文档,以便更好地理解这个命令如何覆盖 K8s ENTRYPOINT)