CodeGym /Corsi /Docker SELF /Introduzione a Docker Swarm

Introduzione a Docker Swarm

Docker SELF
Livello 18 , Lezione 0
Disponibile

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:

  1. Cluster (Swarm): un gruppo di host Docker uniti in un unico cluster logico.
  2. Manager: i nodi che gestiscono il cluster e distribuiscono i task tra i nodi operativi.
  3. Nodi operativi (Workers): i nodi che eseguono i task ed eseguono i container.
  4. Servizi (Services): rappresentazione logica delle applicazioni, che descrive quali task devono essere eseguiti e quanti istanze di container devono essere avviate.
  5. 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:

  1. docker swarm init: inizializza un nuovo cluster Swarm.
  2. docker swarm join: unisce un nodo a un cluster esistente.
  3. docker node ls: visualizza l'elenco dei nodi nel cluster.
  4. docker service create: crea un nuovo servizio.
  5. docker service ls: visualizza i servizi in esecuzione.
  6. docker service scale: scala un servizio a un numero specifico di istanze.
  7. 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:

Terminale

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:

Terminale

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

Dove:

  • <SWARM_TOKEN>: token per collegarsi al cluster (generato dal comando docker swarm init).
  • <MANAGER_IP>: indirizzo IP del nodo manager.

Passo 3: Visualizzare i nodi

Per visualizzare tutti i nodi nel cluster, usa il comando:

Terminale

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

Terminale

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:

Terminale

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:

Terminale

docker service ls

Esempio di output del comando docker service ls

Terminale

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:

Terminale

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:

Terminale

docker service update --image nginx:latest my_web

Garantire alta disponibilità

Docker Swarm supporta l'alta disponibilità tramite:

  1. Distribuzione dei task tra i nodi del cluster per il ripristino automatico dei container in caso di guasti.
  2. Supporto di più manager: È consigliato avere un numero dispari di manager (ad esempio, 3 o 5) per evitare problemi con il quorum.
  3. 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

Yaml

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:

Terminal

docker stack deploy -c docker-compose.yml mystack

Visualizzazione dello stack

Visualizza gli stack distribuiti:

Terminal

docker stack ls

Visualizzazione dei servizi nello stack

Terminal

docker stack services mystack
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION