Docker est un outil populaire pour construire et exécuter des applications conteneurisées. Il est disponible pour de nombreuses plateformes et est utilisé comme l’une des technologies de conteneurs dorsales dans Kubernetes.

Dans Docker, vous pouvez soit créer vos propres images pour exécuter votre application en tant que conteneur, soit extraire et utiliser des milliers d’images publiques du référentiel Docker et les utiliser dans votre projet. Une fois que votre image est prête, vous pouvez lancer vos conteneurs en utilisant ces images. Un conteneur est une instance en cours d’exécution d’une image Docker.

La gestion des conteneurs Docker est l’un des aspects les plus importants à surveiller en tant qu’administrateur système qui gère les hôtes/conteneurs Docker.

Dans cet article, nous nous concentrerons sur la gestion des conteneurs à l’aide de la commande docker.

commande run

la commandedocker run est utilisée pour lancer un conteneur à partir d’une image en spécifiant l’ID de l'image ou le nom du référentiel et/ou du tag.

$ docker run {image}

Exemple :

$ docker run nginx

La commande ci-dessus exécute une instance de l’ application<span class="NormalTextRun SpellingErrorV2 SCXW251451022 BCX0">nginx</span> sur un hôte docker, si elle existe déjà. Si elle n’existe pas sur l’hôte Docker, elle va sur le hub Docker (par défaut) et tire l’image vers le bas. Mais cela n’est fait que la première fois. Pour les fois suivantes, la même image est réutilisée.

Si vous voulez exécuter une version particulière d’une image, spécifiez sa version séparée par deux points. C’est ce qu’on appelle le Tag. Si vous ne spécifiez aucune balise, Docker la considérera par défaut comme la plus récente.

De plus, si vous souhaitez exécuter le conteneur en arrière-plan dans un mode détaché afin de revenir à l’invite après le lancement du conteneur par Docker, utilisez le drapeau -d.

Exemple : $ docker run nginx

$ docker run nginx
Impossible de trouver l'image 'nginx:latest' localement
latest : Extrait de la bibliothèque/nginx
33847f680f63 : Extraction terminée
dbb907d5159d : Extraction terminée
8a268f30c42a : Pull complet
b10cf527a02d : Pull complet
c90b090c213b : Pull complet
1f41b2f2bf94 : Extraction terminée
Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
Statut : Téléchargement d'une image plus récente pour nginx:latest
/docker-entrypoint.sh : /docker-entrypoint.d/ n'est pas vide, va tenter d'effectuer la configuration
/docker-entrypoint.sh : Recherche de scripts shell dans /docker-entrypoint.d/
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh : info : Obtention de la somme de contrôle de /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh : info : Activation de l'écoute sur IPv6 dans /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh : Configuration terminée ; prêt pour le démarrage
2021/08/15 12:13:23 [notice] 1#1 : utilisation de la méthode d'événement "epoll"
2021/08/15 12:13:23 [notice] 1#1 : nginx/1.21.1
2021/08/15 12:13:23 [notice] 1#1 : construit par gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:13:23 [notice] 1#1 : OS : Linux 5.8.0-1039-azure
2021/08/15 12:13:23 [notice] 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
2021/08/15 12:13:23 [notice] 1#1 : start worker processes
2021/08/15 12:13:23 [notice] 1#1 : démarrage du processus de travail 33
2021/08/15 12:13:23 [notice] 1#1 : démarrage du processus de travail 34

commande ps

la commandedocker ps liste tous les conteneurs en cours d’exécution et quelques informations de base à leur sujet. Comme l’ID du conteneur, le nom de l’image, l’heure de création du conteneur, l’état actuel et le nom du conteneur. Chaque conteneur reçoit un nom aléatoire (s’il n’est pas spécifié explicitement) et un ID.

Exemple : $ docker ps

$ docker ps 
ID DU CONTENEUR IMAGE COMMANDE CRÉÉ ÉTAT PORTS NOMS 
133f5e0267a5 nginx "/docker-entrypoint...." il y a 10 secondes Up 10 seconds 80/tcp jolly_elion 

Pour lister tous les conteneurs en cours d’exécution et ceux qui ne sont pas en cours d’exécution/qui sont sortis, vous pouvez utiliser :

