docker logs n’accumule pas les journaux dans la mémoire du système. Au lieu de cela, ils sont enregistrés par défaut sous forme de fichier sur le disque du système hôte.
Où et comment les journaux sont-ils stockés ? ⚙️
Docker capture à la fois la sortie standard (stdout) et le flux d’erreurs standard (stderr) du conteneur et les traite via un pilote de journalisation (Logging Driver). Si aucune configuration spéciale n’est faite, Docker utilise par défaut le pilote de journalisation json-file.
-
Emplacement de stockage : Les journaux du conteneur sont stockés sur le système hôte à un chemin spécifique sous forme de fichier JSON. En général, le chemin est le suivant :
/var/lib/docker/containers/[container_ID]/[container_ID]-json.log
-
Commande
docker logs: Cette commande ne montre pas en réalité ce qui est dans la mémoire, mais lit le fichier de journal JSON mentionné ci-dessus pour l'afficher dans le terminal.
Les journaux accumulés ne réduisent-ils pas l'espace disque ? 🤔
Oui, c'est exact. Sans aucune mesure, les fichiers journaux peuvent continuer à grossir jusqu'à occuper tout l'espace disque du système hôte. Pour éviter cela, Docker propose une option de rotation des journaux (Log Rotation) qui limite la taille et le nombre de fichiers journaux.
Par exemple, en exécutant la commande docker run, vous pouvez ajouter les options suivantes :
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
-
--log-opt max-size=10m: Limite la taille maximale d’un fichier journal à 10Mo. -
--log-opt max-file=3: Limite le nombre maximum de fichiers journaux à 3. S'il y en a plus de trois, les fichiers les plus anciens seront supprimés.
Avec ces paramètres, les journaux de ce conteneur utiliseront au maximum 30Mo (10Mo * 3) d'espace disque.
Conclusion 📝
-
Les journaux de la console des conteneurs Docker sont stockés sur le disque de l’hôte et non dans la mémoire.
-
La commande
docker logssert à lire et afficher ce fichier enregistré. -
Pour éviter que les fichiers journaux ne grossissent indéfiniment, il est crucial de configurer l'option de rotation des journaux (
max-size,max-file).
Avec Docker Compose, il est très facile de définir les options de journalisation pour chaque service dans le fichier docker-compose.yml.
Pensez-y comme au flag --log-opt de la commande docker run qui se présente en format YAML.
Configuration dans le fichier docker-compose.yml 📝
Voici un exemple appliquant la rotation des journaux à un service nommé my-app.
services:
my-app:
image: your-app-image
# ... autres configurations ...
deploy:
resources:
limits:
memory: 512M
# 👇 ceci est la configuration de journalisation.
logging:
driver: "json-file" # Pilote de journalisation à utiliser (peut être omis car c'est par défaut)
options:
max-size: "10m" # Taille maximale par fichier : 10Mo
max-file: "3" # Nombre maximum de fichiers : 3
-
logging: C'est la clé qui commence la configuration de journalisation pour ce service. -
driver: Permet de spécifier le pilote de journalisation à utiliser. Lejson-fileest le paramètre par défaut. -
options: Configure les options à transmettre au pilote.-
max-size: Équivalent à--log-opt max-sizedansdocker run. -
max-file: Équivalent à--log-opt max-filedansdocker run.
-
Maintenant, en démarrant ce service avec docker-compose up, les journaux du conteneur my-app seront automatiquement gérés par rotation et n'utiliseront que 30Mo (10Mo * 3) d'espace disque.
Définir une valeur par défaut pour tous les conteneurs 🌍
Si vous trouvez cela fastidieux de donner des options à chaque conteneur et que vous souhaitez appliquer une politique par défaut à l’ensemble de votre système, la meilleure méthode est de modifier le fichier de configuration du démon Docker (Daemon).
-
Ouvrez ou créez le fichier
/etc/docker/daemon.json. (S'il n'existe pas, créez-le.) -
Rédigez le contenu comme suit :
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Redémarrez le démon Docker.
sudo systemctl restart docker
Avec cette configuration, tous les nouveaux conteneurs suivront automatiquement cette politique tant qu'aucune autre configuration de journalisation n'est effectuée. Bien sûr, si vous spécifiez d'autres options de journalisation pour des conteneurs particuliers dans le fichier docker-compose.yml ou dans la commande docker run, les réglages individuels prévaudront sur les configurations du démon.
Résumé
-
Configuration des services individuels : Dans la section
loggingdu fichierdocker-compose.yml, c'est la méthode la plus courante et la plus pratique. -
Paramètre par défaut global : Modifiez le fichier
/etc/docker/daemon.jsonpour appliquer une politique uniforme à tous les conteneurs du serveur.
Aucun commentaire.