Passer au contenu principal

Swarm (Docker)

Swarm : services et stacks

En Swarm, l'unité de déploiement est le service (pas le container). Un service définit l'image, le nombre de replicas, la politique de mise à jour. Swarm garantit que le nombre de replicas demandé est maintenu en permanence.

Créer un service

# Service basique
docker service create   --name web   --replicas 3   --publish published=80,target=80   nginx:1.27-alpine

# Voir l'état du service
docker service ls
docker service ps web  # distribution des tasks sur les nœuds

# Logs du service (tous les replicas)
docker service logs -f web

# Inspecter le service
docker service inspect web --pretty

Rolling update

# Mettre à jour l'image avec un rolling update
docker service update   --image nginx:1.27-alpine   --update-parallelism 1   --update-delay 10s   --update-failure-action rollback   web

--update-parallelism 1 : met à jour 1 replica à la fois. --update-delay 10s : attend 10s entre chaque replica. --update-failure-action rollback : rollback automatique si une mise à jour échoue.

# Rollback manuel
docker service rollback web

Stacks : Compose files en Swarm

# compose.yml compatible Swarm
services:
  web:
    image: myapp:${VERSION}
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: rollback
        order: start-first   # démarre le nouveau avant d'arrêter l'ancien
      rollback_config:
        parallelism: 1
        delay: 5s
      restart_policy:
        condition: on-failure
        max_attempts: 3
      placement:
        constraints:
          - node.labels.role == web
        preferences:
          - spread: node.id   # distribuer uniformément sur les nœuds
      resources:
        limits:
          memory: 256M
    networks:
      - app-net

networks:
  app-net:
    driver: overlay
# Déployer une stack
docker stack deploy -c compose.yml myapp

# Lister les stacks
docker stack ls

# Services d'une stack
docker stack services myapp

# Supprimer une stack
docker stack rm myapp

Scaler un service

# Changer le nombre de replicas
docker service scale web=5

# Ou via update
docker service update --replicas 5 web

Mode global (daemon set)

# 1 replica par nœud du cluster (utile pour les agents de monitoring)
docker service create   --name node-exporter   --mode global   --mount type=bind,source=/proc,target=/host/proc:ro   prom/node-exporter:latest