TP5 Comprendre la gestion du réseau avec Docker
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.
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).
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 essayer d'accéder à l'API 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. |