Docker exécuter vs créer

92

Quelle est la différence entre les commandes docker runet docker create?

J'utilise habituellement runmais parfois dans la documentation que je vois create.

Docker --helpraconte

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

Cela signifie-t-il qu'il runest utilisé lorsque nous devons passer une commande à un nouveau conteneur? Quel est le but createalors?

Fred Mériot
la source

Réponses:

104

À partir de la documentation de docker

La commande docker create crée une couche de conteneur inscriptible sur l'image spécifiée et la prépare à exécuter la commande spécifiée. L'ID du conteneur est ensuite imprimé sur STDOUT. Ceci est 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.

Ceci est utile lorsque vous souhaitez mettre en place un conteneur configuration avant de temps pour qu'il soit prêt à démarrer lorsque vous en avez besoin. Le statut initial du nouveau conteneur est créé.

DAXaholic
la source
2
Soulignant la similitude, --run accepte TOUS les mêmes arguments que --create (avec l'ajout de seulement --detach, --detach-keys et --sig-proxy), voir docs.docker.com/v17.09 / engine / reference / commandline / run /…
Marvin
113

Techniquement, docker run= docker create+ docker start.

sriram926
la source
40
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
webbower
19

docker createcommande crée un conteneur inscriptible de l'image et la prépare pour la course .

docker runLa commande crée le conteneur (identique à docker create) et le démarre .

RéseauMeister
la source
1
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 vous dites "l'exécute" si nous regardons votre définition de run in docker run, cela signifie créer et exécuter, donc vous vous retrouverez avec un nombre infini .. donc probablement vous voulez dire quelque chose de moins que cela quand vous dites "l'exécute" .. mais alors vous devez distinguer "l'exécute" de l'exécutif et du démarrage, voulez-vous dire démarrer et exécuter ou simplement démarrer). Peut-être que -d signifie ne démarrer aucun exécutable. et sans -d est start et exec
barlop
8

Les autres réponses ont cela couvert, mais j'ai pensé montrer les lignes de commande shell équivalentes car cela le rend vraiment clair:

$ docker run myimage

est le même que

$ docker start -a $(docker create myimage)

Ici, docker createest utilisé pour créer un conteneur à partir de l'image nommée et génère l' ID de conteneur créé et docker startest utilisé pour démarrer le conteneur avec cet ID. L' -aoption entraîne l'attachement du terminal afin que le conteneur s'exécute au premier plan, ce qui est le comportement par défaut de docker run.

Un conteneur qui a été créé mais jamais démarré aura un Createdstatut; cela peut être vu avec docker container ls -a.

starfry
la source
6

Je suis nouveau dans docker et je viens juste de jouer avec;

Mon point de vue est que docker run fait essentiellement ce qui suit: (dans l'ordre de ..) docker create , docker start , docker attach , car il s'attache immédiatement au shell actif après avoir exécuté la commande 'run' .

Aaronlhe
la source
1
Je viens de publier un commentaire à ce sujet avant de remarquer votre réponse. J'aurais aimé l'avoir vu il y a environ une heure.
webbower
-3

L'exécution de Docker sert essentiellement à exécuter des commandes dans le conteneur.

docker run -it <Container Name> /bin/bash

Ce qui précède est pour créer un terminal bash. Et faites-nous utiliser les commandes bash dans le conteneur.

Docker create consiste à créer un conteneur à partir d'une image Docker.

docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu

Ce qui précède est de créer un docker un conteneur du nom "docker-ubuntu" à partir de l'image "ubuntu"

Venkat Sudharsanam
la source
1
Vous pouvez vous docker run -it <Container name>passer ensuite de / bin / bash. Par exemple, le ruby ​​exécutera automatiquement un exécutable appelé irb. De plus, vous pouvez exécuter -d, c'est fait avec dockersamples / static-site qui ne se connecte pas. Donc je pense que ça ne fait pas d'exec mais ça commence juste.
barlop
avec 'docker run', vous pouvez exécuter si le conteneur est déjà créé et créer puis exécuter sinon
Sergii Getman