Journaux des conteneurs

DockerBeginner
Pratiquer maintenant

Introduction

Les applications exécutées dans des conteneurs écrivent généralement leurs messages d’état et d’erreur dans la sortie standard et la sortie d’erreur standard. Il s’agit d’un modèle de conception important dans les systèmes conteneurisés : au lieu de gérer ses propres fichiers journaux complexes, chaque conteneur transmet son flux au moteur d’exécution, qui le capture et le rend disponible de manière centralisée.

C’est l’une des raisons pour lesquelles les images de conteneurs sont souvent conçues différemment des logiciels traditionnels destinés aux serveurs. Sur les plateformes de conteneurs, il est généralement préférable de produire des informations utiles dans stdout/stderr plutôt que de masquer les journaux dans des fichiers locaux.

En tant que développeur ou administrateur système, l’accès à ces journaux est essentiel pour comprendre ce qui se passe dans les conteneurs exécutés en arrière-plan. Dans les plateformes réelles telles que Kubernetes, ce modèle stdout/stderr constitue également la base des pipelines de journalisation centralisée.

Dans ce laboratoire, vous apprendrez à :

  • Exécuter un conteneur qui génère une sortie continue.
  • Récupérer les journaux générés jusqu’à présent.
  • Suivre les journaux en temps réel pour surveiller l’application pendant son exécution.
  • Arrêter la surveillance sans arrêter l’application.

Démarrer un processus en arrière-plan

Dans cette étape, vous allez démarrer un conteneur Docker en mode détaché. Pour simuler une application réelle, nous exécuterons un script simple qui affiche un message toutes les secondes.

Lorsque vous exécutez un conteneur en mode détaché, avec l’option -d, il s’exécute en arrière-plan. Sa sortie ne s’affiche donc pas immédiatement dans votre terminal.

La sortie existe toujours ; Docker la capture au lieu de la transmettre directement à votre session shell actuelle.

Exécutez la commande suivante pour démarrer le conteneur :

docker run -d --name web-log-app alpine sh -c "while true; do echo 'Application is running...'; sleep 1; done"

Décomposition de la commande :

  • docker run -d : démarre le conteneur en arrière-plan.
  • --name web-log-app : donne au conteneur le nom « web-log-app ».
  • alpine : utilise l’image légère « Alpine Linux ».
  • sh -c "..." : il s’agit de la commande exécutée dans le conteneur. Elle exécute un script shell qui lance une boucle infinie (while true), affiche un message (echo), puis attend 1 seconde (sleep 1) à chaque itération.

Vérifiez que le conteneur est en cours d’exécution :

docker ps

Vous devez voir web-log-app apparaître dans la liste des conteneurs actifs.

Afficher les journaux existants

Comme le conteneur s’exécute en arrière-plan, sa sortie n’est pas visible dans votre terminal actuel. Docker capture cette sortie et vous permet de l’afficher à l’aide de la commande docker logs.

Dans cette étape, vous allez récupérer les journaux générés depuis le démarrage du conteneur.

Exécutez la commande suivante :

docker logs web-log-app

Vous verrez une liste de messages « Application is running... ».

Fonctionnement :

La commande docker logs récupère tous les journaux enregistrés jusqu’à cet instant et les affiche à l’écran. Elle se termine ensuite immédiatement et vous rend l’invite de commande. Cette commande est utile pour consulter l’historique d’une application ou vérifier son état au démarrage.

Ainsi, docker logs affiche la sortie historique disponible jusqu’à présent ; il ne s’agit pas d’un shell interactif ouvert dans le conteneur. Cette commande offre une vue en lecture seule de ce que le processus principal du conteneur a écrit.

Si vous exécutez à nouveau la commande après quelques secondes, vous verrez une liste plus longue, car le conteneur continue de générer des journaux en arrière-plan.

docker logs web-log-app

Surveiller les journaux en temps réel

Il ne suffit pas toujours d’afficher les journaux passés. Vous pouvez avoir besoin de les observer au moment où ils sont produits, afin de déboguer un problème ou de surveiller un trafic en direct. Cette opération ressemble à l’utilisation de la commande tail -f sous Linux.

Dans cette étape, vous allez utiliser l’option -f (follow) pour afficher les journaux en continu et en temps réel.

Exécutez la commande suivante :

docker logs -f web-log-app

Que se passe-t-il ?

L’invite de commande ne réapparaît pas. Votre terminal est désormais « attaché » au flux de journaux du conteneur. Vous verrez apparaître un nouveau message « Application is running... » toutes les secondes.

Le principe est comparable à celui de tail -f, mais la source des données est le flux de journaux capturé par Docker, et non un fichier normal que vous lisez directement.

Ce mode est particulièrement utile pour observer le comportement d’une application pendant que vous interagissez avec elle.

Se détacher et effectuer le nettoyage

Votre terminal est actuellement « bloqué » par le suivi des journaux. Le conteneur est toujours en cours d’exécution et la commande docker logs attend de nouvelles sorties.

Pour arrêter l’affichage des journaux et revenir à l’invite de commande, vous devez envoyer un signal d’interruption.

Appuyez sur Ctrl+C sur votre clavier.

Concept important :

Dans ce contexte, la combinaison Ctrl+C arrête la commande docker logs (l’affichage), mais elle n’arrête pas le conteneur lui-même. Le conteneur web-log-app continue de s’exécuter en arrière-plan et de générer des journaux.

Cette distinction est importante sur le plan opérationnel. Observer un conteneur et le contrôler sont deux actions différentes ; les confondre constitue une erreur fréquente chez les débutants.

Vous pouvez le vérifier en consultant la liste des processus :

docker ps

web-log-app doit toujours apparaître dans la liste.

Nettoyage :

Maintenant que vous avez terminé le laboratoire, arrêtez et supprimez le conteneur afin de libérer des ressources. Nous utiliserons docker rm -f, qui force la suppression d’un conteneur en cours d’exécution, en combinant les opérations d’arrêt et de suppression.

docker rm -f web-log-app

Résumé

Dans ce laboratoire, vous avez appris les principes fondamentaux de l’accès aux journaux des conteneurs Docker. Vous vous êtes exercé à :

  • Exécuter un processus en arrière-plan : utiliser docker run -d pour libérer votre terminal.
  • Afficher les journaux existants : utiliser docker logs <container_name> pour consulter la sortie passée.
  • Surveiller les journaux en temps réel : utiliser docker logs -f <container_name> pour afficher la sortie au moment où elle est produite.
  • Se détacher : utiliser Ctrl+C pour arrêter l’affichage des journaux tout en laissant l’application en cours d’exécution.

Ces compétences sont essentielles pour déboguer et surveiller des applications conteneurisées dans n’importe quel environnement.