RousselTMLEARNING

Article · Vagrant: From Discovery to Expertise

Deploying a ready-to-use Docker Swarm cluster (already joined)

This article is available in French.

1. Le principe #

Plusieurs machines, un seul fichier.

Pourquoi automatiser la jointure #

Docker Swarm a besoin qu'un nœud initialise le cluster (docker swarm init) puis que les autres le rejoignent avec un jeton. Fait à la main, c'est fastidieux et source d'erreurs. Avec Vagrant, le manager écrit son jeton dans le dossier partagé /vagrant, que les workers lisent au démarrage.

Cluster Docker Swarm avec Vagrant
Le dossier synchronisé sert de canal entre les machines au moment du provisioning.
Ordre de création : Les machines sont créées dans l'ordre du Vagrantfile : le manager doit être déclaré en premier pour que le jeton existe quand les workers démarrent.

2. Le Vagrantfile #

Une boucle et deux scripts.

Vagrantfile #

NODES = { "manager1" => "192.168.56.10", "worker1" => "192.168.56.11", "worker2" => "192.168.56.12" }

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-24.04"
  config.vm.provision "shell", path: "scripts/docker.sh"          # commun : installer Docker

  NODES.each do |name, ip|
    config.vm.define name do |node|
      node.vm.hostname = name
      node.vm.network "private_network", ip: ip
      node.vm.provider "virtualbox" do |vb|
        vb.memory = 1536
        vb.cpus = 2
      end
      role = name.start_with?("manager") ? "manager" : "worker"
      node.vm.provision "shell", path: "scripts/#{role}.sh", args: [ip, NODES["manager1"]]
    end
  end
end

scripts/docker.sh #

#!/usr/bin/env bash
set -euo pipefail
curl -fsSL https://get.docker.com | sh
usermod -aG docker vagrant

scripts/manager.sh et scripts/worker.sh #

# manager.sh
set -euo pipefail
docker swarm init --advertise-addr "$1"
docker swarm join-token -q worker > /vagrant/worker.token

# worker.sh
set -euo pipefail
docker swarm join --token "$(cat /vagrant/worker.token)" "$2:2377"

3. Démarrer et utiliser le cluster #

Vérifier, déployer, mettre à l'échelle.

Commandes #

vagrant up                                   # crée les trois nœuds dans l'ordre
vagrant ssh manager1 -c "docker node ls"      # trois nœuds Ready, un Leader
vagrant ssh manager1 -c "docker service create --name web --replicas 3 -p 8080:80 nginx"
vagrant ssh manager1 -c "docker service ps web"
vagrant ssh manager1 -c "docker service scale web=6"
curl http://192.168.56.11:8080               # le maillage de routage répond sur chaque nœud
vagrant destroy -f && rm -f worker.token

Pièges #

  • Interface d'annonce : sans --advertise-addr, Swarm choisit l'interface NAT de VirtualBox (10.0.2.15), identique sur toutes les machines, et la jointure échoue.
  • Jeton périmé : supprimez worker.token après un vagrant destroy.
  • Ports : 2377 (gestion), 7946 (communication) et 4789/udp (réseau overlay) doivent être ouverts entre les nœuds.
Bonne Pratique : Pour un cluster plus résilient, déclarez trois managers : Swarm tolère alors la perte d'un manager (quorum Raft).

📄 Vagrant multi-machines : déployer un cluster Docker Swarm prêt à l'emploi →

My progress

  • ⏱ Estimated time : ≈ 7 min

Sign in to track your progress and take notes. Sign in

💬 Ask a question

Recommended Articles

Bonnes pratiques Vagrant : des environnements reproductibles et rapides

Bonnes pratiques Vagrant : Vagrantfile versionné, boxes épinglées, provisioning idempotent, multi...

Vagrant : vue d'ensemble et vocabulaire (box, provider, provisioner, Vagrantfile)

Les notions indispensables pour suivre la formation Vagrant : à quoi sert Vagrant, le cycle de vi...

Partager un environnement Vagrant : ngrok et le plugin vagrant-share

Rendre une application qui tourne dans une machine Vagrant accessible à un collègue ou un client ...

Les plugins Vagrant : étendre providers, provisioners et commandes

Comprendre le système de plugins de Vagrant : ce qu'un plugin peut ajouter (provider, provisioner...

Le calcul sur Azure : machines virtuelles, App Service, Functions et conteneurs

Choisir et utiliser le calcul Azure : machines virtuelles et groupes identiques (VMSS), App Servi...

Installer Grafana Loki (Docker Compose, binaire et Helm)

Installer et valider Grafana Loki : configuration minimale, Docker Compose avec Grafana et Alloy,...

Préparer la certification HashiCorp Certified: Terraform Associate

Guide de préparation au Terraform Associate : format, objectifs officiels (concepts de l'IaC, flu...

Ansible : générer des fichiers dynamiques avec Jinja2 et les facts

Créer des fichiers de configuration dynamiques : templates Jinja2, variables, facts, filtres, bou...

Bonnes pratiques Grafana : dashboards, provisioning, performances et sécurité

Bonnes pratiques Grafana : conception de dashboards lisibles, variables, dashboards as code, prov...

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!