web-dev-qa-db-fra.com

Différence entre RUN et CMD dans un fichier docker

Je ne comprends pas trop quand dois-je 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.

203
TakeSoUp

RUN est une étape de création d'image, l'état du conteneur après une commande RUN sera appliqué à l'image du menu fixe. Un fichier Dockerfile peut comporter de nombreuses étapes RUN superposées pour créer l'image.

CMD est la commande que le conteneur exécute par défaut lorsque vous lancez l'image construite. Un fichier Docker ne peut avoir qu'un seul CMD. La CMD peut être remplacée lors du démarrage d'un conteneur avec docker run $image $other_command.

ENTRYPOINT est également étroitement lié à CMD et peut modifier la façon dont un conteneur commence une image.

312
Matt

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.

71
Nisal Edu

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

RUN - L'instruction RUN vous permet d'installer votre application et les packages nécessaires. Il exécute toutes les commandes situées au-dessus de l'image en cours et crée un nouveau calque en validant les résultats. Vous trouverez souvent plusieurs instructions RUN dans un fichier Docker.

CMD - L'instruction CMD vous permet de définir une commande par défaut, qui ne sera exécutée que si vous exécutez un conteneur sans spécifier de commande. Si le conteneur Docker s'exécute avec une commande, la commande par défaut sera ignorée. Si Dockerfile a plusieurs instructions CMD, toutes sauf la dernière.
Les instructions CMD sont ignorées.

53
fay

RUN - Installez Python, votre conteneur a maintenant python gravé dans son image.
CMD - python _ bonjour.py, lancez votre script préféré

6
Rohit Salecha

Commande RUN: la commande RUN exécutera la commande par défaut lors de la création de l'image. Il va également valider les modifications d'image pour l'étape suivante.

Il peut y avoir plus d’une commande RUN pour faciliter la création d’une nouvelle image.

Commande CMD: les commandes CMD ne font que définir la commande par défaut pour le nouveau conteneur. Cela ne sera pas exécuté au moment de la construction.

Si un fichier de menu fixe contient plus d'une commande CMD, elles sont toutes ignorées, à l'exception de la dernière. En tant que cette commande n'exécutera rien mais définissez simplement la commande par défaut.

5
Bharat Raj

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 d'une référence de fichier docker

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

5
Elsayed