Comment utiliser la commande docker desktop logs pour consulter les journaux Docker Desktop

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser efficacement la commande docker desktop logs pour visualiser et analyser les journaux générés par vos conteneurs Docker. Comprendre les journaux des conteneurs est essentiel pour déboguer les applications et surveiller leur comportement.

Ce lab pratique vous guidera à travers la visualisation des journaux de base des conteneurs, puis démontrera comment filtrer ces journaux en fonction de la priorité, de la plage horaire et de l'unité spécifique (conteneur ou service) générant les journaux. À la fin de ce lab, vous serez compétent dans l'utilisation de la commande docker desktop logs pour obtenir des informations précieuses sur vos applications conteneurisées.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") subgraph Lab Skills docker/run -.-> lab-555143{{"Comment utiliser la commande docker desktop logs pour consulter les journaux Docker Desktop"}} docker/stop -.-> lab-555143{{"Comment utiliser la commande docker desktop logs pour consulter les journaux Docker Desktop"}} docker/rm -.-> lab-555143{{"Comment utiliser la commande docker desktop logs pour consulter les journaux Docker Desktop"}} docker/logs -.-> lab-555143{{"Comment utiliser la commande docker desktop logs pour consulter les journaux Docker Desktop"}} end

Afficher les journaux de base de Docker Desktop

Dans cette étape, vous apprendrez à visualiser les journaux de base des conteneurs Docker. Les journaux sont essentiels pour déboguer et surveiller vos applications exécutées dans des conteneurs.

Commencez par exécuter un conteneur simple qui génère une sortie. Nous utiliserons l'image hello-world, une image très légère qui affiche un message et se termine.

docker run hello-world

Vous devriez voir une sortie similaire à ceci, indiquant que le démon Docker a téléchargé l'image et exécuté le conteneur avec succès :

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:f52335ce493178fc15f729218f180e9988e31c374a6ce98da40cbb890f97f10e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To learn more, try the following commands:
 docker run -it ubuntu bash
 docker images
 docker ps
 docker stop <containerid>
 docker rm <containerid>
To get started with Docker Desktop, visit:
 https://www.docker.com/products/docker-desktop

La sortie que vous voyez correspond aux flux de sortie standard (stdout) et d'erreur standard (stderr) du conteneur. Docker capture ces flux et les rend disponibles sous forme de journaux.

Maintenant, exécutons un conteneur qui reste actif et génère des journaux au fil du temps. Nous utiliserons l'image alpine et exécuterons une commande simple qui affiche un message toutes les 5 secondes.

Commencez par télécharger l'image alpine :

docker pull alpine

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement :

Using default tag: latest
latest: Pulling from library/alpine
... (sortie montrant la progression du téléchargement)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Exécutez ensuite le conteneur alpine en mode détaché (-d) pour qu'il fonctionne en arrière-plan, et donnez-lui un nom (--name mylogger) pour une référence facile. La commande while true; do echo "Hello from mylogger at $(date)"; sleep 5; done affichera un message avec la date actuelle toutes les 5 secondes.

docker run -d --name mylogger alpine sh -c 'while true; do echo "Hello from mylogger at $(date)"; sleep 5; done'

Cette commande affichera l'ID du conteneur.

Pour visualiser les journaux du conteneur en cours d'exécution, utilisez la commande docker logs suivie du nom ou de l'ID du conteneur.

docker logs mylogger

Vous verrez la sortie générée par la commande du conteneur, avec une nouvelle ligne apparaissant environ toutes les 5 secondes. Appuyez sur Ctrl+C pour arrêter la visualisation des journaux.

Pour suivre les journaux en temps réel, utilisez l'option -f (follow) :

docker logs -f mylogger

Cela affichera continuellement les nouvelles entrées de journaux au fur et à mesure de leur génération. Appuyez sur Ctrl+C pour arrêter le suivi des journaux.

Enfin, arrêtons et supprimons le conteneur que nous avons créé :

docker stop mylogger
docker rm mylogger

Cela nettoiera les ressources du conteneur.

Filtrer les journaux par priorité

