web-dev-qa-db-fra.com

Différence entre Docker ENTRYPOINT et Kubernetes container spec COMMAND?

Dockerfile a un paramètre pour POINT D'ENTRÉE et lors de l'écriture du fichier YAML de déploiement de Kubernetes, il y a un paramètre dans Container spec pour COMMAND .

Je ne suis pas en mesure de comprendre quelle est la différence et comment chacun est utilisé?

29
tusharfloyd

Kubernetes nous offre plusieurs options sur la façon d'utiliser ces commandes:

Lorsque vous remplacez le Entrypoint et le Cmd par défaut dans le fichier .yaml Kubernetes, ces règles s'appliquent:

  • Si vous ne fournissez pas de commande ou d'arguments pour un conteneur, les valeurs par défaut définies dans l'image Docker sont utilisées.
  • Si vous fournissez une commande mais pas d'arguments pour un conteneur, seule la commande fournie est utilisée. Le EntryPoint par défaut et le Cmd par défaut défini dans l'image Docker sont ignorés.
  • Si vous ne fournissez que des arguments pour un conteneur, le point d'entrée par défaut défini dans l'image Docker est exécuté avec les arguments que vous avez fournis.
  • Si vous fournissez une commande et des arguments, le point d'entrée par défaut et le Cmd par défaut définis dans l'image Docker sont ignorés. Votre commande est exécutée avec vos arguments.

Voici un exemple:

Dockerfile:

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

Fichier 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

La principale différence est la terminologie. Kubernetes pensait que les termes utilisés par Docker pour définir l'interface avec un conteneur étaient maladroits, et ils ont donc utilisé différents termes qui se chevauchaient . Étant donné que la grande majorité des conteneurs orchestrés par Kubernetes sont Docker, la confusion règne.

Plus précisément, les points d'entrée docker sont des commandes kubernetes et les commandes docker sont des arguments kubernetes, comme indiqué ici: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/# notes .

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

La description de @ Berk sur la façon dont Kubernetes utilise ces options d'exécution est correcte, mais elle est également correcte sur la façon dont Docker Run les utilise, tant que vous traduisez les termes. La clé est de comprendre l'interaction entre l'image et les spécifications d'exécution dans l'un ou l'autre système, et de traduire les termes chaque fois que l'on parle de l'autre.

15
billwanjohi