# [Docker] Swarm

## Introduction

Docker Swarm permet de faire de la répartition de charge et de la HA dans vos infrastructures Docker.

Pour cela, on va mettre en place un cluster de noeuds avec des managers et des workers (masters/slaves).

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-03/scaled-1680-/eVdimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2024-03/eVdimage.png)

## Prérequis

- Avoir Docker installé sur tous les noeuds du cluster

## Installation

Tout d'abord, rendez-vous sur votre **Manager** pour créer le cluster :

```bash
docker swarm init --advertise-addr <manager-IP>
```

Ensuite, il faut vous connecter sur chaque **Workers** pour les faire rejoindre votre cluster :

```bash
docker swarm join --token <TOKEN>
```

Le token a été affiché lors de la création du cluster sur le Manager sinon vous pouvez l'afficher avec cette commande :

```bash
docker swarm join-token worker
```

Et pour faire rejoindre des managers :

```bash
docker swarm join-token manager
```

## Manuel

#### Afficher les membres du cluster

```bash
docker node ls
```

#### Déployer un conteneur dans le cluster

```bash
docker service create --name webserver -p 8080:80 nginx
```

#### Déployer une stack dans le cluster

```bash
docker stack deploy --compose-file compose.yml <STACK_NAME>
```

#### Afficher les services

```bash
docker service ls
```

#### Scale un service

```bash
docker service scale <SERVICE_NAME>=3
```

#### Supprimer une stack

```bash
docker stack rm <STACK_NAME>
```

#### Sortir un noeud du cluster

Sur le noeud :

```bash
docker swarm leave
```

<p class="callout info">S'il s'agit du dernier noeud Manager du cluster, spécifier **--force** pour supprimer le cluster.</p>

Et depuis le Manager :

```bash
docker node rm <NODE_ID>
```