Nous avons vu comment créer et lancer un conteneur, et comment construire une image et persister des données avec des volumes. Maintenant, intéressons-nous à la gestion du réseau pour faire communiquer plusieurs conteneurs.
- IP privée : IP locale d’une machine sur un réseau local.
- Publique : IP accessible depuis Internet.
- Ports : 80 (HTTP), 443 (HTTPS), 22 (SSH), 3306 (MySQL), etc. C’est le point d’entrée d’un service.
- DNS : résolution de noms en adresses IP.
- Sur une machine locale, quand on fait
-p 8080:80
, on expose le port 80 du conteneur sur le port 8080 de l’hôte.
- Bridge (par défaut) :
- Chaque conteneur a une IP sur un réseau virtuel.
- On peut créer un réseau bridge personnalisé :
docker network create monreseau docker run --network monreseau ...
- Host :
- Le conteneur partage le réseau de l’hôte (pas d’isolation de ports).
- Overlay :
- Permet de relier plusieurs hôtes Docker (utile en mode swarm).
- Créer :
docker network create monreseau
- Inspecter :
docker network inspect monreseau
- Supprimer :
docker network rm monreseau
-p 8080:80
: publie le port 80 du conteneur sur 8080 de l’hôte.EXPOSE 80
dans un Dockerfile indique simplement que le conteneur écoute sur 80 (sans le publier automatiquement).
- Créer un réseau Docker personnalisé.
- Lancer un conteneur avec un mini-serveur web Python.
- Lancer un conteneur “client” qui interroge ce serveur par son nom.
-
Créer un réseau personnalisé
docker network create monreseau
- Vérifiez qu’il existe bien :
docker network ls
- Vérifiez qu’il existe bien :
-
Lancer un serveur web Python
- Servez un répertoire courant comme site web :
docker run -d \ --name myserver \ --network monreseau \ -p 8000:8000 \ python:3.9-slim \ python -m http.server 8000
- Ouvrez votre navigateur sur http://localhost:8000 pour voir le contenu par défaut (liste de fichiers).
- Servez un répertoire courant comme site web :
-
Vérifier la communication depuis un autre conteneur
- Lancez un conteneur “client” dans le même réseau :
docker run -it \ --name myclient \ --network monreseau \ alpine sh
- À l’intérieur du conteneur
myclient
, installezcurl
et interrogezmyserver
:apk add curl curl http://myserver:8000
- Vous devriez voir le contenu indexé par le serveur Python.
- Lancez un conteneur “client” dans le même réseau :
-
Ajouter un fichier HTML au serveur (optionnel)
- Sur votre machine hôte, créez un fichier
index.html
avec le contenu suivant :<html> <head><title>Docker Network</title></head> <body> <h1>Communication entre conteneurs</h1> <p>Bienvenue sur le serveur Python dans Docker !</p> </body> </html>
- Relancez le serveur avec un bind mount pour partager ce fichier :
docker run -d \ --name myserver \ --network monreseau \ -v $(pwd):/usr/src/app \ python:3.9-slim \ python -m http.server --directory /usr/src/app 8000
- Ouvrez un navigateur et essayer d'accéder à l'API python puis utilisez
curl
depuismyclient
pour voir la nouvelle page. Constatez les différences.
- Sur votre machine hôte, créez un fichier
-
Explorer le réseau
- Sur votre machine hôte, inspectez le réseau :
docker network inspect monreseau
- Repérez l’adresse IP de
myserver
et validez qu’il communique bien avecmyclient
.
- Sur votre machine hôte, inspectez le réseau :
-
Nettoyage
- Arrêtez et supprimez les conteneurs :
docker stop myserver myclient docker rm myserver myclient
- Supprimez le réseau si vous n’en avez plus besoin :
docker network rm monreseau
- Arrêtez et supprimez les conteneurs :
Commande | Description |
---|---|
docker network ls |
Liste tous les réseaux Docker existants. |
docker network create monreseau |
Crée un réseau Docker personnalisé. |
docker network inspect monreseau |
Inspecte un réseau et affiche ses détails. |
docker network rm monreseau |
Supprime un réseau Docker. |
docker network connect monreseau ... |
Connecte un conteneur existant à un réseau. |