136 votes

Docker run vs create

Quelle est la différence entre docker run y docker create des commandes ?

J'utilise habituellement run mais parfois, dans la documentation, je vois create .

L'initiative de Docker --help dit à

create    Create a new container
run       Run a command in a new container

Cela signifie-t-il que run est utilisé lorsque nous devons passer une commande à un nouveau conteneur ? Quel est l'objectif de create alors ?

186voto

sriram926 Points 481

docker run = docker create + docker start .

69 votes

En fait, et je viens de passer quelques heures à apprendre ça, docker run = docker create + docker start + docker attach . Sans attach le conteneur démarré fonctionne en arrière-plan

121voto

DAXaholic Points 1446

De docker documentation

La commande docker create crée une couche de conteneur inscriptible sur l'image spécifiée et la prépare à l'exécution de la commande spécifiée. image spécifiée et la prépare à l'exécution de la commande spécifiée. L'ID du conteneur ID du conteneur est ensuite imprimé sur STDOUT. Il s'agit de similaire à docker run -d sauf que le conteneur n'est jamais démarré . Vous pouvez ensuite utiliser la commande docker start pour démarrer le conteneur à tout moment.

C'est utile lorsque vous voulez mettre en place un conteneur configuration en avant du temps pour qu'il soit prêt à démarrer quand vous en avez besoin. L'état initial du nouveau conteneur est créé.

3 votes

Pour souligner la similitude, --run accepte TOUS les mêmes arguments que --create (avec l'ajout de --detach, --detach-keys, et --sig-proxy), cf. docs.docker.com/v17.09/engine/reference/commandline/run/

19voto

1 votes

U a écrit "docker run crée le conteneur (identique à docker create) et l'exécute". <--- définition circulaire ,et vous n'avez pas établi la différence entre exec et start,et ce que vous appelez "l'exécute". (Et quand u dit "l'exécute" si nous regardons votre définition de run dans docker run, cela signifie créer et exécuter, donc vous vous retrouveriez avec un nombre infini donc vraisemblablement vous voulez dire quelque chose de moins que cela quand vous dites "l'exécute" mais alors vous devriez distinguer "l'exécute" de exec et start, voulez-vous dire start et exec ou juste start). Peut-être que -d signifie start sans exec. et que sans -d c'est start et exec.

11voto

starfry Points 639

Les autres réponses couvrent ce point, mais j'ai pensé que je pourrais montrer les lignes de commande équivalentes du shell, car cela rend les choses vraiment claires :

$ docker run myimage

est la même chose que

$ docker start -a $(docker create myimage)

Ici, docker create est utilisé pour créer un conteneur à partir de l'image nommée et produit le conteneur créé. identifiant du conteneur y docker start est utilisé pour démarrer le conteneur avec cet id. Le site -a permet d'attacher le terminal de sorte que le conteneur s'exécute au premier plan, ce qui est le comportement par défaut de l'option docker run .

Un conteneur qui a été créé mais qui n'a jamais été démarré aura une Created ce qui peut être vu avec docker container ls -a .

9voto

aaronlhe Points 83

Je suis nouveau dans le domaine de Docker et je viens juste de commencer à jouer avec ;

Je pense que exécution du docker fait essentiellement ce qui suit : (dans l'ordre de..) créer un docker , démarrage du docker , docker attacher puisqu'il s'attache immédiatement à l'interpréteur de commandes actif après que vous ayez exécuté la commande "courir commandement.

1 votes

Je viens de poster un commentaire à ce sujet avant de remarquer votre réponse. J'aurais aimé le voir il y a une heure environ.

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