6.1 Concetti chiave di Docker Swarm
Docker Swarm
è un sistema di orchestrazione dei container integrato, fornito da Docker. Permette di creare, gestire e scalare un cluster di host Docker, trasformandoli in un unico host logico su cui è possibile eseguire i container. Swarm distribuisce automaticamente i task tra i nodi, garantendo semplicità e tolleranza agli errori. In questa lezione, esamineremo i componenti chiave e i comandi base per gestire Docker Swarm
.
Concetti chiave di Docker Swarm
:
- Cluster (Swarm): un gruppo di host Docker uniti in un unico cluster logico.
- Manager: i nodi che gestiscono il cluster e distribuiscono i task tra i nodi operativi.
- Nodi operativi (Workers): i nodi che eseguono i task ed eseguono i container.
- Servizi (Services): rappresentazione logica delle applicazioni, che descrive quali task devono essere eseguiti e quanti istanze di container devono essere avviate.
- Task: singoli container che rappresentano le istanze dei servizi.
Architettura di Docker Swarm
:
Docker Swarm utilizza un'architettura basata su manager e nodi operativi. I manager gestiscono lo stato del cluster, mentre i nodi operativi eseguono i task.
Manager:
- Gestiscono lo stato del cluster e la sua configurazione.
- Distribuiscono i task tra i nodi operativi.
- Garantiscono tolleranza agli errori e alta disponibilità (se presenti più manager).
Nodi operativi:
- Eseguono i task assegnati dai manager.
- Avviano i container in base ai task.
Comandi base di Docker Swarm
:
-
docker swarm init
: inizializza un nuovo cluster Swarm. -
docker swarm join
: unisce un nodo a un cluster esistente. -
docker node ls
: visualizza l'elenco dei nodi nel cluster. -
docker service create
: crea un nuovo servizio. -
docker service ls
: visualizza i servizi in esecuzione. -
docker service scale
: scala un servizio a un numero specifico di istanze. -
docker service rm
: rimuove un servizio dal cluster.
Utilizzare Docker Swarm
rende più semplice la gestione delle applicazioni in sistemi distribuiti, offrendo tolleranza agli errori, scalabilità e facilità di distribuzione.
6.2 Creazione di un cluster Docker Swarm
Creazione e gestione di un cluster Docker Swarm
Passo 1: Inizializzare il cluster
Sul primo host (manager), esegui il comando:
docker swarm init --advertise-addr <MANAGER_IP>
Questo comando inizializza un nuovo cluster Swarm, rende il nodo corrente il manager e restituisce un comando per aggiungere i nodi lavoratori.
Passo 2: Collegare i nodi lavoratori
Sugli altri host, esegui il comando restituito dal comando docker swarm init
per aggiungerli al cluster:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Dove:
<SWARM_TOKEN>
: token per collegarsi al cluster (generato dal comandodocker swarm init
).<MANAGER_IP>
: indirizzo IP del nodo manager.
Passo 3: Visualizzare i nodi
Per visualizzare tutti i nodi nel cluster, usa il comando:
docker node ls
Questo comando mostra un elenco di tutti i nodi, incluse le loro ruoli, stati e disponibilità.
Esempio di output del comando docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Descrizione delle colonne:
- ID: Identificatore unico del nodo.
- HOSTNAME: Nome dell'host su cui è in esecuzione il nodo.
- STATUS: Stato corrente del nodo (esempio: Ready).
- AVAILABILITY: Disponibilità del nodo (esempio: Active).
- MANAGER STATUS: Indica se il nodo è un manager (esempio: Leader, Reachable) o un nodo lavoratore (vuoto).
Ora il cluster Docker Swarm è configurato e puoi creare e scalare le applicazioni.
6.3 Gestione di Docker Swarm
Gestire i servizi in Docker Swarm
1. Creazione di un servizio
Crea un servizio che verrà avviato con un numero definito di repliche:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
In questo esempio viene creato un servizio my_web
, che esegue 3 istanze di Nginx. I container pubblicano la porta 80 sulla porta 8080 dell'host.
2. Visualizzare i servizi
Per visualizzare tutti i servizi attivi nel cluster usa il comando:
docker service ls
Esempio di output del comando docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Scalare il servizio
Per modificare il numero di istanze (repliche) di un servizio usa il comando docker service scale
:
docker service scale my_web=5
Ora il servizio my_web
avrà 5 istanze.
4. Aggiornare un servizio
Per aggiornare l'immagine del servizio a una nuova versione usa il comando docker service update
:
docker service update --image nginx:latest my_web
Garantire alta disponibilità
Docker Swarm supporta l'alta disponibilità tramite:
- Distribuzione dei task tra i nodi del cluster per il ripristino automatico dei container in caso di guasti.
- Supporto di più manager: È consigliato avere un numero dispari di manager (ad esempio, 3 o 5) per evitare problemi con il quorum.
- Utilizzo delle repliche: Configura più repliche per ogni servizio per aumentare la tolleranza ai guasti.
Il concetto di quorum
Il quorum rappresenta la maggioranza dei nodi, che devono concordare un'azione specifica (ad esempio, la scrittura di dati o l'elezione di un leader) affinché questa sia valida. Ad esempio, in un cluster di 5 nodi il quorum sarà di 3 nodi.
Consiglio utile!
Assicurati che i manager siano ospitati su server fisici o cloud diversi per minimizzare il rischio di guasti simultanei.
6.4 Esempio di configurazione di Docker Compose
per Docker Swarm
Docker Compose
può essere utilizzato con Docker Swarm
per semplificare la gestione di applicazioni multi-contenitore.
Esempio di file docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: esempio
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Esecuzione dello stack di Docker Compose
in Swarm
Per distribuire uno stack in Docker Swarm
, usa il comando:
docker stack deploy -c docker-compose.yml mystack
Visualizzazione dello stack
Visualizza gli stack distribuiti:
docker stack ls
Visualizzazione dei servizi nello stack
docker stack services mystack
GO TO FULL VERSION