Dans cette étape, vous apprendrez à filtrer les journaux des conteneurs Docker en fonction de leur niveau de priorité. Bien que la commande standard docker logs ne dispose pas de filtrage intégré par priorité comme systemd-journald, vous pouvez obtenir un filtrage similaire en utilisant des outils comme grep pour rechercher des mots-clés ou motifs spécifiques dans les journaux.

Utilisons le conteneur alpine de l'étape précédente. Si vous l'avez arrêté et supprimé, relancez-le :

docker run -d --name mylogger alpine sh -c 'while true; do echo "INFO: Hello from mylogger at $(date)"; sleep 5; echo "WARNING: Something is happening at $(date)"; sleep 5; echo "ERROR: An error occurred at $(date)"; sleep 5; done'

Cette commande exécute le conteneur en mode détaché et affiche des messages avec différents préfixes de "priorité" (INFO, WARNING, ERROR) toutes les 5 secondes.

Visualisons maintenant les journaux et filtrons-les pour n'afficher que les lignes contenant "ERROR". Nous pouvons rediriger la sortie de docker logs vers grep.

docker logs mylogger | grep "ERROR"

Vous ne verrez que les lignes des journaux contenant le mot "ERROR".

De même, pour voir uniquement les lignes contenant "WARNING" :

docker logs mylogger | grep "WARNING"

Et pour les lignes contenant "INFO" :

docker logs mylogger | grep "INFO"

Vous pouvez également combiner les filtres. Par exemple, pour voir les lignes contenant "WARNING" ou "ERROR", utilisez l'option -E avec grep pour les expressions régulières étendues et l'opérateur | :

docker logs mylogger | grep -E "WARNING|ERROR"

Cela affichera toutes les entrées de journal correspondant à des avertissements ou des erreurs.

Notez que cette méthode repose sur l'application du conteneur qui écrit des journaux avec des mots-clés spécifiques. Pour une journalisation plus structurée et un filtrage avancé, envisagez d'utiliser un pilote de journalisation dédié ou une solution de journalisation externe à Docker.

Enfin, arrêtez et supprimez le conteneur :

docker stop mylogger
docker rm mylogger

Filtrer les journaux par plage horaire

Dans cette étape, vous apprendrez à filtrer les journaux des conteneurs Docker selon une plage horaire spécifique. Cette fonctionnalité est utile pour examiner les journaux d'une période particulière, par exemple lors d'un incident ou d'un déploiement spécifique.

La commande docker logs propose des options pour filtrer les journaux par temps. Nous allons à nouveau utiliser le conteneur alpine. S'il n'est pas en cours d'exécution, démarrez-le avec la même commande que précédemment :

docker run -d --name mylogger alpine sh -c 'while true; do echo "INFO: Hello from mylogger at $(date)"; sleep 5; echo "WARNING: Something is happening at $(date)"; sleep 5; echo "ERROR: An error occurred at $(date)"; sleep 5; done'

Laissez le conteneur s'exécuter pendant une ou deux minutes pour générer des journaux.

Pour afficher les journaux générés depuis une heure spécifique, utilisez l'option --since. Le temps peut être spécifié dans différents formats, notamment un timestamp (secondes depuis epoch), un temps relatif (par exemple 10m pour 10 minutes, 1h pour 1 heure), ou une chaîne de date/heure.

Affichons les journaux générés durant les 2 dernières minutes :

docker logs --since 2m mylogger

Cette commande affichera toutes les entrées de journal du conteneur mylogger générées dans les 2 dernières minutes.

Vous pouvez également spécifier une heure de début et de fin en utilisant --since et --until. L'option --until fonctionne de manière similaire à --since, vous permettant de spécifier une heure jusqu'à laquelle vous souhaitez voir les journaux.

Pour afficher les journaux générés entre il y a 5 minutes et il y a 1 minute :

docker logs --since 5m --until 1m mylogger

Cette commande affichera les journaux de la plage horaire spécifiée. Notez que le résultat exact dépendra du moment où vous exécutez la commande et de la durée d'exécution du conteneur.

Vous pouvez également utiliser des timestamps spécifiques. Pour obtenir le timestamp actuel, vous pouvez utiliser la commande date +%s.

Obtenons le timestamp d'il y a 1 minute :

date -d "1 minute ago" +%s

