TP5 : Comprendre la gestion du réseau avec Docker
Objectif du TP
- Comprendre les types de réseaux Docker (bridge, host, overlay) et le mapping de ports.
- Faire communiquer des conteneurs entre eux via un réseau personnalisé.
- Pratiquer l’inspection et le nettoyage des réseaux.
Rendu attendu
- Commandes exécutées (
docker network create/ls/inspect,docker run ...).
Questions d'ouverture
- Quand faut-il publier un port (
-p) et quand ce n’est pas nécessaire ? - Comment un conteneur “trouve” l’autre par son nom, sans connaître son IP ?
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.
Focus : Réseaux et service discovery
Rappels de base avant la pratique: réseaux bridge/host/overlay, mapping de ports et DNS interne Docker.
1.1 Rappels basiques de réseau
- 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.
1.2 Types de networks Docker
- Bridge (par défaut) :
- Chaque conteneur a une IP sur un réseau virtuel.
- On peut créer un réseau bridge personnalisé :
- 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).
1.3 Créer, inspecter, supprimer un network
- Créer :
- Inspecter :
- Supprimer :
1.4 Gérer la configuration des ports et l’exposition
-p 8080:80: publie le port 80 du conteneur sur 8080 de l’hôte.EXPOSE 80dans un Dockerfile indique simplement que le conteneur écoute sur 80 sans le publier automatiquement.
Attention -
EXPOSEne publie pas le port vers votre machine (comme dit précédement). Pour accéder depuis l’hôte, utilisez-p host:containerlors dudocker run.
Mise en pratique
Exercice : Communication entre deux conteneurs via un réseau personnalisé
Objectif
- 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.
Étapes
- Créer un réseau personnalisé
-
Vérifiez qu’il existe bien :
-
Lancer un serveur web Python
- Servez un répertoire courant comme site web :
- Ouvrez votre navigateur sur http://localhost:8000 pour voir le contenu par défaut (liste de fichiers).
-
Vérifier la communication depuis un autre conteneur
- Lancez un conteneur “client” dans le même réseau :
- À l’intérieur du conteneur
myclient, installezcurlet interrogezmyserver: - Vous devriez voir le contenu indexé par le serveur Python.
-
Ajouter un fichier HTML au serveur (optionnel)
- Sur votre machine hôte, créez un fichier
index.htmlavec le contenu suivant : - Relancez le serveur avec un bind mount pour partager ce fichier :
- Ouvrez un navigateur et essayez d'accéder au serveur Python. Puis utilisez
curldepuismyclientpour 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 :
- Repérez l’adresse IP de
myserveret validez qu’il communique bien avecmyclient.
-
Nettoyage
- Arrêtez et supprimez les conteneurs :
- Supprimez le réseau si vous n’en avez plus besoin :
Commandes utiles pour la gestion des réseaux Docker
| 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. |
Conclusion
- Vous maîtrisez les bases réseau Docker (types, mapping de ports, DNS interne).
- Vous avez validé la communication entre deux conteneurs via un réseau dédié.