Docker Swarm

🐳 Introduction

Docker Swarm est une fonctionnalité d'orchestration de Docker qui permet de transformer un groupe de machines (ou nœuds) en un cluster Docker Swarm. Ce cluster est utilisé pour déployer, gérer et surveiller des conteneurs Docker de manière centralisée.

🚀 Pourquoi utiliser Docker Swarm ?

Docker Swarm offre plusieurs avantages :

  1. Gestion centralisée :

    • Vous pouvez gérer plusieurs machines Docker (appelées nœuds) comme un seul cluster.

    • Les tâches, comme le déploiement ou la mise à jour des services, se font à partir d'un nœud manager.

  2. Équilibrage de charge intégré :

    • Le trafic est automatiquement réparti entre les réplicas d’un service.

  3. Haute disponibilité (HA) :

    • En cas de panne d'un nœud worker, Docker Swarm redistribue automatiquement les conteneurs vers d'autres nœuds disponibles.

  4. Scalabilité facile :

    • Vous pouvez facilement augmenter ou diminuer le nombre d'instances d’un service (réplicas).

  5. Compatibilité Docker native :

    • Docker Swarm est directement intégré à Docker, sans besoin de logiciels tiers.


🏗️ Mise en place d’un cluster Docker Swarm avec VMware

🌟 Pré-requis

Avant de commencer :

  1. Logiciels nécessaires :

    • VMware Workstation/Fusion : Pour créer des machines virtuelles.

    • Docker : Pour exécuter des conteneurs (à installer dans chaque VM).

    • Docker Machine : Pour automatiser la création et la gestion des machines Docker.

  2. Machines à créer :

    • Nous allons créer 3 machines Docker :

      • node1 : servira de manager.

      • node2 et node3 : serviront de workers.

  3. Réseau :

    • Configurez un réseau NAT ou Bridge dans VMware (voir plus bas).


🔨 Création des machines avec Docker Machine et VMware

🖥️ Création des machines Docker

Nous allons utiliser docker-machine pour créer les machines :

docker-machine create --driver vmware node1
docker-machine create --driver vmware node2
docker-machine create --driver vmware node3

📝 Remarque : Les machines seront créées dans le dossier par défaut de docker-machine, généralement : C:\Users\%USERNAME%\.docker\machine\machines.


🧹 Ajout des machines dans VMware

Après leur création, les machines peuvent ne pas apparaître automatiquement dans VMware. Pour les ajouter manuellement :

1

Cliquez avec le bouton droit dans la barre latérale de VMware.

2

Sélectionnez "Scan for Virtual Machines".

3

Naviguez vers le répertoire des machines :

C:\Users\%USERNAME%\.docker\machine\machines

4

Ajoutez les fichiers .vmx pour chaque machine.


📡 Initialisation du cluster Docker Swarm

🖥️ Connexion au nœud manager

Le cluster Docker Swarm est initialisé depuis le nœud manager. Connectez-vous à node1 :

docker-machine ssh node1

🚀 Initialisation du Swarm

Sur node1, exécutez la commande suivante pour initialiser le Swarm. L’adresse utilisée doit être celle de node1 sur le réseau (vous pouvez la vérifier avec docker-machine ip node1) :

docker swarm init --advertise-addr 192.168.253.145
  • Explication :

    • --advertise-addr : Spécifie l’adresse IP utilisée pour communiquer avec les autres nœuds.

Résultat attendu :

Swarm initialized: current node (cu3vdhdtysaqzjuf20twcfhlv) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-58j0mfkvy70snrne6o5rqp6eldfxfijw4tpxljn2f01o4iy043-3sw50hj1qo06mjjuuw7g8pg8l 192.168.253.145:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

➕ Ajout des nœuds workers

🔗 Récupération du token

Le Swarm génère un token permettant aux autres nœuds de rejoindre le cluster. Pour l’obtenir, exécutez sur node1 :

docker swarm join-token worker

Cette commande affiche une autre commande à exécuter sur les workers (node2 et node3).

🤝 Connexion des workers

Sur chaque worker, connectez-vous et exécutez la commande donnée par docker swarm join-token :

Sur node2 :

docker-machine ssh node2
docker swarm join --token SWMTKN-1-58j0mfkvy70snrne6o5rqp6eldfxfijw4tpxljn2f01o4iy043-3sw50hj1qo06mjjuuw7g8pg8l 192.168.253.145:2377

Sur node3 :

docker-machine ssh node3
docker swarm join --token SWMTKN-1-58j0mfkvy70snrne6o5rqp6eldfxfijw4tpxljn2f01o4iy043-3sw50hj1qo06mjjuuw7g8pg8l 192.168.253.145:2377

✅ Vérification du cluster

Revenez sur node1 et exécutez la commande suivante pour vérifier l'état des nœuds du cluster :

docker node ls

Sortie attendue :

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
cu3vdhdtysaqzjuf20twcfhlv *   node1               Ready               Active              Leader              19.03.12
n4fux01ao9djab0lfdvb1iayr     node2               Ready               Active                                  19.03.12
s8p2sapjudxn2vez70llgdjwj     node3               Ready               Active                                  19.03.12

🛠️ Déploiement et gestion des services

🌐 Déploiement d’un service Nginx

Pour déployer un service Nginx avec 2 réplicas, exécutez sur node1 :

docker service create --name mon-nginx --replicas 2 -p 80:80 nginx

📊 Visualisation avec Docker Visualizer

Pour surveiller le cluster visuellement, déployez Docker Visualizer :

docker service create \
  --name visualizer \
  --publish 8080:8080 \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  dockersamples/visualizer

📈 Mise à l’échelle des services

Pour augmenter les réplicas de mon-nginx à 3, exécutez :

docker service scale mon-nginx=3

🔒 Haute disponibilité (HA)

Si un nœud worker tombe en panne, Docker redistribuera automatiquement les conteneurs vers d’autres nœuds. Testez cette fonctionnalité en arrêtant node2 :

docker-machine stop node2

Vérifiez que les conteneurs sont redistribués sur d'autres nœuds :

docker service ps mon-nginx

🗑️ Suppression des services

Pour supprimer un service, utilisez :

docker service rm mon-nginx
docker service rm visualizer

🛠️ Supprimer un nœud du cluster Docker Swarm

🔗 Retirer un worker ou un manager du cluster

Sur le nœud à supprimer (par exemple, node2 ou node3), exécutez :

docker-machine swarm leave
  • Pour forcer la suppression (utile si le nœud est déconnecté ou inaccessible) :

    docker-machine swarm leave --force

🖥️ Supprimer un nœud du cluster depuis le manager

docker-machine rm node1 -y
docker-machine rm node2 -y
docker-machine rm node3 -y

Pour lister les nœuds et obtenir leur ID :

docker-machine ls

Last updated