Skip to content

Instantly share code, notes, and snippets.

@DamienDabernat
Last active February 19, 2025 12:07
Show Gist options
  • Save DamienDabernat/9b64cbbbf88645af15c8b3f5f74ee9c8 to your computer and use it in GitHub Desktop.
Save DamienDabernat/9b64cbbbf88645af15c8b3f5f74ee9c8 to your computer and use it in GitHub Desktop.

TP8 : Mise en place d'un cluster Docker Swarm et Rolling Update

1. Introduction

Dans ce TP, vous allez :

  • Créer un cluster Swarm avec plusieurs nœuds.
  • Déployer un service simple « ping » avec Nginx.
  • Mettre à l’échelle ce service.
  • Effectuer une mise à jour progressive vers un service « pong ».
  • Visualiser la répartition des conteneurs.

2.1. Préparation du cluster

  1. Activer un point d’accès Wi-Fi sur un téléphone pour connecter tous vos PC.
  2. Initialiser le Swarm sur un premier nœud (manager) :
    docker swarm init --advertise-addr <IP_MANAGER>
  3. Rejoindre le cluster depuis les autres nœuds (workers) :
    docker swarm join --token <TOKEN> <IP_MANAGER>:2377
  4. Vérifier les nœuds :
    docker node ls

2.2. Déploiement d’un service « ping »

Note : Nous utilisons une image personnalisée au lieu de l'image Nginx par défaut afin de mieux contrôler son contenu, notamment pour y inclure nos propres fichiers HTML et assurer une mise à jour cohérente lors du rolling update.

  1. Créer un fichier docker-compose.yml :
    version: '3.8'
    
    services:
      web:
        image: mon-registre/mon-image:latest
        deploy:
          replicas: 3
        ports:
          - "8080:80"
        volumes:
          - ./html-ping:/usr/share/nginx/html
    • Dans le dossier html-ping, créer un fichier index.html avec le texte "ping".
  2. Construire et tagger l’image avant le déploiement :
    docker build -t mon-image:latest . # Assurez-vous que le Dockerfile est présent dans le répertoire courant
    docker tag mon-image:latest <URL_DU_REGISTRE>/mon-image:latest # Remplacez <URL_DU_REGISTRE> par l'adresse de votre registre
  3. Pousser l’image vers un registre (obligatoire) :
    docker push mon-registre/mon-image:latest
  4. Déployer la stack :
    docker stack deploy -c docker-compose.yml tp8stack
  5. Tester l’accès :
    • Ouvrez un navigateur sur http://<IP_MANAGER>:8080 : vous devriez voir "ping".

2.3. Scaling

  1. Monter à 10 réplicas :
    docker service scale tp8stack_web=10
  2. Vérifier la répartition :
    docker service ps tp8stack_web
  3. Redescendre à 4 réplicas :
    docker service scale tp8stack_web=4

2.4. Rolling Update vers « pong »

  1. Modifier votre page web pour afficher "pong" :

    • Dans un nouveau dossier html-pong, créer un fichier index.html avec le texte "pong".
  2. Construire et tagger l’image mise à jour :

    docker build -t mon-image:latest .
    docker tag mon-image:latest mon-registre/mon-image:latest
  3. Pousser l’image vers un registre (obligatoire) :

    docker push mon-registre/mon-image:latest
  4. Mettre à jour le service :

    docker service update \
      --image mon-registre/mon-image:latest \
      tp8stack_web
  5. Vérifier la transition progressive :

docker service ps tp8stack_web
  • Le service doit passer de « ping » à « pong » sans interruption.
  • Comment vérifié si il y a une intéruption ? A vour d'essayer des méthodes.

2.5. Visualisation

  1. Déployer Docker Swarm Visualizer :
  • A vous de jouer ;)
  1. Aller sur http://<IP_MANAGER>:9000 pour voir la répartition des conteneurs.

2.6. Nettoyage

  1. Supprimer la stack :
    docker stack rm tp8stack
  2. Optionnel : quitter le Swarm sur chaque nœud (sauf manager) :
    docker swarm leave
  3. Sur le manager :
    docker swarm leave --force
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment