DOCKER - 3 15 Solution DNS Round Robin
Pour résoudre l'exercice DNS round-robin, créez un réseau personnalisé, puis lancez deux conteneurs Elasticsearch avec le même alias. Utilisez docker network create, puis docker run avec --network-alias search. Chaque conteneur reçoit automatiquement un identifiant aléatoire au démarrage (visible dans les réponses JSON).
Lancez ensuite un conteneur client (CentOS avec curl, ou Alpine avec nslookup) sur le même réseau. Exécutez le même appel curl http://search:9200 ou nslookup search plusieurs fois. Observez que les réponses alternent entre les deux conteneurs Elasticsearch, chacun retournant son identifiant unique. C'est le round-robin DNS : Docker distribue les requêtes de façon aléatoire/alternée entre les conteneurs partageant l'alias.
Remarque clé : la distribution n'est pas parfaitement alternée. Vous verrez peut-être le même conteneur retourner sa réponse deux ou trois fois avant que le second n'apparaisse. Cela est dû à la mise en cache DNS côté client. Malgré cela, le mécanisme démontre le fondement du load balancing intra-Docker : plusieurs instances d'un service répondent via un même nom, et Docker les équilibre sans configuration externe.
Pour nettoyer après l'exercice, utilisez docker container ls pour lister tous les conteneurs, puis docker container rm avec le flag -f (force) pour les supprimer rapidement.
En résumé
Cette leçon démontre comment mettre en place une solution DNS round-robin avec Docker en créant un réseau virtuel contenant plusieurs conteneurs. Vous apprendrez à créer un réseau Docker, à déployer plusieurs conteneurs Elasticsearch et à tester la résolution DNS interne pour vérifier la distribution aléatoire des requêtes entre les instances.
Points clés
- Créer un réseau Docker avec la commande `docker network create` pour isoler et interconnecter les conteneurs
- Configurer un alias DNS commun pour plusieurs conteneurs afin qu'ils soient accessibles par le même nom
- Utiliser `nslookup` et `curl` pour tester la résolution DNS interne du réseau Docker
- Comprendre la différence entre l'exposition des ports (EXPOSE) et la publication des ports (-p) : les ports exposés ne sont accessibles que sur le réseau virtuel
- Observer le comportement du DNS round-robin : les requêtes sont distribuées de manière aléatoire entre les conteneurs, sans garantie d'équilibrage régulier
Questions fréquentes
Comment fonctionne le DNS round-robin dans Docker ?
Docker attribue le même alias DNS à plusieurs conteneurs. Lorsqu'une requête DNS est effectuée, Docker retourne aléatoirement l'adresse IP d'un des conteneurs. Ce comportement est influencé par la mise en cache DNS et n'assure pas un équilibrage parfait des charges.
Quelle est la différence entre EXPOSE et -p dans Docker ?
EXPOSE expose un port sur le réseau virtuel interne et est déclaré dans le Dockerfile, tandis que -p (ou --publish) publie le port sur l'interface externe de l'hôte. Les ports exposés sont accessibles uniquement entre conteneurs du même réseau.
Pourquoi les requêtes DNS ne sont-elles pas équilibrées régulièrement ?
Le round-robin DNS distribue les requêtes de manière aléatoire plutôt que de manière déterministe. La mise en cache DNS et d'autres facteurs peuvent causer l'obtention du même conteneur plusieurs fois consécutives.