Si vous aviez déjà créé le conteneur Portainer, vous pouvez le relancer en faisant docker start portainer
, sinon créez-le comme suit :
docker volume create portainer_data
docker run --detach --name portainer \
-p 9000:9000 \
-v portainer_data:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer-ce
Récupérons les images depuis Docker Hub:
docker image pull redis:alpine
docker image pull russmckendrick/moby-counter
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 applications 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 80: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";
En résumé par défaut, notre application se connecte sur l’hôte redis
avec le port 6379
Explorons un peu notre réseau Docker.
docker exec
) la commande ping -c 3 redis
à l’intérieur de notre conteneur applicatif (moby-counter
donc). Quelle est l’adresse IP affichée ?docker exec moby-counter ping -c3 redis
Qu’est-ce que Docker fournit qui permet que ce ping fonctionne ?
Pour s’en assurer, interrogeons le serveur DNS de notre réseau moby-network
en lançant la commande nslookup redis
grâce à docker exec
:
docker exec moby-counter nslookup redis
Créez un deuxième réseau moby-network2
Créez une deuxième instance de l’application dans ce réseau : docker run -d --name moby-counter2 --network moby-network2 -p 9090:80 russmckendrick/moby-counter
Lorsque vous pingez redis
depuis cette nouvelle instance moby-counter2
, qu’obtenez-vous ? Pourquoi ?
Comment peut-on faire que moby-counter2
joigne un deuxième Redis ?
moby-counter
Vous ne pouvez pas avoir deux conteneurs avec les mêmes noms, comme nous l’avons déjà découvert.
Par contre, notre deuxième réseau fonctionne complètement isolé de notre premier réseau, ce qui signifie que nous pouvons toujours utiliser le nom de domaine redis
. Pour ce faire, nous devons spécifier l’option --network-alias
:
Créons un deuxième redis avec le même domaine: docker run -d --name redis2 --network moby-network2 --network-alias redis redis:alpine
Lorsque vous pingez redis
depuis cette nouvelle instance de l’application, quelle IP obtenez-vous ?
Lancez nslookup redis
dans le conteneur moby-counter2
pour tester la résolution de DNS.
Vous pouvez retrouver la configuration du réseau et les conteneurs qui lui sont reliés avec docker network inspect moby-network2
.
Notez la section IPAM (IP Address Management).
Arrêtons nos conteneurs : docker stop moby-counter2 redis2
.