GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment exécuter des conteneurs Docker

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. Manuel LinuxAbhishek Prakash

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. Manuel LinuxAbhishek Prakash

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.


Docker
  1. Comment exécuter un programme dans un conteneur Docker ?

  2. Comment exécuter MySQL dans un conteneur Docker

  3. Comment exécuter une commande sur un conteneur Docker en cours d'exécution

  4. Comment sauvegarder et restaurer des conteneurs Docker

  5. Comment mettre en pause et reprendre les conteneurs Docker

Comment exécuter Grafana dans un conteneur Docker

Comment se connecter en SSH aux conteneurs Docker [étape par étape]

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Comment nommer ou renommer les conteneurs Docker

Comment gérer les conteneurs Docker