Configuration et commandes du démon Docker

Note:

Cette page explique à la fois comment configurer le démon Docker, et montre la configuration actuellement en production.

Après avoir installé Docker sur Debian, Docker est lancé à travers un service systemd.

Note:

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 :

snippet.bash
systemctl enable docker
systemctl start docker

Le démon peut se configurer de deux façons : via un fichier drop-in systemd, ou via un fichier de configuration.

Note:

La plupart des options de configuration peuvent être inspectée “à chaud” avec la commande docker system info.

Important:

Ne faire cette opération qu’après avoir 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.

Attention:

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.

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 :

snippet.bash
systemctl daemon-reload
systemctl restart docker

Lien:

Documentation complète : https://docs.docker.com/config/daemon/systemd/

Note:

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.

Lien:

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 :

snippet.json
{
	"log-driver": "json-file",
	"log-opts": {
	 	"max-size": "100m",
	    	"max-file": "3"
	}
}

Important:

Tant que cette issue 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.

Lien:

La description complète est disponible ici : https://docs.docker.com/config/containers/live-restore/

Attention:

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.

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.

Lien:

On se référera à la documentation officielle : https://docs.docker.com/config/daemon/

On lance Docker et on l’active au démarrage :

systemctl enable --now docker
  • technique/docker/admin/config.txt
  • de tollive