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 :
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.
Équilibrage de charge intégré :
Le trafic est automatiquement réparti entre les réplicas d’un service.
Haute disponibilité (HA) :
En cas de panne d'un nœud worker, Docker Swarm redistribue automatiquement les conteneurs vers d'autres nœuds disponibles.
Scalabilité facile :
Vous pouvez facilement augmenter ou diminuer le nombre d'instances d’un service (réplicas).
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 :
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.
Machines à créer :
Nous allons créer 3 machines Docker :
node1 : servira de manager.
node2 et node3 : serviront de workers.
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 :
Cliquez avec le bouton droit dans la barre latérale de VMware.
Sélectionnez "Scan for Virtual Machines".
Naviguez vers le répertoire des machines :
C:\Users\%USERNAME%\.docker\machine\machines
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