$ docker ps -a

Exemple : $ docker ps -a

$ docker ps -a 
ID DU CONTENEUR IMAGE COMMANDE CRÉÉ STATUT PORTS NOMS 
fcec129f0eb4 nginx "/docker-entrypoint...." il y a 46 heures Exited (0) il y a 46 heures interesting_ishizaka 
6e8b1e441aa6 hello-world "/hello" il y a 2 jours Exit (0) il y a 2 jours keen_shirley 

commande ls

Comme la commande ps, ls peut également être utilisée pour lister les conteneurs. – un drapeau peut être utilisé pour lister tous les conteneurs (pas seulement ceux en cours d’exécution).

$ docker container ls

Exemple :

$ docker container ls
ID DU CONTENEUR IMAGE COMMANDE CRÉÉ STATUT PORTS NOMS
15796e91c30b redis "docker-entrypoint.s..." il y a 2 secondes Up 1 second 6379/tcp flamboyant_neumann
904390b65d45 nginx "/docker-entrypoint...." il y a 14 minutes En cours depuis 14 minutes 80/tcp nginx_new
$

commande stop

la commandedocker stop est utilisée pour arrêter un conteneur en cours d’exécution. Ici, nous devons indiquer le nom ou l’ID du conteneur.

$ docker stop {container-id}

En cas de succès, le nom ou l’ID du conteneur sera renvoyé.

Exemple :

$ docker ps 
ID DU CONTENEUR IMAGE COMMANDE CRÉÉE STATUT PORTS NOMS 
133f5e0267a5 nginx "/docker-entrypoint...." il y a 50 secondes Up 49 seconds 80/tcp jolly_elion 

Ceci retournera l’ID DU CONTENEUR que vous pouvez utiliser pour arrêter le conteneur.

$ docker stop 133f5 
133f5

Pour cet exemple et les suivants, notez que vous n’avez pas besoin de spécifier une valeur complète de CONTAINER ID. Il acceptera jusqu’à la partie, ce qui le rend unique parmi les autres conteneurs en cours d’exécution, car Docker sait quel conteneur arrêter.

commande rm

la commandedocker rm supprime un conteneur arrêté ou quitté.

$ docker rm {NOM DU CONTENEUR ou ID}

Exemple :

$ docker rm 133f5
133f5
$

commande exec

Nous pouvons utiliser la commande exec pour aller à l’intérieur d’un conteneur en cours d’exécution. C’est utile pour déboguer les conteneurs en cours d’exécution ou pour faire des choses à l’intérieur d’un conteneur.

$ docker exec -it {conteneur} {commande}

Exemple :

Supposons que vous souhaitiez lancer un shell bash (en supposant que l’image dispose de Bash, vous pouvez également utiliser d’autres shells disponibles) à l’intérieur d’un conteneur nommé unruffled_meninsky en mode interactif, utilisez :

$ docker exec -it unruffled_meninsky /bin/bash

Ceci devrait vous amener à l’intérieur du conteneur sur un shell bash. Ici, le drapeau -i correspond au mode interactif et -t au terminal. Si vous souhaitez simplement exécuter une ou plusieurs commandes et sortir du conteneur, vous pouvez utiliser :

$ docker exec unruffled_meninsky cat /etc/hosts
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.2 cd2eed4acf34 

commande logs

Dans le cas où un conteneur est lancé en mode détaché, et que nous voulons voir ses logs, nous pouvons utiliser la commande logs pour consulter ses logs :

$ docker logs {NOM OU ID DU CONTENEUR}

Exemple :

