Aller au contenu

Docker - la configuration du démon

Cette fiche décrit le principe de configuration du démon docker en fournissant un exemple de configuration couvrant plusieurs points explicités par la suite.

Points clés

  • Le démon est configuré à l'aide d'un fichier JSON : /etc/docker/daemon.json
  • En cas de changement sur ce fichier, il faut redémarrer docker comme suit :
sudo systemctl daemon-reload
sudo systemctl restart docker

Exemple de configuration

Quelques options dans /etc/docker/daemon.json :

{
    "data-root": "/var/lib/docker",
    "storage-driver": "overlay2",

    "userns-remap": "default",

    "registry-mirrors": ["https://mirror.gcr.io"],

    "dns": ["1.1.1.1", "1.0.0.1"],
    "bip": "192.168.100.1/24",
    "fixed-cidr": "192.168.100.1/29",
    "default-address-pools": [
        {"base":"172.80.0.0/16","size":24},
        {"base":"172.90.0.0/16","size":24}
    ],

    "icc": false,
    "live-restore": true,
    "userland-proxy": false,
    "no-new-privileges": true,

    "debug": false,

    "log-driver": "journald"
}

Explications

Configuration du stockage

Les options suivantes reprennent les valeurs par défaut pour :

  • "data-root" : Le dossier de stockage des données de docker (faire sudo find /var/lib/docker pour mieux comprendre).
  • storage-driver : Le pilote implémentant le système de fichier par couche.

Configuration du réseau

Les options suivantes permettent de configurer le réseau, par exemple pour utiliser des DNS spécifiques ou éviter des conflits d'adresse IP :

{
    "dns": ["1.1.1.1", "1.0.0.1"],
    "bip": "192.168.100.1/24",
    "fixed-cidr": "192.168.100.1/29",
    "default-address-pools": [
        {"base":"172.80.0.0/16","size":24},
        {"base":"172.90.0.0/16","size":24}
    ],
}
  • "dns" configure les serveurs DNS utilisé par le démon docker (attention : les conteneurs utilisent un serveur DNS à docker)
  • "bip" permet de configurer la plage IP utilisée par le bridge par défaut (ip address show docker0)
  • "fixed-cidr" permet de réserver des IP pour une affectation statique d'IP à certains conteneurs
  • "default-address-pools" permet de spécifier les plages IP utilisées pour les réseaux docker.

Utilisation d'utilisateur dédié à docker

L'option suivante est utilisée pour faire correspondre les utilisateurs des conteneurs (root et et les autres) à un utilisateur ne disposant pas de privilège au niveau du système :

{
    "userns-remap": "default"
}

Avec "default", un utilisateur et un groupe "dockerremap" sera géré par docker (vous le retrouverez dans /etc/subuid et /etc/subgid). Il est toutefois possible d'utiliser un utilisateur de son choix (voir docs.docker.com - Isolate containers with a user namespace)

Remarques

  • Avec cette option, un sous-dossier de /var/lib/docker sera utilisé pour le stockage des données (vous aurez l'impression de tout perdre si vous l'activez)
  • Cette option peut être désactiver localement (--user-ns=host) pour les seuls conteneurs ayant besoin de permissions (ex : accès à l'API Docker via /var/run/docker.sock).

Utilisation d'un miroir pour l'accès à DockerHub

IMPORTANT

L'extrait ci-après permet d'utiliser https://mirror.gcr.io qui est le proxy d'accès à DockerHub de Google (gcr.io = Google Container Registry) :

{
    "registry-mirrors": ["https://mirror.gcr.io"]
}

En alternative, vous pouvez :

Configuration des logs

Par défaut, les logs des conteneurs sont stockés sous forme de fichiers. L'option suivante permet de sur journald :

{
    "log-driver": "journald"
}

Remarques

  • Une telle approche peut faciliter l'intégration des journaux des conteneurs dans un puits de logs et d'éviter la mise en oeuvre d'un mécanisme de rotation des logs spécifiques aux conteneurs.
  • Voir docs.docker.com - Configure logging drivers pour les autres options disponibles.

Ressources

Documentation officielle :

Recommandation de sécurité :