Comment vérifier l'état des conteneurs Docker

DockerBeginner
Pratiquer maintenant

Introduction

Docker a révolutionné la façon dont nous développons, déployons et gérons les applications. En tant que plateforme de conteneurisation (containerization) puissante, Docker vous permet d'empaqueter vos applications et leurs dépendances dans des environnements isolés et portables. Savoir comment vérifier l'état de vos conteneurs Docker est crucial pour une gestion et un dépannage efficaces.

Dans ce laboratoire pratique, vous apprendrez les commandes essentielles pour surveiller vos conteneurs Docker, comprendre leur état et gérer leur cycle de vie. À la fin de ce tutoriel, vous serez capable de vérifier et de gérer en toute confiance l'état de vos conteneurs Docker pour un développement et un déploiement d'applications efficaces.

Création et exécution d'un conteneur Docker

Avant de pouvoir vérifier l'état des conteneurs Docker, nous devons avoir des conteneurs en cours d'exécution. Dans cette étape, nous allons créer et exécuter un simple conteneur Docker.

Comprendre les conteneurs Docker

Les conteneurs Docker sont des paquets logiciels légers, autonomes et exécutables qui incluent tout ce qui est nécessaire pour exécuter une application : code, runtime, outils système, bibliothèques et paramètres. Ils fournissent des environnements cohérents à travers les différentes étapes de développement.

Les avantages de l'utilisation des conteneurs Docker incluent :

  • Environnements d'exécution cohérents
  • Isolation des autres applications
  • Déploiement et mise à l'échelle rapides
  • Utilisation efficace des ressources

Vérification de l'installation de Docker

Vérifions d'abord que Docker est correctement installé sur le système :

docker --version

Vous devriez voir une sortie similaire à :

Docker version 20.10.21, build baeda1f

Exécution de votre premier conteneur

Exécutons un simple conteneur en utilisant l'image officielle du serveur web Nginx. Cela nous donnera un conteneur à surveiller dans les étapes suivantes.

Exécutez la commande suivante dans votre terminal :

docker run --name my-nginx -d -p 8080:80 nginx

Cette commande :

  • Crée un conteneur nommé my-nginx
  • L'exécute en mode détaché (-d), ce qui signifie qu'il s'exécute en arrière-plan
  • Mappe le port 8080 de l'hôte vers le port 80 du conteneur (-p 8080:80)
  • Utilise l'image officielle nginx de Docker Hub

Vous devriez voir une longue chaîne de caractères, qui est l'ID du conteneur :

a72369167c214c20247f786a47b6b0b8581b60324bd2d151a7a0db8ddb024959

Vérifions maintenant que le conteneur est en cours d'exécution :

docker ps

Vous devriez voir une sortie similaire à :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds    0.0.0.0:8080->80/tcp   my-nginx

Félicitations ! Vous avez créé et démarré avec succès un conteneur Docker. Dans l'étape suivante, nous allons explorer comment vérifier l'état de ce conteneur plus en détail.

Commandes de base pour l'état des conteneurs

Maintenant que nous avons un conteneur en cours d'exécution, apprenons à vérifier son état en utilisant les commandes les plus courantes de Docker.

Utilisation de la commande docker ps

La commande docker ps est le moyen le plus fondamental d'afficher les conteneurs en cours d'exécution.

docker ps

La sortie devrait ressembler à :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    0.0.0.0:8080->80/tcp   my-nginx

Cette commande affiche :

  • CONTAINER ID : L'identifiant unique du conteneur
  • IMAGE : L'image Docker utilisée pour créer le conteneur
  • COMMAND : La commande exécutée à l'intérieur du conteneur
  • CREATED : Quand le conteneur a été créé
  • STATUS : L'état actuel du conteneur
  • PORTS : Mappages de ports entre l'hôte et le conteneur
  • NAMES : Le nom attribué au conteneur

Affichage de tous les conteneurs

La commande de base docker ps n'affiche que les conteneurs en cours d'exécution. Pour voir tous les conteneurs, y compris ceux qui sont arrêtés, utilisez :

docker ps -a

Cela affichera tous les conteneurs, quel que soit leur état :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes    0.0.0.0:8080->80/tcp   my-nginx

Actuellement, nous n'avons qu'un seul conteneur, mais si vous aviez des conteneurs arrêtés, ils apparaîtraient également ici.

État du conteneur avec formatage

Vous pouvez personnaliser la sortie de docker ps pour afficher uniquement les informations dont vous avez besoin, en utilisant l'option --format :

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Cela affichera un tableau simplifié avec uniquement les noms, l'état et les ports des conteneurs :

NAMES       STATUS          PORTS
my-nginx    Up 7 minutes    0.0.0.0:8080->80/tcp

