Configuration et Modèles de Réseau dans Docker

Architectures Réseau Fondamentales de Docker

Docker s'appuie sur quatre modèles de mise en réseau natifs pour orchestrer la connectivité des conteneurs :

  • Bridge (Pont) : Topologie par défaut créant un réseau isolé sur l'hôte.
  • Host (Hôte) : Supprime la virtualisation réseau pour partager la pile de l'hôte.
  • Container (Conteneur) : Mutualise l'espace de noms réseau entre pluseiurs conteneurs.
  • None (Aucun) : Isole complètement le conteneur de tout réseau.

À l'initialisation, le démon Docker génère une interface de pont virtuelle nommée docker0, configruée par défaut sur la plage 172.17.0.1/16. Tout nouveau conteneur y est attaché et obtient dynamiquement une adresse IP.

1. Modèle Bridge

Le fonctionnement du réseau Bridge repose sur la technologie veth pair. Lors de la création d'un conteneur, le démon :

  1. Génère deux interfaces virtuelles couplées (ex: veth_xyz et veth_abc). Les paquets transitant par l'une sont instantanément acheminés vers l'autre.
  2. Rattache veth_xyz au pont docker0 de l'hôte.
  3. Injecte veth_abc dans l'espace de noms réseau du conteneur, la renommant en eth0.

Avantages : Maintient une isolation réseau stricte entre les conteneurs tout en assurant la connectivité avec l'hôte.

Inconvénients : L'absence d'adressage IP public pour les conteneurs impose l'utilisation de la translation d'adresses (NAT) pour les communications externes. Cette couche supplémentaire induit une légère baisse de performance et complexifie la découverte de services en raison de la gestion concurrente des ports sur l'hôte.

2. Modèle Host

Cette configuration désactive l'isolatoin réseau. Le conteneur s'exécute directement sur la pile réseau de la machine hôte.

Avantages : Élimine la surcharge du NAT, offrant des performances natives. Idéal pour exposer directement des services sur une adresse IP publique hébergée par la machine.

Inconvénients : Le partage de l'espace réseau expose aux conflits de ports. Si un service de l'hôte écoute sur le port 80, le conteneur ne pourra pas l'utiliser.

docker run --network host --name service_api node:alpine

3. Modèle Container

Ce mode permet à un conteneur de s'aligner sur l'espace de noms réseau d'un conteneur existant, favorisant les échanges inter-conteneurs.

Avantages : La communication entre les entités partagées s'effectue via localhost, maximisant la vitesse de transfert. L'ensemble formé reste isolé vis-à-vis de l'hôte.

Inconvénients : Ne résout pas la problématique de l'accès externe au réseau.

docker run -d --name base_net alpine sleep infinity
docker run --network container:base_net --name app_worker python:3.9

4. Modèle None

L'environnement réseau est entièrement désactivé. Le conteneur ne dispose que de l'interface de bouclage (lo). Ce mode est privilégié pour les traitements sécurisés de données sensibles hors ligne.

docker run --network none --name sandbox alpine

Administration et Configuration Réseau

Accès distant au Démon Docker

Par défaut, l'API Docker est restreinte au socket Unix (/var/run/docker.sock). Pour déporter la gestion, il faut activer l'écoute TCP.

cat <<EOF > /etc/docker/daemon.json
{
    "hosts": ["tcp://10.50.100.5:2376", "unix:///var/run/docker.sock"],
    "log-driver": "json-file"
}
EOF

systemctl restart docker.service
ss -tlnp | grep dockerd

Redéfinition du Pont Par Défaut

Pour éviter les collisions avec les sous-réseaux d'entreprise, la plage d'adresses du pont docker0 peut être modifiée via le paramètre bip (Bridge IP).

# Audit de l'interface existante
ip -4 addr show dev docker0

# Déploiement d'une nouvelle topologie
cat <<EOF > /etc/docker/daemon.json
{
    "bip": "192.168.90.1/24",
    "fixed-cidr": "192.168.90.128/25"
}
EOF

systemctl reload docker.service
ip -4 addr show dev docker0

Publication et Mappage de Ports

L'exposition des applications conteneurisées s'opère via des règles de routage de ports spécifiques.

  • -P : Alloue aléatoirement des ports éphémères de l'hôte pour tous les ports exposés par le conteneur.
  • -p : Crée une correspondance déterministe entre un port hôte et un port conteneur.
# Allocation aléatoire
docker run --detach --name app_rand -P redis:alpine

# Mappage statique (Port_Hôte:Port_Conteneur)
docker run --detach --name app_fixe -p 6380:6379 redis:alpine

# Restriction à une interface locale
docker run --detach --name app_local -p 127.0.0.1:6381:6379 redis:alpine

Étiquettes: Docker réseau Bridge Namespace DockerDaemon

Publié le 24 juillet à 08h40