{{indexmenu_n>10}} # Configuration et commandes du démon Docker Cette page explique à la fois comment configurer le démon Docker, et montre la configuration actuellement en production. ## Commandes Après avoir [installé Docker sur Debian](https://docs.docker.com/engine/install/debian/), Docker est lancé à travers un service `systemd`. Le démon Docker est le programme qui reçoit l'ensemble des commandes Docker et qui gère le cycle de vie des conteneurs. Il se contrôle donc comme un service habituel `systemd`. En particulier, pour l'activer au démarrage et le lancer, on utilisera : ```bash systemctl enable docker systemctl start docker ``` ## Configuration Le démon peut se configurer de deux façons : via un fichier *drop-in* `systemd`, ou via un fichier de configuration. La plupart des options de configuration peuvent être inspectée "à chaud" avec la commande `docker system info`. ### Drop in Ne faire cette opération qu'après avoir [[technique:docker:admin:socket-certs|générer les certificats]]. Sinon, on saute à la suivante. L'installation de Docker livre un fichier de service situé à `/lib/systemd/system/docker.service`. On ne peut pas le modifier car il est écrasé à chaque ré-installation. Cette manière de faire n'est pas privilégiée. On l'utilise uniquement pour exposer le démon Docker en TLS, car [on a pas le choix](https://docs.docker.com/config/daemon/#troubleshoot-conflicts-between-the-daemonjson-and-startup-scripts). L'idée est donc de créer un fichier `/etc/systemd/system/docker.service.d/override.conf`, dont les valeurs vont venir écraser celles du fichier original. À partir de là, la voie est libre pour modifier tous les paramètres liés à `systemd` que vous souhaitez, ou les paramètres passés en configuration du démon Docker. Par exemple, pour exposer le démon Docker via TLS : ``` [Service] ExecStart= ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/DATA/docker/remote/ca.pem --tlscert=/DATA/docker/remote/server-cert.pem --tlskey=/DATA/docker/remote/server-key.pem --host=tcp://0.0.0.0:2376 --host=fd:// [Unit] Requires=docker.socket ``` Suite à ce genre de modifications, il faut recharger la configuration `systemd` et redémarrer le démon Docker : ```bash systemctl daemon-reload systemctl restart docker ``` Documentation complète : https://docs.docker.com/config/daemon/systemd/ ### Fichier de configuration C'est le moyen préféré pour configurer le démon Docker. Par défaut, la configuration s'effectue au format JSON dans le fichier `/etc/docker/daemon.json`. Elle est prise en compte au démarrage du démon. La référence complète pour le fichier de configuration se trouve ici : https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file Dans notre cas, on crée le fichier et on ajoute ces paramètres : ```json { "log-driver": "local" } ``` La rotation des logs se fait automatiquement et on préfère `local` à l'ancien `json-file`. Voir [la documentation officielle](https://docs.docker.com/config/containers/logging/configure/) à ce sujet. ### Live restore Tant que [cette issue](https://github.com/moby/moby/issues/41686) ne sera pas résolue, le live restore est **désactivé** sur toutes les machines. En effet, il y a risque de suppression de l'ensemble des données de production lors du lancement de commandes de type `docker volume prune`. Cette fonctionnalité permet de laisser les conteneurs Docker allumés lorsque le démon est éteint, pour une maintenance, un changement de configuration ou une mise à jour mineure. La description complète est disponible ici : https://docs.docker.com/config/containers/live-restore/ Une mise à jour majeure du démon (*e.g* X.Y → X.Z) nécessite tout de même un redémarrage Une fois cette fonctionnalité activée, on peut modifier un paramètre de configuration (par exemple passer en mode `debug`), et redémarrer le démon Docker, sans interruption de service. ### Rotation de logs Par défaut, les logs des conteneurs sont conservés indéfiniment (*i.e.* jusqu'à la destruction du conteneur). Si un conteneur, à cause d'un `debug` ou d'un bug, produit des quantités énormes de logs, la mémoire peut saturer. Ces options permettent de limiter les logs par conteneur à une taille largement suffisante, à savoir 100M. ## Troubleshooting On se référera à la documentation officielle : https://docs.docker.com/config/daemon/ ## À la fin On lance Docker et on l'active au démarrage : ``` systemctl enable --now docker ```