8.1 Comando docker compose scale
Scalabilità dei servizi — è il processo di aumento o riduzione del numero di istanze dei container che svolgono lo stesso servizio, per gestire il carico e garantire la fault-tolerance delle applicazioni. In Docker Compose, per scalare i servizi si utilizza il comando docker compose scale
(nelle versioni precedenti) o il parametro --scale
nelle versioni più recenti.
Concetti principali della scalabilità:
- Scalabilità: La capacità di aumentare o ridurre facilmente il numero di istanze del servizio in base al carico attuale.
- Fault-tolerance: Eseguire più istanze del servizio consente di garantire una maggiore affidabilità, poiché un errore di una istanza non comporta l'interruzione di tutto il servizio.
- Load balancing: Distribuzione del carico tra più istanze del servizio per ottimizzare le prestazioni.
Utilizzo del comando docker compose scale
Sintassi del comando:
docker compose scale SERVICE=NUM
Dove:
- SERVICE: il nome del servizio da scalare.
- NUM: il numero di istanze che devono essere avviate.
Esempio di utilizzo:
Supponiamo di avere un file compose.yaml
con la definizione del servizio web.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
Per avviare 3 istanze del servizio web, utilizzare il comando:
docker compose scale web=3
Nota: Prima di eseguire il comando docker compose scale
, assicurati che i servizi siano stati avviati con il comando docker compose up
.
Utilizzo del parametro --scale
nelle versioni più recenti
Nelle versioni più recenti di Docker Compose, il comando docker compose scale
è stato sostituito dal parametro --scale
, che viene utilizzato insieme al comando up
.
docker compose up --scale web=3
Questo approccio è preferibile, poiché consente di avviare e scalare i servizi contemporaneamente.
8.2 Esempi pratici
Esempio 1: Scalabilità di un web server
Crea il file compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
Avvia e scala il servizio fino a 3 istanze:
docker compose up --scale web=3
Ora avrai 3 istanze del web server Nginx, che funzionano sulle porte nel range 80-90.
Importante!
Se un servizio prevede la scalabilità su più istanze, è necessario specificare un range di porte, ad esempio: "80-90:80"
. Questo «prenoterà» un range di 10 porte sulla macchina host. Quando aggiungi una replica del servizio, le verrà assegnata una porta dal range. Se non lo fai, le porte verranno scelte casualmente e le repliche diventeranno inaccessibili.
Esempio 2: Scalabilità con un database
Crea il file compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
Avvia e scala il servizio web
fino a 4 istanze:
docker compose up --scale web=4
Ora avrai 4 istanze del web server Nginx che lavorano con un database PostgreSQL condiviso.
8.3 Gestione dei servizi scalabili
Dopo aver scalato i servizi, puoi utilizzare i comandi di Docker Compose per gestire le istanze.
Visualizzare i container in esecuzione
Usa il comando docker compose ps
per vedere tutti i container in esecuzione:
docker compose ps
Arrestare e rimuovere i servizi scalabili
Per arrestare e rimuovere tutte le istanze di un servizio, utilizza il comando docker compose down
:
docker compose down
Consigli e suggerimenti:
- Load Balancing: utilizza dei load balancer per distribuire il traffico tra più istanze di un servizio. Ad esempio, puoi usare Nginx o HAProxy per questo scopo.
- Conservazione dei dati: assicurati che i dati generati dai servizi scalabili vengano salvati su volumi o storage esterni così da evitare la perdita dei dati in caso di arresto o rimozione dei container.
- Monitoraggio: usa strumenti di monitoraggio come Prometheus o Grafana per tenere traccia delle performance e dello stato dei servizi scalabili.
- Scalabilità automatica: considera l'idea di automatizzare la scalabilità dei servizi in base al carico con orchestratori come Kubernetes o Docker Swarm.
GO TO FULL VERSION