web-dev-qa-db-ja.com

Docker ENTRYPOINTとKubernetesコンテナー仕様の違いCOMMAND?

Dockerfileには[〜#〜] entrypoint [〜#〜]のパラメーターがあり、KubernetesデプロイメントYAMLファイルの作成中に、コンテナー仕様に[〜#〜] command [ 〜#〜]

私は違いが何であり、それぞれがどのように使用されるのかを理解できませんか?

29
tusharfloyd

Kubernetesは、これらのコマンドの使用方法に関する複数のオプションを提供します。

Kubernetes .yamlファイルのデフォルトのエントリポイントとCmdをオーバーライドする場合、次のルールが適用されます。

  • コンテナにコマンドまたは引数を指定しない場合、Dockerイメージで定義されたデフォルトが使用されます。
  • コンテナに引数を指定せずにコマンドを指定すると、指定されたコマンドのみが使用されます。 Dockerイメージで定義されているデフォルトのEntryPointとデフォルトのCmdは無視されます。
  • コンテナに引数のみを指定した場合、Dockerイメージで定義されたデフォルトのエントリポイントは、指定した引数で実行されます。
  • コマンドと引数を指定すると、Dockerイメージで定義されているデフォルトのエントリポイントとデフォルトのCmdは無視されます。コマンドは引数で実行されます。

例を次に示します:

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/

40
Berk Soysal

主な違いは用語です。 Kubernetesは、コンテナへのインターフェイスを定義するためにDockerが使用した用語は扱いにくいと考えたため、異なるoverlapping用語を使用しました。 Kubernetesオーケストラのコンテナーの大部分はDockerであるため、混乱が多くあります。

具体的には、ここに示すように、Dockerエントリポイントはkubernetesコマンドであり、dockerコマンドはkubernetes argsです: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#注

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

Kubernetesがこれらのランタイムオプションを使用する方法についての@Berkの説明は正しいですが、用語を翻訳する限り、docker runがそれらを使用する方法についても正しいです。重要なのは、どちらのシステムでもイメージと実行仕様の間の相互作用を理解し、他のシステムと言えば用語を翻訳することです。

15
billwanjohi