Skip to content

Instantly share code, notes, and snippets.

@DamienDabernat
Last active February 18, 2025 09:58
Show Gist options
  • Save DamienDabernat/933ae888889c865f3ab654939e902bec to your computer and use it in GitHub Desktop.
Save DamienDabernat/933ae888889c865f3ab654939e902bec to your computer and use it in GitHub Desktop.

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

  1. 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 ...
  2. Host :
    • Le conteneur partage le réseau de l’hôte (pas d’isolation de ports).
  3. Overlay :
    • Permet de relier plusieurs hôtes Docker (utile en mode swarm).

1.3 Créer, inspecter, supprimer un network

  • Créer :
    docker network create monreseau
  • Inspecter :
    docker network inspect monreseau
  • Supprimer :
    docker network rm monreseau

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 80 dans 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

  1. Créer un réseau personnalisé

    docker network create monreseau
    • Vérifiez qu’il existe bien :
      docker network ls
  2. 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).
  3. 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, installez curl et interrogez myserver :
      apk add curl
      curl http://myserver:8000
    • Vous devriez voir le contenu indexé par le serveur Python.
  4. 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 depuis myclient pour voir la nouvelle page. Constatez les différences.
  5. 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 avec myclient.
  6. 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

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment