Réseaux et Communication Docker

Docker
Système & Réseau
Configurer les drivers de réseau Docker (bridge, host) et assurer la communication sécurisée inter-conteneurs.

L’un des avantages majeurs de la conteneurisation est l’isolation réseau. Par défaut, un conteneur vit dans son propre espace de noms réseau (Network Namespace) et ne possède aucune exposition vers le monde extérieur ou les autres conteneurs.

Pour permettre la communication, Docker fournit des pilotes de réseau (Network Drivers) et un système de redirection de ports (Port Mapping).

🔌 Le Mapping de Ports (-p)

Par défaut, si votre application dans un conteneur écoute sur le port 80, ce port est totalement inaccessible depuis votre ordinateur hôte.

Pour rendre ce service accessible, il faut créer une passerelle avec l’option -p (publish) :

# Syntaxe : -p PORTHÔTE:PORTCONTENEUR
docker run -d -p 8080:80 --name mon-serveur nginx

Lorsque vous exécutez -p 8080:80 :

  1. Docker configure une règle iptables ou démarre un processus léger appelé docker-proxy.
  2. Tout le trafic arrivant sur le port 8080 de l’interface réseau de votre ordinateur est intercepté.
  3. Le trafic est redirigé vers l’adresse IP interne du conteneur sur son port 80.

🧪 Testeur Interactif de Redirection de Ports

Testez l’envoi de requêtes HTTP avec différentes configurations de redirection de ports :

Simulateur de Redirection HTTP & Ports

Choisissez la règle de port-mapping à simuler :

Console Réseau & Proxy Docker

🌐 Les Drivers Réseau Docker

Docker propose plusieurs pilotes réseau préconfigurés adaptés à des besoins d’isolation différents :

3.0.1. Bridge (Par défaut)

Crée un réseau virtuel sous forme de sous-réseau privé (172.17.0.0/16).

  • Principe : Chaque conteneur reçoit une IP interne privée.
  • Idéal pour : La majorité des conteneurs s’exécutant sur un même hôte.
3.0.2. Host

Supprime l’isolation réseau entre le conteneur et la machine hôte.

  • Principe : Le conteneur utilise directement l’adresse IP et la pile réseau de l’hôte.
  • Idéal pour : Des performances réseau maximales (pas de surcoût NAT).
3.0.3. None

Désactive intégralement toutes les interfaces réseau du conteneur.

  • Principe : Seule l’interface de boucle locale loopback (127.0.0.1) existe.
  • Idéal pour : Les traitements ultrasécurisés ou hors-ligne (batchs, calculs isolés).

📡 Topology & Communication Inter-Conteneurs

Visualisez comment le trafic réseau circule entre l’ordinateur hôte et plusieurs conteneurs interconnectés :

Topologie Réseau & Routage Docker

💡 Le Réseau Personnalisé & la Résolution DNS

Dans le réseau bridge par défaut, les conteneurs ne peuvent communiquer entre eux que par leur adresse IP. Or, les IP des conteneurs changent à chaque redémarrage !

Pour résoudre ce problème, créez un réseau personnalisé (User-Defined Bridge) :

# 1. Créer un réseau bridge personnalisé
docker network create mon-reseau

# 2. Lancer la base de données sur ce réseau avec un nom
docker run -d --name ma-db --network mon-reseau postgres:15

# 3. Lancer l'application web sur le MÊME réseau
docker run -d --name mon-app --network mon-reseau -p 3000:3000 mon-app-image

🎯 Le DNS Interne Automatique

Sur un réseau personnalisé, Docker active un serveur DNS embarqué. L’application mon-app peut se connecter à la base de données simplement en utilisant le nom du conteneur comme hôte : postgres://ma-db:5432/ma_base. Plus besoin de hardcoder des IP !

🛠️ Commandes de Gestion Réseau CLI

# Lister tous les réseaux Docker existants
docker network ls

# Créer un nouveau réseau bridge
docker network create reseau-prod

# Inspecter les conteneurs connectés à un réseau et leurs adresses IP
docker network inspect reseau-prod

# Connecter un conteneur déjà existant à un réseau
docker network connect reseau-prod mon-serveur

# Déconnecter un conteneur d'un réseau
docker network disconnect reseau-prod mon-serveur

# Supprimer un réseau (doit être vide)
docker network rm reseau-prod