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