Maintenant, utilisez ce timestamp avec --until pour voir les journaux jusqu'à il y a 1 minute :

docker logs --until $(date -d "1 minute ago" +%s) mylogger

Cette commande affichera les journaux depuis le démarrage du conteneur jusqu'à il y a 1 minute.

Le filtrage par plage horaire est un moyen puissant de cibler votre analyse des journaux et de vous concentrer sur les événements pertinents.

Enfin, arrêtez et supprimez le conteneur :

docker stop mylogger
docker rm mylogger

Filtrer les journaux par unité

Dans cette étape, vous apprendrez à filtrer les journaux des conteneurs Docker par "unité" génératrice. Dans le contexte des journaux Docker, l'"unité" fait généralement référence au conteneur lui-même. Bien que docker logs fonctionne intrinsèquement sur un seul conteneur (ou unité), comprendre ce concept est important lorsque vous travaillez avec des systèmes de journalisation plus avancés ou lorsque vous devez distinguer les journaux de différents conteneurs.

La principale méthode pour filtrer les journaux par unité dans Docker consiste à spécifier le nom ou l'ID du conteneur lors de l'utilisation de la commande docker logs. Nous avons utilisé cette approche dans les étapes précédentes.

Lançons deux conteneurs différents pour observer comment leurs journaux sont séparés. Nous utiliserons l'image alpine pour les deux, mais avec des noms différents et des commandes légèrement différentes.

D'abord, assurez-vous que le conteneur mylogger des étapes précédentes est arrêté et supprimé.

docker stop mylogger || true
docker rm mylogger || true

Maintenant, exécutez le premier conteneur, nommé container1 :

docker run -d --name container1 alpine sh -c 'while true; do echo "Container 1 log at $(date)"; sleep 3; done'

Ce conteneur affichera un message de journal toutes les 3 secondes.

Ensuite, exécutez un second conteneur, nommé container2 :

docker run -d --name container2 alpine sh -c 'while true; do echo "Container 2 log at $(date)"; sleep 5; done'

Ce conteneur affichera un message de journal toutes les 5 secondes.

Pour visualiser spécifiquement les journaux de container1, utilisez :

docker logs container1

Vous ne verrez que les messages de journal générés par container1.

Pour visualiser spécifiquement les journaux de container2, utilisez :

docker logs container2

Vous ne verrez que les messages de journal générés par container2.

Cela démontre comment docker logs filtre intrinsèquement par le conteneur spécifié (l'"unité"). Si vous utilisiez un système de journalisation centralisé collectant les journaux de plusieurs conteneurs, vous utiliseriez typiquement les métadonnées associées à chaque entrée de journal (comme le nom ou l'ID du conteneur) pour filtrer par unité.

Bien que docker logs lui-même ne dispose pas d'un indicateur --unit distinct comme certains outils de journalisation système, le concept fondamental de filtrage par la source du journal (le conteneur) est réalisé en spécifiant le nom ou l'ID du conteneur.

Enfin, arrêtez et supprimez les deux conteneurs :

docker stop container1 container2
docker rm container1 container2

Résumé

Dans ce lab, vous avez acquis la compétence fondamentale de visualisation des journaux de conteneurs Docker à l'aide de la commande docker logs. Vous avez commencé par exécuter des conteneurs simples comme hello-world et alpine pour comprendre comment Docker capture les flux de sortie standard et d'erreur sous forme de journaux. Cette première étape a démontré le processus basique d'accès à la sortie des conteneurs, essentiel pour surveiller et déboguer les applications exécutées dans des conteneurs.

En complétant la visualisation basique des journaux, vous avez exploré des options de filtrage avancées pour gérer et analyser efficacement les données de journalisation. Vous avez appris à filtrer les journaux par niveaux de priorité, vous permettant de vous concentrer sur les messages critiques. De plus, vous avez pratiqué le filtrage des journaux par plages horaires spécifiques pour isoler des événements dans une période donnée, et par unité pour visualiser les journaux de services ou composants particuliers. Ces techniques de filtrage sont essentielles pour naviguer dans de grands volumes de données de journalisation et identifier rapidement les informations pertinentes pour le dépannage et l'analyse.