Configurazioni

Swarm

services:
  app:
    image: nginx:latest
    networks:
      - frontend
    volumes:
      - app_data:/usr/share/nginx/html
    deploy:
      mode: replicated               # Modalità: replicated (repliche) o global (1 per nodo)
      replicas: 3                    # Numero di repliche (solo per mode: replicated)
      placement:
        constraints:
          - node.labels.role == web                 # Nodo deve avere label role=web
          - node.hostname != nodo1                   # Esclude nodo con hostname "nodo1"
          - node.platform.os == linux                # Sistema operativo nodo (linux, windows...)
          - node.platform.arch == amd64              # Architettura CPU (amd64, arm64...)
          - engine.labels.disk == ssd                 # Label del motore docker, es. tipo disco
          - node.id != 24ifxuq08s7xyz4n6o1w3a5t5    # Esclude nodo con ID specifico
      preferences:
        - spread: node.labels.zone                   # Preferenza: distribuisci bilanciando per label "zone"
      max_replicas_per_node: 1                        # Limita 1 replica dello stesso servizio per nodo
      resources:
        limits:
          cpus: '0.50'                                # Limite massimo CPU: 50% di un core
          memory: 512M                                # Limite massimo memoria: 512MB
        reservations:
          cpus: '0.25'                                # Riserva minima CPU garantita: 25% di un core
          memory: 128M                                # Riserva minima memoria garantita: 128MB
    cpuset: "1"                                       # Fissa il container al core CPU numero 1
      restart_policy:
        condition: on-failure                          # Quando riavviare: none, on-failure, any
        delay: 5s                                      # Attesa prima del riavvio
        max_attempts: 3                                # Max tentativi di riavvio prima di fallire
        window: 120s                                   # Finestra di tempo per conteggiare tentativi
      update_config:
        parallelism: 2                                # Numero repliche aggiornate contemporaneamente
        delay: 10s                                    # Delay tra aggiornamenti
        failure_action: rollback                       # Azione su fallimento update: pause, continue, rollback
        monitor: 30s                                  # Tempo per monitorare successo aggiornamento
        max_failure_ratio: 0.1                        # Percentuale max repliche fallite prima rollback
      rollback_config:
        parallelism: 1                                # Numero repliche aggiornate contemporaneamente in rollback
        delay: 5s                                     # Delay tra aggiornamenti rollback
        failure_action: pause                         # Azione su fallimento rollback
        monitor: 15s                                  # Tempo monitoraggio rollback


networks:
  frontend:
    driver: overlay                                  # Network overlay per comunicazione multi-host

volumes:
  app_data:
    driver: local                                   # Volume locale per dati persistenti