Exercice 04 : Configurer les réseaux Docker
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un réseau bridge personnalisé avec
docker network create - ✅ Faire communiquer deux conteneurs par leur nom sur un réseau custom
- ✅ Expliquer pourquoi la résolution DNS fonctionne sur un réseau custom mais pas sur
bridgepar défaut - ✅ Connecter un conteneur à plusieurs réseaux avec
docker network connect - ✅ Inspecter un réseau avec
docker network inspect
Durée estimée : 20 min | Difficulté : ⭐⭐⭐☆☆
📖 Contexte
Docker propose plusieurs types de réseaux. Le réseau bridge par défaut permet aux conteneurs de se parler via leurs adresses IP, mais pas par leur nom. Un réseau bridge personnalisé active la résolution DNS automatique : les conteneurs se trouvent par leur nom. C'est le comportement attendu dans toute architecture multi-conteneurs.
📋 Énoncé
Créez un réseau bridge personnalisé, lancez deux conteneurs dessus, et prouvez qu'ils communiquent par leur nom. Comparez ensuite avec le comportement du réseau bridge par défaut.
🧭 Déroulement
Tâche 1 : Créer et inspecter un réseau bridge custom
Créez un réseau Docker nommé mon-reseau de type bridge. Affichez ses détails pour relever le sous-réseau (subnet) et la passerelle (gateway) attribués automatiquement.
Indice :
docker network create <nom>crée un réseau bridge par défaut.docker network inspect <nom>affiche les détails en JSON.
Vérification : docker network ls liste mon-reseau avec le driver bridge.
Tâche 2 : Lancer deux conteneurs sur le réseau custom
Lancez deux conteneurs Alpine en arrière-plan sur mon-reseau :
conteneur-a: dort indéfiniment (sleep 3600)conteneur-b: dort indéfiniment (sleep 3600)
Indice :
--network mon-reseau --name <nom>attache le conteneur au réseau et lui assigne un nom DNS résolvable.
Vérification : docker network inspect mon-reseau liste les deux conteneurs dans la section Containers.
Tâche 3 : Communication par nom de conteneur
Depuis conteneur-a, pinguez conteneur-b par son nom.
Indice :
docker exec <conteneur> ping -c 3 <nom-cible>exécute une commande dans un conteneur en cours d'exécution.
Vérification : Les 3 paquets ICMP reçoivent une réponse (0% packet loss). L'IP résolue appartient au sous-réseau de mon-reseau.
Tâche 4 : Comparer avec le réseau bridge par défaut
Lancez deux nouveaux conteneurs Alpine sans spécifier de réseau (ils rejoignent le réseau bridge par défaut). Tentez de pinger l'un depuis l'autre par nom.
Indice : Sur le réseau
bridgepar défaut, Docker ne fournit pas de résolution DNS par nom de conteneur. Seule la communication par IP fonctionne.
Vérification : Le ping par nom échoue avec bad address ou Name does not resolve. Le ping par IP (docker inspect) fonctionne.
Tâche 5 : Connecter un conteneur à un second réseau
Créez un second réseau reseau-admin. Connectez conteneur-a à ce nouveau réseau sans le redémarrer.
Indice :
docker network connect <reseau> <conteneur>attache un conteneur à un réseau existant à chaud.
Vérification : docker inspect conteneur-a montre deux entrées sous Networks : mon-reseau et reseau-admin.
🗂️ Mini-Projet
Construisez l'architecture réseau et validez chaque checkpoint :
docker network create mon-reseau
docker network ls
docker run -d --name conteneur-a --network mon-reseau alpine sleep 3600
docker run -d --name conteneur-b --network mon-reseau alpine sleep 3600
docker exec conteneur-a ping -c 3 conteneur-b
# Test réseau bridge par défaut
docker run -d --name defaut-a alpine sleep 3600
docker run -d --name defaut-b alpine sleep 3600
docker exec defaut-a ping -c 1 defaut-b # doit échouer par nom
docker network create reseau-admin
docker network connect reseau-admin conteneur-a
docker inspect conteneur-a | grep -A 5 '"Networks"'
# Nettoyage
docker stop conteneur-a conteneur-b defaut-a defaut-b
docker rm conteneur-a conteneur-b defaut-a defaut-b
docker network rm mon-reseau reseau-adminCheckpoints de validation :
docker network create mon-reseaucrée le réseau sans erreurdocker network inspect mon-reseauaffiche subnet et gatewayping -c 3 conteneur-bdepuisconteneur-a: 0% packet loss- Ping par nom sur le réseau
bridgepar défaut échoue docker network connectattacheconteneur-aàreseau-adminsans redémarragedocker inspect conteneur-aliste deux réseaux