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
nginxde 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 :
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.Vérification de l'état de base - Vous avez maîtrisé la commande
docker pspour lister les conteneurs en cours d'exécution et vérifier leurs informations d'état de base.Surveillance avancée - Vous avez exploré des techniques de surveillance avancées en utilisant
docker inspectetdocker statspour obtenir des informations détaillées sur les conteneurs et des mesures de performance en temps réel.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.
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.



