{{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
```