DOCKER - 16 Réseau et DNS
Les conteneurs Docker sont éphémères : leurs adresses IP changent constamment. Vous ne pouvez donc pas compter sur les IP statiques pour la communication inter-conteneurs. Docker résout ce problème avec un système DNS intégré : les conteneurs se découvrent par nom, pas par IP. Les noms de conteneurs sont stables et prédictibles.
Sur le réseau bridge par défaut, le DNS entre conteneurs n'est pas disponible. Vous devez utiliser l'option obsolète --link pour créer manuellement des liens. La meilleure pratique est de créer un réseau personnalisé où le DNS fonctionne automatiquement pour tous les conteneurs :
docker network create myapp
docker run --network myapp --name api myapp-image
docker run --network myapp --name db postgres
# À l'intérieur de api : ping db fonctionne,
# l'adresse IP de db est résolue automatiquement
Vous pouvez aussi assigner plusieurs alias DNS à un conteneur lors de son lancement pour faciliter la découverte de service. Pour tester la résolution DNS, entrez dans un conteneur et vérifiez :
docker exec -it api nslookup db
Cette approche par nom de conteneur élimine la complexité de configuration d'adresses IP statiques et rend les applications Docker portables et flexibles. C'est la fondation de l'orchestration moderne.
En résumé
Cette leçon explique pourquoi le DNS est crucial dans Docker : les conteneurs ayant des adresses IP dynamiques, on ne peut pas s'y fier pour la communication entre conteneurs. Docker résout ce problème en utilisant les noms des conteneurs comme équivalent de noms d'hôtes, permettant une résolution DNS automatique sur les réseaux personnalisés. Les réseaux personnalisés offrent donc une bien meilleure expérience que le réseau par défaut ou les liens manuels.
Points clés
- Les conteneurs Docker ont des adresses IP dynamiques qui changent constamment, rendant impossible une communication fiable basée sur les IPs
- Docker utilise automatiquement le nom des conteneurs comme identifiant réseau, permettant aux conteneurs de se découvrir par leur nom sur les réseaux personnalisés
- Les réseaux personnalisés intègrent nativement le DNS automatique, contrairement au réseau bridge par défaut qui requiert l'option link
- Créer un réseau personnalisé simplifie énormément la communication entre services (ex: PHP avec MySQL) sans devoir gérer les adresses IP
- En production avec docker-compose, les réseaux virtuels sont créés automatiquement, rendant la communication entre conteneurs encore plus transparente
Questions fréquentes
Pourquoi les adresses IP des conteneurs ne sont-elles pas fiables?
Parce que les conteneurs sont des ressources éphémères qui démarrent, s'arrêtent, migrent et disparaissent constamment. Leurs adresses IP changent donc d'une minute à l'autre, ce qui rend impossible une communication prévisible basée sur les IPs seules.
Comment Docker résout-il le problème de communication entre conteneurs?
Docker utilise la résolution DNS automatique des noms de conteneurs. Sur un réseau personnalisé, chaque conteneur peut découvrir les autres par leur nom (exemple: un conteneur PHP peut communiquer avec un conteneur MySQL en utilisant simplement le nom du conteneur MySQL comme hostname).
Quelle est la différence entre un réseau personnalisé et le réseau bridge par défaut pour le DNS?
Le réseau personnalisé intègre nativement le DNS automatique, tandis que le réseau bridge par défaut ne dispose pas de DNS intégré et requiert l'utilisation de l'option link pour établir des connexions nommées entre conteneurs.