$ docker logs 7da6dcebaf9c
/docker-entrypoint.sh : /docker-entrypoint.d/ n'est pas vide, tentera d'effectuer la configuration
/docker-entrypoint.sh : Recherche de scripts shell dans /docker-entrypoint.d/
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh : info : Obtention de la somme de contrôle de /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh : info : Activation de l'écoute sur IPv6 dans /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh : Lancement de /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh : Configuration terminée ; prêt pour le démarrage
2021/08/15 12:14:09 [notice] 1#1 : utilisation de la méthode d'événement "epoll"
2021/08/15 12:14:09 [notice] 1#1 : nginx/1.21.1
2021/08/15 12:14:09 [notice] 1#1 : construit par gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:14:09 [notice] 1#1 : OS : Linux 5.8.0-1039-azure
2021/08/15 12:14:09 [notice] 1#1 : getrlimit(RLIMIT_NOFILE) : 1048576:1048576
2021/08/15 12:14:09 [notice] 1#1 : Démarrage des processus de travailleur
2021/08/15 12:14:09 [notice] 1#1 : démarrage du processus de travail 31
2021/08/15 12:14:09 [notice] 1#1 : démarrage du processus de travail 32
$

commande cp

Pour copier des fichiers entre un conteneur et le système de fichiers de l’hôte local, vous pouvez utiliser la commande cp.

$ docker container cp {CONTAINER NAME or ID:SRC_PATH} {DEST_PATH}|-

Exemple :

$ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp

commande export

La commande Docker container offre une option pour exporter le système de fichiers d’un container sous la forme d’un fichier TAR.

$ docker container export {CONTAINER NAME or ID}

commande inspect

Nous pouvons vérifier des informations détaillées sur un conteneur en utilisant la commande inspect comme suit :

$ docker inspect {NOM DU CONTENEUR ou ID}

OR

$ docker container inspect {NOM DU CONTENEUR ou ID}

commande kill

Un conteneur en cours d’exécution peut être tué en utilisant la commande kill avec un drapeau optionnel --signal ou -s. Plusieurs conteneurs peuvent être spécifiés pour les tuer en une seule fois.

$ docker kill {NOM DU CONTENEUR ou ID} [--signal VAL]

Exemple :

$ docker kill cd9005a0b5d2 -s 9
cd9005a0b5d2
$

commande stats

Pour afficher un flux en direct de l’utilisation des ressources d’un conteneur, vous pouvez utiliser la commande stats:

$ docker container stats {NOM DU CONTENEUR ou ID}

Exemple :

$ docker container stats thirsty_volhard
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
904390b65d45 thirsty_volhard 0.00% 3.406MiB / 7.775GiB 0.04% 1.02kB / 0B 0B / 8.19kB 3

commande top

Comme la commande top de Linux, nous pouvons l’utiliser avec Docker pour obtenir une liste des processus en cours d’exécution.

$ docker container top {NOM DU CONTENEUR ou ID}

Exemple :

$ docker container top thirsty_volhard
UID PID PPID C STIME TTY TIME CMD
root 2603 2582 0 12:34 ?                   00:00:00 nginx : processus maître nginx -g daemon off ;
systemd 2659 2603 0 12:34 ?                   00:00:00 nginx : processus de travailleur
systemd 2660 2603 0 12:34 ?                   00:00:00 nginx : processus de travailleur
$

commande rename

Pour renommer un conteneur existant, utilisez la commande rename.

$ docker container rename {ANCIEN NOM DU CONTENEUR} {NOUVEAU NOM DU CONTENEUR}

Exemple :

$ docker ps
ID DU CONTENEUR IMAGE COMMANDE CRÉÉ STATUT PORTS NOMS
904390b65d45 nginx "/docker-entrypoint...." il y a 7 minutes Up 7 minutes 80/tcp nginx_container
$ docker container rename nginx_container nginx_new
$ docker ps
ID DU CONTENEUR IMAGE COMMANDE CRÉÉ STATUT PORTS NOMS
904390b65d45 nginx "/docker-entrypoint...." Il y a 7 minutes En haut 7 minutes 80/tcp nginx_new
$

commande diff

Nous pouvons inspecter les modifications apportées aux fichiers ou aux répertoires sur le système de fichiers d’un conteneur à l’aide de la commande diff.

$ docker container diff {CONTAINER NAME or ID}

Exemple :

$ docker container diff nginx_new
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run
A /run/nginx.pid
$

Résumé

Pour conclure, Docker offre un ensemble complet de commandes pour gérer les conteneurs de leur création à leur destruction. Nous avons couvert quelques commandes importantes et leur utilisation dans cet article, ce qui devrait vous donner une bonne idée de la gestion des conteneurs Docker.

More on Docker