Arrêt d'un conteneur

Arrêtons notre conteneur pour voir comment son état change :

docker stop my-nginx

Sortie :

my-nginx

Vérifiez à nouveau l'état :

docker ps

Vous remarquerez que le conteneur n'est plus répertorié dans les conteneurs en cours d'exécution. Pour le voir, utilisez :

docker ps -a

Sortie :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   10 minutes ago   Exited (0) 10 seconds ago             my-nginx

L'état du conteneur est passé à "Exited", indiquant qu'il n'est plus en cours d'exécution.

Démarrage d'un conteneur

Redémarrons le conteneur :

docker start my-nginx

Sortie :

my-nginx

Vérifiez l'état pour confirmer qu'il est en cours d'exécution :

docker ps

Sortie :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 5 seconds    0.0.0.0:8080->80/tcp   my-nginx

Génial ! Vous comprenez maintenant comment vérifier l'état de base des conteneurs Docker en utilisant la commande docker ps, et comment arrêter et démarrer les conteneurs.

Surveillance avancée des conteneurs

Maintenant que vous comprenez les bases de la vérification de l'état des conteneurs, explorons des commandes de surveillance plus avancées qui fournissent des informations détaillées sur vos conteneurs.

Informations détaillées sur les conteneurs avec docker inspect

La commande docker inspect fournit des informations détaillées sur la configuration et l'exécution d'un conteneur :

docker inspect my-nginx

Cette commande renvoie un tableau JSON avec des informations complètes sur le conteneur. La sortie est assez longue, mais elle comprend :

  • Paramètres réseau
  • Montages de volumes
  • Variables d'environnement
  • Limites de ressources
  • État du conteneur
  • Et bien plus encore

Examinons une section spécifique en utilisant l'option --format :

docker inspect --format='{{.State.Status}}' my-nginx

Sortie :

running

Vous pouvez extraire d'autres informations spécifiques :

docker inspect --format='{{.NetworkSettings.IPAddress}}' my-nginx

Cela affichera l'adresse IP interne du conteneur.

Métriques de conteneur en temps réel avec docker stats

La commande docker stats fournit un flux en direct des statistiques d'utilisation des ressources du conteneur :

docker stats my-nginx

Vous verrez une sortie similaire à :

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O        PIDS
a72369167c21   my-nginx   0.00%     2.312MiB / 7.764GiB   0.03%     1.05kB / 1.51kB   0B / 4.1kB       2

Cela montre :

  • Pourcentage d'utilisation du CPU
  • Utilisation de la mémoire
  • E/S réseau (NET I/O)
  • E/S de bloc (BLOCK I/O)
  • Nombre de processus

Appuyez sur Ctrl+C pour quitter l'affichage des statistiques en direct.

Pour voir les statistiques de tous les conteneurs en même temps :

docker stats --no-stream

Cela affiche un instantané des statistiques sans les mises à jour continues.

Affichage des journaux des conteneurs

Pour résoudre les problèmes, il est souvent utile de vérifier les journaux du conteneur :

docker logs my-nginx

Vous verrez les journaux du serveur Nginx. Si vous avez accédé au serveur web, vous verrez les journaux des requêtes HTTP.

Pour suivre les journaux en temps réel (similaire à tail -f) :

docker logs -f my-nginx

Appuyez sur Ctrl+C pour quitter le flux de journaux.

Vérification des processus du conteneur

Pour voir les processus en cours d'exécution à l'intérieur d'un conteneur :

docker top my-nginx

La sortie ressemblera à :

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12345               12321               0                   14:15               ?                   00:00:00            nginx: master process nginx -g daemon off;
systemd+            12401               12345               0                   14:15               ?                   00:00:00            nginx: worker process

Cela montre tous les processus en cours d'exécution à l'intérieur du conteneur, leurs PID et l'utilisation des ressources.

Création d'un nouveau conteneur pour comparaison

Créons un autre conteneur pour le comparer à celui existant :

docker run --name redis-server -d redis

Comparons maintenant les statistiques des deux conteneurs :

docker stats --no-stream my-nginx redis-server

Vous devriez voir les statistiques des deux conteneurs, ce qui vous permet de comparer leur utilisation des ressources.

Ces commandes de surveillance avancées vous donnent des informations plus approfondies sur l'état et les performances de vos conteneurs, ce qui est essentiel pour résoudre les problèmes et optimiser l'utilisation des ressources.

Gestion du cycle de vie des conteneurs

Comprendre comment gérer le cycle de vie d'un conteneur est crucial pour une utilisation efficace de Docker. Dans cette étape, nous allons explorer diverses commandes pour contrôler les états des conteneurs et comprendre le cycle de vie des conteneurs.

