Skip to content

TP08 - Annexe : Utiliser un VPS comme manager Docker Swarm

Sur certains postes, Docker Desktop ne permet pas de reproduire correctement un environnement Swarm.

L’objectif de cette annexe est donc de préparer un VPS Linux, d’y installer Docker Engine, puis de l’initialiser comme nœud manager Swarm.

Les commandes Docker pourront ensuite être lancées depuis votre PC grâce à un contexte Docker distant en SSH.

Prérequis

  • Un VPS Ubuntu accessible en SSH.
  • Les informations de connexion au VPS :
  • IP_VPS, par exemple 203.0.113.10
  • USER_VPS, par exemple ubuntu
  • un mot de passe ou une clé SSH
  • Docker Desktop installé sur votre PC, ou au minimum le client Docker docker.

Dans cette annexe, Docker Desktop n’est pas utilisé comme noeud du Swarm. Il sert uniquement à fournir le client Docker local, qui pilotera le moteur Docker installé sur le VPS via le contexte distant.

1) Installer Docker Engine sur le VPS

Se connecter au VPS :

ssh USER_VPS@IP_VPS
````

Mettre à jour le système :

```bash
sudo apt update
sudo apt install -y ca-certificates curl

Ajouter le dépôt officiel Docker :

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Installer Docker Engine :

sudo apt update

sudo apt install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

Vérifier que Docker fonctionne :

sudo docker run hello-world

Autoriser l’utilisateur courant à utiliser Docker sans sudo :

sudo usermod -aG docker $USER
exit

Se reconnecter au VPS :

ssh USER_VPS@IP_VPS

Puis vérifier que Docker fonctionne sans sudo :

docker run hello-world

2) Initialiser le VPS comme manager Swarm

Sur le VPS, initialiser le Swarm :

docker swarm init --advertise-addr IP_VPS

Exemple :

docker swarm init --advertise-addr 203.0.113.10

Vérifier que le VPS est bien manager :

docker node ls

Le VPS doit apparaître avec les rôles suivants :

STATUS    AVAILABILITY    MANAGER STATUS
Ready     Active          Leader

À ce stade, le Swarm est fonctionnel avec un seul noeud manager.

3) Créer un contexte Docker distant depuis votre PC

Sur votre PC, dans un terminal local, créer un contexte Docker qui pointe vers le VPS en SSH :

docker context create tp8-vps --docker "host=ssh://USER_VPS@IP_VPS"

Exemple :

docker context create tp8-vps --docker "host=ssh://ubuntu@203.0.113.10"

Activer ce contexte :

docker context use tp8-vps

Vérifier que les commandes Docker ciblent bien le VPS :

docker info

Si la commande répond avec les informations du Docker Engine installé sur le VPS, le contexte distant fonctionne correctement.

Pour revenir au Docker local de Docker Desktop :

docker context use default

4) Utiliser le VPS pour le TP08

Avec le contexte tp8-vps actif, les commandes Docker lancées depuis votre PC s’exécutent sur le VPS.

Vérifier le contexte actif :

docker context ls

Le contexte actif est marqué par une étoile *.

Exemple :

NAME        DESCRIPTION                               DOCKER ENDPOINT
default     Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
tp8-vps *                                             ssh://ubuntu@203.0.113.10

Activer le contexte du VPS si nécessaire :

docker context use tp8-vps

Les commandes du TP peuvent maintenant être exécutées depuis votre PC, mais elles agiront sur le Swarm du VPS :

docker node ls
docker service ls
docker stack ls

Exemple de déploiement d’une stack :

docker stack deploy -c docker-compose.yml tp8stack

Vérifier les services :

docker service ls

Vérifier les tâches d’un service :

docker service ps tp8stack_web

Scaler un service :

docker service scale tp8stack_web=10

5) Optionnel : ajouter plusieurs VPS comme noeuds Swarm

Si vous disposez de plusieurs VPS, vous pouvez les connecter au même Swarm afin d’obtenir plusieurs noeuds.

Dans ce cas :

  • le premier VPS reste le manager ;
  • les autres VPS deviennent des workers ;
  • chaque VPS doit avoir Docker Engine installé ;
  • les VPS doivent pouvoir communiquer entre eux sur les ports nécessaires à Swarm.

Sur le VPS manager, récupérer la commande de jonction pour un worker :

docker swarm join-token worker

La commande affichée ressemble à ceci :

docker swarm join --token SWMTKN-... IP_MANAGER:2377

Sur chaque VPS worker, exécuter la commande affichée par le manager :

docker swarm join --token SWMTKN-... IP_MANAGER:2377

Puis, sur le manager, vérifier les noeuds du Swarm :

docker node ls

Vous devriez voir le manager et les workers.

Pour un Swarm multi-noeuds, les ports suivants doivent être autorisés entre les VPS :

  • 2377/tcp pour la communication avec le manager Swarm ;
  • 7946/tcp et 7946/udp pour la découverte entre noeuds ;
  • 4789/udp pour le réseau overlay.