432 votes

Quelle est la différence entre RUN et CMD dans un fichier de menu fixe et quand dois-je utiliser l’un ou l’autre?

Je ne sais pas quand utiliser CMD vs RUN. Par exemple, pour exécuter des commandes bash / shell (c'est-à-dire ls -la ), j'utilise toujours CMD ou existe-t-il un cas où j'utiliserais RUN? Essayer de comprendre les meilleures pratiques concernant ces deux directives Dockerfile similaires.

623voto

Matt Points 25814

COURIR est une image de l'étape de génération, l'état du conteneur après un RUN commande sera engagée à l'image docker. Un Dockerfile peut avoir de nombreux RUN étapes que la couche au-dessus de l'autre pour construire l'image.

CMD est la commande le conteneur s'exécute par défaut lorsque vous lancez le construit de l'image. Un Dockerfile ne peut avoir qu'un CMD. L' CMD peut être remplacée lors du démarrage d'un récipient avec de l' docker run $image $other_command.

Point d'entrée est également étroitement lié à d' CMD et peuvent modifier la façon dont un conteneur commence une image.

190voto

Nisal Edu Points 2726

RUN - la commande se déclenche pendant que nous construisons l'image de menu fixe.

CMD - la commande se déclenche pendant le lancement de l'image de menu fixe créée.

92voto

fay Points 741

J'ai trouvé cet article très utile de comprendre la différence entre eux:

EXÉCUTEZ- EXÉCUTEZ l'instruction permet d'installer votre application et les paquets requise pour cela. Il exécute toutes les commandes sur le haut de l'image et crée un nouveau calque par commettre les résultats. Souvent, vous trouverez plusieurs EXÉCUTER des instructions dans un Dockerfile.

CMD- CMD instruction permet de définir une valeur par défaut de la commande, qui sera exécuté uniquement lorsque vous exécutez conteneur sans spécification d'une commande. Si Docker conteneur s'exécute avec une commande, la commande par défaut sera ignoré. Si Dockerfile a plus d'un CMD instruction, toutes les mais la dernière
CMD instructions sont ignorées.

12voto

Elsayed Points 594

Remarque: Ne confondez pas RUN avec CMD. RUN exécute une commande et valide le résultat. CMD n'exécute rien au moment de la construction, mais spécifie la commande prévue pour l'image.

à partir de la référence de fichier docker

https://docs.docker.com/engine/reference/builder/#cmd

5voto

Alexander Points 96

EXÉCUTER:

L' RUN instruction, l'exécution de toute commande dans un nouveau calque au-dessus de l'actuel de l'image, et de s'engager sur cette image. L'image ainsi engagé sera utilisé pour la prochaine l'instruction dans le Dockerfile.

L' RUN instruction a deux formes:

  • L' RUN <command>formulaire
  • L' RUN ["executable", "arg1", "arg2"...] formulaire

Dans la première forme, l'exécution de la commande dans un shell, plus précisément l' /bin/sh -c <command> shell. La deuxième forme est utile dans les cas où l'image de base n'ont pas d' /bin/shshell. Docker utilise un cache pour ces images s'appuie. Ainsi, dans le cas où votre image de l'échec de la construction, quelque part dans le milieu de la prochaine exécution de réutilisation précédemment réussite partielle construit et continuer à partir du point où il a échoué.

NOTE

Le cache sera invalidé dans ces situations:

  • Lorsque le panneau de construire de commande est exécuté avec l' --no-cache drapeau.
  • En cas de non-cacheable commande telle que apt-get mise à jour est donnée. Tous EXÉCUTION suivant les instructions sera exécuté à nouveau.
  • Lors de la première rencontrés ADD instruction invalide le cache pour toutes les instructions suivantes dans le Dockerfile si le contenu de l' le contexte a changé. Cela aura également pour effet d'invalider le cache pour l' RUN les instructions.

CMD:

L' CMD instruction fournit la commande par défaut pour un conteneur à exécuter. Il a les formes suivantes:

  • L' CMD ["executable", "arg1", "arg2"...] formulaire
  • L' CMD ["arg1", "arg2"...] formulaire
  • L' CMD command arg1 arg2 ...

-La première forme est comme un exec et c'est la forme préférée, dans lequel la première valeur est le chemin vers l'exécutable et est suivie par les arguments.

-La deuxième forme omet l'exécutable, mais nécessite l' ENTRYPOINT d'instruction pour spécifier le fichier exécutable.

-Si vous utilisez la forme de la coquille de l' CMD enseignement, alors l' <command> commande sera exécutée dans l' /bin/sh -c shell.

NOTE:

Si l'utilisateur fournit une commande dans un menu fixe exécuter, il remplace le CMD commande.

RÉSUMÉ

La différence entre le RUN et CMD instructions est qu'un RUN instruction exécute la commande et s'engage, alors que l' CMD instruction n'est pas exécutée pendant la construction. C'est un défaut de la commande à exécuter lorsque l'utilisateur démarre un conteneur, à moins que l'utilisateur fournit une commande à lancer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X