Vous utilisez démarrer vers un conteneur, si vous aviez précédemment arrêté ce conteneur. Vous utilisez exécuter sur une image, si vous avez déjà retiré un conteneur de cette image. C'est l'usage de base je pense.
CodeSlave
Réponses:
351
C'est une question très importante et la réponse est très simple, mais fondamentale:
Exécuter: créez un nouveau conteneur d'une image et exécutez le conteneur. Vous pouvez créer N clones de la même image. La commande est:
docker run IMAGE_IDet nondocker run CONTAINER_ID
Démarrer: lancer un conteneur précédemment arrêté. Par exemple, si vous avez arrêté une base de données avec la commande docker stop CONTAINER_ID, vous pouvez relancer le même conteneur avec la commande docker start CONTAINER_ID, et les données et les paramètres seront les mêmes.
Un volume doit-il être créé pour le conteneur arrêté pour que les données persistent?
Logan Phillips
@LoganPhillips La différence de cycle de vie entre les fichiers écrits dans la couche de système de fichiers union par défaut du conteneur et les fichiers écrits dans les volumes est la suivante: les données de la couche de système de fichiers union du conteneur sont toujours perdues lors de la suppression du conteneur ( docker rm container_id). D'autre part, les données de volumes survivent à la suppression du conteneur, sauf si l' -voption est explicitement fournie sur la ligne de commande. L'emplacement du volume sur le système hôte peut être directement inspecté. Voir cet article
Stéphane
A propos du processus, besoin & à la fin de la runligne de commande? J'en ai besoin en tant que service permanent (24 heures)
Peter Krauss
Alors, quel est le but de "docker créer"? Comment / quand cela serait-il utilisé?
Considérez que vous avez une image de jeu (iso) sur votre ordinateur.
Lorsque vous run(montez votre image en tant que lecteur virtuel), un lecteur virtuel est créé avec tout le contenu du jeu dans le lecteur virtuel et le fichier d'installation du jeu est automatiquement lancé. [Exécution de votre image Docker - création d'un conteneur, puis démarrage.]
Mais lorsque vous stop(semblable à l'arrêt Docker), le lecteur virtuel existe toujours mais arrête tous les processus. [Comme le conteneur existe jusqu'à ce qu'il ne soit pas supprimé]
Et lorsque vous le faites start(similaire à Docker Start), à partir du lecteur virtuel, les fichiers de jeux commencent son exécution. [démarrage du conteneur existant]
Dans cet exemple - L'image du jeu est votre image Docker et le lecteur virtuel est votre conteneur.
Ce n'est pas tout à fait vrai. Selon le doc officiel, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(source: docs.docker.com/engine/reference/commandline/run )
sshh
2
runcrée un conteneur à partir de l'image, puis démarre le processus racine sur ce conteneur. L'exécuter avec un run --rmdrapeau vous éviterait de retirer le conteneur mort inutile par la suite et vous permettrait d'ignorer l'existence de docker startet docker removetout à fait.
run commande fait quelques choses différentes:
docker run --name dname image_name bash -c "whoami"
Crée un conteneur à partir de l'image. À ce stade, le conteneur aurait un identifiant, pourrait avoir un nom s'il est donné, apparaîtra dansdocker ps
Démarre / exécute le processus racine du conteneur. Dans le code ci-dessus, cela s'exécuterait bash -c "whoami". Si l'on s'exécute docker run --name dname image_namesans commande pour exécuter le conteneur, il se mettra immédiatement à l'arrêt.
Une fois le processus racine terminé, le conteneur est arrêté. À ce stade, c'est à peu près inutile. On ne peut plus rien exécuter ou ressusciter le conteneur. Il existe essentiellement 2 façons de sortir de l'état arrêté: supprimer le conteneur ou créer un point de contrôle (c'est-à-dire une image) à partir du conteneur arrêté pour exécuter autre chose. Il faut exécuter docker removeavant de lancer le conteneur sous le même nom.
Comment retirer le conteneur une fois qu'il est arrêté automatiquement?Ajoutez un --rmindicateur à la runcommande:
docker run --rm --name dname image_name bash -c "whoami"
Comment exécuter plusieurs commandes dans un seul conteneur?En empêchant ce processus racine de mourir. Cela peut être fait en exécutant une commande inutile au début avec --detachedflag puis en utilisant "execute" pour exécuter des commandes réelles:
Pourquoi avons-nous besoin docker stopalors? Pour arrêter ce conteneur persistant que nous avons lancé dans l'extrait précédent avec la commande sans fintail -f /dev/null.
execute
?Réponses:
C'est une question très importante et la réponse est très simple, mais fondamentale:
docker run IMAGE_ID
et nondocker run CONTAINER_ID
docker stop CONTAINER_ID
, vous pouvez relancer le même conteneur avec la commandedocker start CONTAINER_ID
, et les données et les paramètres seront les mêmes.la source
docker rm container_id
). D'autre part, les données de volumes survivent à la suppression du conteneur, sauf si l'-v
option est explicitement fournie sur la ligne de commande. L'emplacement du volume sur le système hôte peut être directement inspecté. Voir cet article&
à la fin de larun
ligne de commande? J'en ai besoin en tant que service permanent (24 heures)run
exécute une imagestart
démarre un conteneur .Le
docker run
doc mentionne:Vous n'exécutez pas un conteneur existant, vous l'exécutez avec docker (depuis docker 1.3) .
Vous pouvez redémarrer un conteneur quitté .
la source
-i
àdocker run
un processus interactif? Je veux dire, docker run a besoin d'une image pour exécuter un conteneur.Explication avec un exemple:
Considérez que vous avez une image de jeu (iso) sur votre ordinateur.
Lorsque vous
run
(montez votre image en tant que lecteur virtuel), un lecteur virtuel est créé avec tout le contenu du jeu dans le lecteur virtuel et le fichier d'installation du jeu est automatiquement lancé. [Exécution de votre image Docker - création d'un conteneur, puis démarrage.]Mais lorsque vous
stop
(semblable à l'arrêt Docker), le lecteur virtuel existe toujours mais arrête tous les processus. [Comme le conteneur existe jusqu'à ce qu'il ne soit pas supprimé]Et lorsque vous le faites
start
(similaire à Docker Start), à partir du lecteur virtuel, les fichiers de jeux commencent son exécution. [démarrage du conteneur existant]Dans cet exemple - L'image du jeu est votre image Docker et le lecteur virtuel est votre conteneur.
la source
La réponse de daniele3004 est déjà assez bonne.
Juste une formule rapide et sale pour des gens comme moi qui se mélangent
run
etstart
de temps en temps:docker run [...]
=docker pull [...]
+docker start [...]
la source
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(source: docs.docker.com/engine/reference/commandline/run )run
crée un conteneur à partir de l'image, puis démarre le processus racine sur ce conteneur. L'exécuter avec unrun --rm
drapeau vous éviterait de retirer le conteneur mort inutile par la suite et vous permettrait d'ignorer l'existence dedocker start
etdocker remove
tout à fait.run
commande fait quelques choses différentes:docker ps
bash -c "whoami"
. Si l'on s'exécutedocker run --name dname image_name
sans commande pour exécuter le conteneur, il se mettra immédiatement à l'arrêt.docker remove
avant de lancer le conteneur sous le même nom.Comment retirer le conteneur une fois qu'il est arrêté automatiquement?Ajoutez un
--rm
indicateur à larun
commande:Comment exécuter plusieurs commandes dans un seul conteneur?En empêchant ce processus racine de mourir. Cela peut être fait en exécutant une commande inutile au début avec
--detached
flag puis en utilisant "execute" pour exécuter des commandes réelles:Pourquoi avons-nous besoin
docker stop
alors? Pour arrêter ce conteneur persistant que nous avons lancé dans l'extrait précédent avec la commande sans fintail -f /dev/null
.la source