TP - Réseaux Docker - compter les baleines (😢)
Pour expérimenter avec le réseau nous allons lancer une petite application nodejs d'exemple (moby-counter) qui fonctionne avec un datastore redis (comme une base de données mais pour stocker des paires clé/valeur simples).**
Lancez la commande ip -br a
pour lister vos interfaces réseau
Pour connecter les deux applications créons un réseau manuellement:
docker network create moby-network
Docker implémente ces réseaux virtuels en créant des interfaces. Lancez la commande ip -br a
de nouveau et comparez. Qu'est-ce qui a changé ?
Maintenant lançons les deux conteneurs en utilisant notre réseau
docker run -d --name redis --network <réseau> redis:alpine
docker run -d --name moby-counter --network <réseau> -p 8080:80 russmckendrick/moby-counter
Visitez la page de notre application. Qu'en pensez vous ? Moby est le nom de la mascotte Docker 🐳 😊. Faites un motif en cliquant.
Comment notre application se connecte-t-elle au conteneur redis ? Elle utilise ces instructions JS dans son fichier server.js
:
var port = opts.redis_port || process.env.USE_REDIS_PORT || 6379;
var host = opts.redis_host || process.env.USE_REDIS_HOST || "redis";
l'application fait donc appel au nom de domaine redis
pour découvrir (découverte de service) l'adresse IP de son datastore redis.
Créez un deuxième réseau moby-network2
Créez une deuxième instance de l'application moby-counter dans ce réseau ainsi qu'un deuxième redis.
docker run -d --name moby-counter2 --network moby-network2 -p 9090:80 russmckendrick/moby-counter
docker run -d --name redis2 --network moby-network2 redis:alpine`
Explorons un peu notre réseau Docker.
Exécutez (docker exec
) la commande ping -c 3 redis
à l'intérieur de notre conteneur applicatif (moby-counter
donc).
docker exec moby-counter ping -c3 redis
Quelle est l'adresse IP retournée ?
Affichez le contenu de /etc/resolv.conf
: le résolveur DNS a été configuré par Docker.
C'est comme ça que le conteneur connaît l'adresse IP de redis
.
Maintenant lancez:
docker exec moby-counter2 ping -c3 redis
docker exec moby-counter2 ping -c3 redis2
Depuis le deuxième conteneur c'est à dire dans le deuxième réseau, nous on ne peut pas pinguer le nom de domaine redis
car nous avons utilisé le nom redis2
pour le conteneur.
=> Notre application ne peut pas se connecter à son redis
Pour régler ce problème on peut soit changer l'application pour qu'elle utilise un autre nom de domaine ou on peut recréer redis et changer son "network alias":
- supprimez le conteneur redis2
- recréez le avec la commande :
docker run -d --name redis2 --network moby-network2 --network-alias redis redis:alpine`
Pour aller un peu plus loin lancez:
docker network inspect moby-network2
Notez la section IPAM (IP Address Management).
Arrêtons nos conteneurs et faisons le ménage
docker stop moby-counter2 redis2
docker container prune
docker network prune
De même que pour les autres resources, docker network prune
permet de faire le ménage des réseaux qui ne sont plus utilisés par aucun conteneur.