États du cycle de vie des conteneurs

Un conteneur Docker peut exister dans plusieurs états :

  • Created (Créé) : Le conteneur est créé mais non démarré
  • Running (En cours d'exécution) : Le conteneur est actuellement en cours d'exécution
  • Paused (En pause) : L'exécution du conteneur est en pause
  • Stopped (Arrêté) : Le conteneur est arrêté mais existe toujours
  • Removed (Supprimé) : Le conteneur est supprimé

Explorons comment passer d'un état à l'autre.

Création d'un conteneur sans le démarrer

Vous pouvez créer un conteneur sans le démarrer en utilisant la commande create :

docker create --name test-container nginx

Cela crée un conteneur mais ne le démarre pas. Vérifiez son état :

docker ps -a

Vous devriez voir le nouveau conteneur avec l'état "Created" (Créé) :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS                  NAMES
3f4ab92d1234   nginx     "/docker-entrypoint.…"   5 seconds ago    Created                                            test-container
a72369167c21   nginx     "/docker-entrypoint.…"   40 minutes ago   Up 30 minutes               0.0.0.0:8080->80/tcp   my-nginx
bc123def456a   redis     "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes               6379/tcp               redis-server

Démarrage d'un conteneur créé

Pour démarrer le conteneur créé :

docker start test-container

Vérifiez qu'il est en cours d'exécution :

docker ps

Mise en pause et reprise des conteneurs

Docker vous permet de mettre un conteneur en pause, ce qui fige tous les processus à l'intérieur :

docker pause test-container

Vérifiez son état :

docker ps

Sortie :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                  PORTS                  NAMES
3f4ab92d1234   nginx     "/docker-entrypoint.…"   2 minutes ago    Up 1 minute (Paused)                           test-container
a72369167c21   nginx     "/docker-entrypoint.…"   42 minutes ago   Up 32 minutes           0.0.0.0:8080->80/tcp   my-nginx
bc123def456a   redis     "docker-entrypoint.s…"   12 minutes ago   Up 12 minutes           6379/tcp               redis-server

Pour reprendre le conteneur :

docker unpause test-container

Vérifiez qu'il est à nouveau en cours d'exécution :

docker ps

Arrêt et redémarrage des conteneurs

Pour arrêter un conteneur en douceur (en envoyant SIGTERM, puis SIGKILL après une période de grâce) :

docker stop test-container

Pour tuer de force un conteneur (en envoyant SIGKILL) :

docker start test-container ## Start it again first
docker kill test-container  ## Then kill it

Pour redémarrer un conteneur (l'arrête et le redémarre) :

docker start test-container ## Start it again first
docker restart test-container

Suppression des conteneurs

Pour supprimer un conteneur arrêté :

docker stop test-container ## Make sure it's stopped first
docker rm test-container

Vérifiez qu'il a disparu :

docker ps -a | grep test-container

Vous ne devriez obtenir aucune sortie, ce qui indique que le conteneur a été supprimé.

Suppression d'un conteneur en cours d'exécution

Vous pouvez forcer la suppression d'un conteneur en cours d'exécution :

docker run --name temp-container -d nginx
docker rm -f temp-container

Politiques de redémarrage des conteneurs

Docker vous permet de définir des politiques de redémarrage pour les conteneurs :

docker run --name always-restart --restart always -d nginx

Ce conteneur redémarrera automatiquement s'il se ferme ou si Docker redémarre.

Vérifiez la politique de redémarrage :

docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' always-restart

Sortie :

always

Arrêtons et supprimons ce conteneur :

docker rm -f always-restart

Comprendre ces commandes de cycle de vie vous donne un contrôle total sur vos conteneurs Docker, vous permettant de gérer efficacement leurs états en fonction des besoins de votre application.

Dépannage des problèmes de conteneurs

Même avec une surveillance et une gestion appropriées, les conteneurs peuvent parfois rencontrer des problèmes. Cette étape vous apprendra à dépanner les problèmes courants des conteneurs à l'aide des outils de diagnostic de Docker.

Problèmes courants des conteneurs

Les conteneurs peuvent échouer pour diverses raisons :

  • Plantages d'applications
  • Limitations de ressources
  • Problèmes de configuration
  • Problèmes réseau
  • Erreurs de permission

Explorons comment identifier et diagnostiquer ces problèmes.

Création d'un conteneur problématique

Créons un conteneur qui se fermera immédiatement en raison d'une commande non valide :

docker run --name problematic -d nginx sleep 5

Ce conteneur exécutera la commande sleep 5 puis se fermera après 5 secondes.

Attendez quelques secondes, puis vérifiez son état :

docker ps -a

Sortie :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS                  NAMES
1a2b3c4d5e6f   nginx     "sleep 5"                10 seconds ago   Exited (0) 5 seconds ago                           problematic
a72369167c21   nginx     "/docker-entrypoint.…"   1 hour ago       Up 50 minutes               0.0.0.0:8080->80/tcp   my-nginx
bc123def456a   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes               6379/tcp               redis-server

Le conteneur s'est fermé avec le code 0 (succès), mais il n'est plus en cours d'exécution.

Vérification des codes de sortie des conteneurs

Le code de sortie peut vous indiquer pourquoi un conteneur s'est arrêté :

  • 0 : Succès
  • Non nul : Une erreur s'est produite

Pour voir le code de sortie :

docker inspect problematic --format='{{.State.ExitCode}}'

Sortie :

0

Cela signifie que le conteneur s'est terminé avec succès après avoir terminé sa tâche assignée.

Examen des journaux des conteneurs

Les journaux sont cruciaux pour le dépannage :

docker logs problematic

Dans ce cas, vous ne verrez peut-être aucune sortie car notre commande sleep ne produit pas de journaux.

Créons un autre conteneur problématique qui générera des journaux :

docker run --name crash-test -d nginx sh -c "echo 'Starting container'; sleep 2; echo 'About to crash'; exit 1"

Après quelques secondes, vérifiez son état et ses journaux :

docker ps -a | grep crash-test

Sortie :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
f1e2d3c4b5a6   nginx     "sh -c 'echo 'Starti…"   10 seconds ago   Exited (1) 7 seconds ago              crash-test

Vérifiez maintenant les journaux :

docker logs crash-test

Sortie :

Starting container
About to crash

Ces journaux fournissent des indices sur ce qui s'est passé avant le plantage du conteneur.

Vérification de l'utilisation des ressources

Les contraintes de ressources peuvent provoquer le plantage des conteneurs ou de mauvaises performances :

docker stats --no-stream my-nginx

Cela montre l'utilisation du CPU, de la mémoire et des E/S, ce qui peut aider à identifier les goulots d'étranglement des ressources.

Vérification de la configuration du conteneur

Une mauvaise configuration est une source courante de problèmes :

docker inspect my-nginx

Recherchez :

  • Montages de volumes
  • Variables d'environnement
  • Paramètres réseau
  • Limites de ressources

Accès à un conteneur en cours d'exécution

Pour déboguer les problèmes à l'intérieur d'un conteneur en cours d'exécution :

docker exec -it my-nginx bash

Cela vous donne un shell à l'intérieur du conteneur, où vous pouvez exécuter des commandes pour diagnostiquer les problèmes :

ls -la
ps aux
cat /etc/nginx/nginx.conf
exit ## To leave the container shell

Nettoyage

Nettoyons nos conteneurs problématiques :

docker rm problematic crash-test

En maîtrisant ces techniques de dépannage, vous pouvez rapidement identifier et résoudre les problèmes avec vos conteneurs Docker, garantissant ainsi que vos applications fonctionnent de manière fluide et fiable.

Résumé

Dans ce laboratoire pratique, vous avez acquis des compétences essentielles pour surveiller et gérer les conteneurs Docker :

  1. Création et exécution de conteneurs - Vous avez appris à créer et à exécuter des conteneurs Docker à l'aide de la commande docker run.

  2. Vérification de l'état de base - Vous avez maîtrisé la commande docker ps pour lister les conteneurs en cours d'exécution et vérifier leurs informations d'état de base.

  3. Surveillance avancée - Vous avez exploré des techniques de surveillance avancées en utilisant docker inspect et docker stats pour obtenir des informations détaillées sur les conteneurs et des mesures de performance en temps réel.

  4. Gestion du cycle de vie des conteneurs - Vous avez appris à gérer le cycle de vie complet d'un conteneur, y compris la création, le démarrage, l'arrêt, la mise en pause et la suppression des conteneurs.

  5. Dépannage - Vous avez développé des compétences pour diagnostiquer et résoudre les problèmes courants des conteneurs en utilisant les journaux, la surveillance des ressources et l'accès direct aux conteneurs.

Ces compétences sont fondamentales pour travailler efficacement avec les conteneurs Docker dans les environnements de développement, de test et de production. Vous pouvez désormais surveiller en toute confiance la santé de vos conteneurs, gérer leur cycle de vie et résoudre les problèmes lorsqu'ils surviennent.

Pour poursuivre votre parcours Docker, envisagez d'explorer des sujets tels que Docker Compose pour les applications multi-conteneurs, la mise en réseau Docker et l'orchestration de conteneurs avec Kubernetes.