Donc, si vous débutez avec Docker, vous vous demandez peut-être comment exécuter un conteneur Docker. Laissez-moi vous le montrer rapidement.
Vous pouvez créer et exécuter un conteneur avec la commande suivante :
docker run -it -d --name container_name image_name bash
Et ensuite, si vous souhaitez entrer dans le conteneur (pour exécuter des commandes à l'intérieur du conteneur de manière interactive), vous pouvez utiliser la commande docker exec :
docker exec -it container_ID_or_name /bin/bash
Voici un exemple où je crée un nouveau conteneur avec Ubuntu comme image de base, puis j'entre dans le conteneur Ubuntu en cours d'exécution et exécute la commande ls :
[email protected]:~$ docker run -it -d --name my_container ubuntu bash
7e77640bca686108ad415318278a1fa148e1c84d3b180276e19ec2b970ba9b67
[email protected]:~$ docker exec -it my_container bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
Perdu? Ne vous inquiétez pas. Je vais vous expliquer en détail ce que font les deux commandes ci-dessus et quel est le -it
option dans la commande docker run et exec.
Comment exécuter le conteneur docker

Si vous souhaitez exécuter un conteneur Docker avec une certaine image et une commande spécifiée, vous pouvez le faire de cette manière :
docker run -it -d --name container_name image_name bash
La commande ci-dessus créera un nouveau conteneur avec le nom spécifié à partir de l'image Docker spécifiée. Le nom du conteneur est facultatif.
- L'option -i signifie qu'il sera en mode interactif (vous pouvez y entrer des commandes)
- L'option -t vous donne un terminal (afin que vous puissiez l'utiliser comme si vous utilisiez ssh pour entrer dans le conteneur).
- L'option -d (mode démon) maintient le conteneur en arrière-plan.
- bash est la commande qu'il exécute.
La raison de l'exécution de bash en tant que commande ici est que le conteneur ne s'arrêtera pas immédiatement.
[email protected]:~$ docker run -it -d ubuntu bash
82766613e7bc0ae98887bb1c776fa0de7f3c4771db9ac7ffc5db5c2c68ab497b
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 4 seconds ago Up 3 seconds determined_blackburn
Dans l'exemple ci-dessus, je n'ai pas nommé le conteneur, il a donc été nommé au hasard déterminé_blackburn.
Et comme vous pouvez le voir, le conteneur exécute la commande bash en arrière-plan.
Docker Run vs Start vs Create :Différence expliquée Cet article explique la différence avec des exemples.

Que se passe-t-il si vous ne l'exécutez pas en tant que démon ? (option -d) en arrière-plan ?
Si vous n'utilisez pas l'option -d, docker run créera un nouveau conteneur et vous aurez un terminal en mode interactif exécutant bash shell.
Comme vous pouvez le voir dans l'exemple ci-dessous, le conteneur est créé et je suis automatiquement à l'intérieur du conteneur (bash shell).
Le problème ici est que si vous quittez le conteneur, le conteneur s'arrête.
[email protected]:~$ docker run -it ubuntu bash
[email protected]:/# echo this is a new container
this is a new container
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6098c44f2407 ubuntu "bash" 27 seconds ago Exited (0) 8 seconds ago bold_benz
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
Que se passe-t-il si vous n'utilisez que l'option -i (interactive) ?
Disons que vous n'utilisez que l'option -i. Dans ce cas, vous verrez une invite interactive mais si vous quittez l'invite interactive (en utilisant Ctrl+D ou la commande exit), vous quittez le conteneur et le conteneur s'arrête.
[email protected]:~$ docker run -i ubuntu bash
echo "this is interactive"
this is interactive
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 27 seconds ago Exited (0) 9 seconds ago loving_galileo
Que se passe-t-il si vous n'utilisez que l'option -t (terminal/tty) ?
C'est une situation délicate car dans ce cas, vous aurez un pseudo terminal (si vous utilisez l'option -t) mais vous n'aurez pas le STDIN. En d'autres termes, vous ne pouvez rien saisir, ni exécuter de commande à l'intérieur du conteneur comme vous l'avez fait précédemment :
[email protected]:~$ docker run -t ubuntu bash
[email protected]:/# echo hello
^C^C
[email protected]:/# echo "hi"
^C^C
[email protected]:/# exit
^C^C
[email protected]:/#
J'ai dû arrêter le conteneur d'un autre terminal dans le cas ci-dessus.
Comment quitter un conteneur DockerCette petite astuce rapide sur Docker montre comment quitter un conteneur Docker.

Comment exécuter un conteneur existant
La commande docker run crée un nouveau conteneur à partir de l'image spécifiée. Mais que se passe-t-il lorsque vous avez déjà un conteneur ?
Si vous souhaitez exécuter un conteneur existant, vous devez d'abord démarrer le conteneur, puis vous pouvez utiliser l'option exec comme ceci :
docker start existing_container_ID_or_name
docker exec -it existing_container_ID_or_name /bin/bash
Cet exemple sera meilleur pour votre compréhension :
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 7 minutes ago Exited (0) 7 minutes ago loving_galileo
[email protected]:~$ docker start b6b79a9f7789
b6b79a9f7789
[email protected]:~$ docker exec -it b6b79a9f7789 bash
[email protected]:/# echo "inside existing container"
inside existing container
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 8 minutes ago Up 43 seconds loving_galileo
Pourquoi utiliser bash tout le temps ?
Dans tous les exemples ci-dessus, j'ai utilisé bash ou /bin/bash comme commande qui s'exécute avec le conteneur. Je l'ai utilisé car il donne un shell et lorsque vous exécutez le conteneur, grâce au shell, vous pouvez exécuter des commandes régulières à l'intérieur du conteneur comme si vous étiez à l'intérieur d'un système Linux normal.
Vous pouvez demander au conteneur d'exécuter n'importe quelle commande, mais gardez à l'esprit que le conteneur existe dès que la commande est terminée.
Comme vous pouvez le voir dans l'exemple ci-dessous, il n'y a pas de session de terminal interactif cette fois. Vous n'êtes plus "à l'intérieur" du conteneur car la commande echo se termine presque immédiatement.
[email protected]:~$ docker exec -it b6b79a9f7789 echo hello
hello
[email protected]:~$
En fait, vous pouvez également exécuter d'autres commandes et entrer ensuite dans le conteneur.
Dans l'exemple ci-dessous, j'ai créé un nouveau conteneur qui exécute le serveur nginx sur le port 80. Depuis que je l'exécute en tant que démon avec l'option -d, le conteneur nginx continue de fonctionner.
Et puis j'utilise la commande docker exec pour obtenir un shell bash interactif et ainsi entrer dans le conteneur nginx (qui est essentiellement un Linux préconfiguré avec nginx).
[email protected]:~$ docker container run -it -d -p 8000:80 nginx
262ca5b17bf8aac5afbfdf66af6383be164cd8488f8cd64c06ee466b4d7462e9
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
262ca5b17bf8 nginx "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds 0.0.0.0:8000->80/tcp zen_kilby
b6b79a9f7789 ubuntu "bash" 20 minutes ago Up 12 minutes loving_galileo
[email protected]:~$ docker exec -it 262ca5b17bf8 bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
J'espère que vous comprenez mieux comment exécuter des conteneurs Docker et pourquoi il utilise certaines options.
Si vous avez des questions ou des suggestions, faites-le moi savoir dans la section des commentaires.