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.