Bienvenue sur le dépôt de la présentation sur : "Introduction à Docker Swarm".
Cette conférence s'adresse aux développeurs, étudiants et curieux souhaitant comprendre les bases de l'orchestration de conteneurs avec Docker Swarm, un outil natif et simple pour automatiser le déploiement d'applications conteneurisées.
📺 Vous avez manqué la conférence en direct ? Pas de souci !
Le replay est disponible sur YouTube :
👉 Le replay
sudo apt update && sudo apt upgrade -y
sudo apt install curl git unzip -y
sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow 2376/tcp #Docker API port
sudo ufw allow 2377/tcp #Docker Swarm port
sudo ufw allow 7946/tcp #Docker Swarm intra-node communication
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp #Overlay network traffic
sudo ufw allow 80/tcp #HTTP traffic
sudo ufw allow 443/tcp #HTTPS traffic
sudo ufw enable
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
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
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world
docker swarm init --advertise-addr <IPV4 DE TON SERVEUR MANAGER>
docker swarm join --token <TOKEN DE TON SERVEUR MANAGER> <IPV4 DE TON SERVEUR MANAGER>:2377
Pour vérifié que tous tes serveurs ont bien rejoint je cluster fais cette commande :
docker node ls
Si tu vois tous tes serveur en "Ready" et "Active", tu as réussi
sudo nano /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
sudo systemctl restart docker
docker network create -d overlay caddy_network
mkdir -p /srv/docker/caddy
touch /srv/docker/caddy/compose.yml
nano /srv/docker/caddy/compose.yml
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:latest
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
- caddy_config:/config
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
networks:
- caddy_network # Caddy est connecté à ce réseau
networks:
caddy_network:
external: true # Réseau externe partagé
volumes:
caddy_data:
caddy_config:
docker stack deploy -c /srv/docker/caddy/compose.yml caddy
Pour vérifier que c'est bon :
docker service ls
Ajouter un enregistrement de type A de votre domaine qui pointe vers l'IPV4 de votre serveur manager
mkdir -p /srv/docker/whoami
touch /srv/docker/whoami/compose.yml
nano /srv/docker/whoami/compose.yml
services:
whoami:
image: traefik/whoami
deploy:
replicas: 3 # Utilisation de 3 répliques pour tester le load balancing
labels:
- caddy=<TON NOM DE DOMAINE>
- caddy.reverse_proxy="{{upstreams 80}}" # Redirection des requêtes vers l'application whoami sur le port 80
networks:
- caddy_network # Connexion au réseau partagé
networks:
caddy_network:
external: true # Assure toi que ce réseau est déjà créer
docker stack deploy -c /srv/docker/whoami/compose.yml whoami
Pour vérifié que c'est bon :
docker service ls
Une fois ton service est déployé, tu peux changer dynamiquement le nombre de répliques sans devoir redéployer le stack complet.
Par exemple, pour passer à 5 répliques :
docker service scale whoami_whoami=5
Ou bien :
docker service update --replicas=5 whoami_whoami
Ou bien encore en modifiant le nombre de réplicas dans le fichier Compose, puis en redéployant la stack.
Pour vérifier que le scaling a bien été appliqué :
docker service ps whoami_whoami
Tu devrais voir le bon nombre de tâches actives réparties sur les différents nœuds.
Docker Swarm permet de faire des mises à jour progressives (rolling updates) de tes services sans coupure.
En cas de problème, tu peux effectuer un rollback automatique à la version précédente.
Par exemple, pour passer à une version plus récente (même image ou autre image compatible) :
docker service update --image traefik/whoami:latest whoami_whoami
ℹ️ Cela mettra à jour les 3 réplicas un par un, sans interrompre le service.
Si une mise à jour échoue ou pose problème, tu peux revenir à l’état précédent avec :
docker service rollback whoami_whoami
Pendant ou après la mise à jour, tu peux vérifier l’état de tes conteneurs :
docker service ps whoami_whoami
Tu verras l’historique des tâches (anciens conteneurs arrêtés, nouveaux en cours).