Docker Swarm · 5 min read · Nov 10, 2025

Come Installare e Configurare un Cluster Docker Swarm su CentOS 8

Docker è uno strumento open-source che può essere utilizzato per creare, distribuire e eseguire applicazioni utilizzando un contenitore. Il contenitore consente di impacchettare un’applicazione con tutte le dipendenze necessarie e di distribuirla come un unico pacchetto.

Docker Swarm è uno strumento di clustering utilizzato per gestire l’host Docker. Ti consente di raggruppare più host Docker in un unico server virtuale logico. In questo modo puoi scalare orizzontalmente la tua applicazione e aumentare il numero delle istanze del contenitore. Docker Swarm offre funzionalità molto utili tra cui, auto-ripristino dei contenitori, bilanciamento del carico, scalabilità dei contenitori, scoperta dei servizi e aggiornamenti progressivi.

In questo post, ti mostreremo come configurare un cluster Docker Swarm su CentOS 8.

Requisiti

  • Due server che eseguono CentOS 8.
  • Una password di root configurata su ciascun server.

Installa Docker su Entrambi i Nodi

Per prima cosa, dovrai installare Docker su entrambi i nodi. Per impostazione predefinita, l’ultima versione di Docker non è inclusa nel repository predefinito di CentOS 8. Quindi dovrai aggiungere un repository Docker nel tuo sistema.

Puoi aggiungerlo con il seguente comando:

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Una volta creato il repository Docker, installa Docker con il seguente comando:

dnf install docker-ce --nobest

Dopo aver installato Docker, avvia il servizio Docker e abilitalo per l’avvio al riavvio del sistema con il seguente comando:

systemctl start docker  
systemctl enable docker

Puoi anche verificare lo stato di Docker con il seguente comando:

systemctl status docker

Dovresti ottenere il seguente output:

? docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-03-12 03:55:24 EST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 2173 (dockerd)
    Tasks: 8
   Memory: 44.7M
   CGroup: /system.slice/docker.service
           ??2173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.570387991-05:00" level=error msg="Failed to built-in GetDriver graph btrfs>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617049696-05:00" level=warning msg="Your kernel does not support cgroup bl>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617096273-05:00" level=warning msg="Your kernel does not support cgroup bl>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617278059-05:00" level=info msg="Loading containers: start."
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.884953789-05:00" level=info msg="Default bridge (docker0) is assigned with>
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.039811428-05:00" level=info msg="Loading containers: done."
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066358016-05:00" level=info msg="Docker daemon" commit=363e9a8 graphdriver>
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066498611-05:00" level=info msg="Daemon has completed initialization"
Mar 12 03:55:24 workernode systemd[1]: Started Docker Application Container Engine.
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.119523516-05:00" level=info msg="API listen on /var/run/docker.sock"

Ora, verifica la versione installata di Docker utilizzando il seguente comando:

docker --version

Dovresti vedere il seguente output:

Docker version 20.10.5, build 55c4c88

Configura il Firewall

Successivamente, dovrai consentire le porte 2376, 2377, 7946 e 80 attraverso il firewall su entrambi i nodi. Puoi consentirle con il seguente comando:

firewall-cmd --permanent --add-port=2376/tcp  
firewall-cmd --permanent --add-port=2377/tcp  
firewall-cmd --permanent --add-port=7946/tcp  
firewall-cmd --permanent --add-port=80/tcp  
firewall-cmd --permanent --add-port=7946/udp  
firewall-cmd --permanent --add-port=4789/udp

Successivamente, ricarica il firewalld per applicare le modifiche:

firewall-cmd --reload

Inizializza il Cluster Docker Swarm

Successivamente, dovrai inizializzare il cluster Docker Swarm sul nodo manager. Puoi farlo con il seguente comando:

docker swarm init --advertise-addr 45.58.32.185

Dovresti ottenere il seguente output:

Swarm initialized: current node (cq8xpscsls2ctqhdha8lhdrph) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Puoi utilizzare il comando mostrato nell’output sopra nel nodo worker Docker per unire il nodo al cluster.

Puoi controllare le informazioni del cluster Docker Swarm con il seguente comando:

docker info

Dovresti ottenere il seguente output:

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.5
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: cq8xpscsls2ctqhdha8lhdrph
  Is Manager: true
  ClusterID: m7jrgvuw1k7pvfd1qyc3mffpl
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 45.58.32.185
  Manager Addresses:
   45.58.32.185:2377

Puoi ora verificare il nodo Docker Swarm con il seguente comando:

docker node ls

Dovresti ottenere il seguente output:

ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5

Aggiungi Nodo Worker al Cluster Docker Swarm

Successivamente, dovrai aggiungere il nodo worker al nodo manager Docker Swarm. Puoi farlo con il seguente comando sul nodo worker:

docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377

Dovresti ottenere il seguente output:

This node joined a swarm as a worker.

Sul nodo manager Docker, verifica il nodo worker con il seguente comando:

docker node ls

Dovresti vedere che il nodo worker è stato aggiunto al Docker Swarm:

cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5
bipfv8sfm94a9po0uame5rd1n     workernode   Ready     Active                          20.10.5

Avvia un servizio in Docker Swarm

Qui, creeremo un nuovo servizio web Nginx e lo scaleremo con due contenitori. Puoi crearlo eseguendo il seguente comando sul nodo manager:

docker service create -p 80:80 --name webservice --replicas 2 nginx

Dovresti ottenere il seguente output:

agyxlaswxakrbboakkyydsh0k
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged 

Puoi ora controllare il servizio web con il seguente comando:

docker service ls

Dovresti vedere il seguente output:

ID             NAME         MODE         REPLICAS   IMAGE          PORTS
agyxlaswxakr   webservice   replicated   2/2        nginx:latest   *:80->80/tcp

Puoi anche controllare il contenitore in esecuzione con il seguente comando:

docker ps

Dovresti vedere il seguente output:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
c887cad1df2e   nginx:latest   "/docker-entrypoint.…"   32 seconds ago   Up 30 seconds   80/tcp    webservice.2.jelyj9gmeb7ikl2scg7mz8yg8

Per ottenere informazioni dettagliate sul servizio web, esegui il seguente comando:

docker service ps webservice

Dovresti vedere il seguente output:

ID             NAME           IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR     PORTS
eye9zukwwrkq   webservice.1   nginx:latest   workernode   Running         Running 3 minutes ago              
jelyj9gmeb7i   webservice.2   nginx:latest   masternode   Running         Running 3 minutes ago   

Verifica Docker Swarm

A questo punto, abbiamo distribuito un contenitore Nginx su tutti i nodi del cluster, incluso il nodo di gestione. Puoi ora accedere al tuo server web Nginx utilizzando l’indirizzo IP di qualsiasi nodo worker o manager:

Contenitore Docker distribuito con successo

Conclusione

Nella guida sopra, hai imparato come configurare il cluster Docker Swarm su CentOS 8. Ora puoi aggiungere qualsiasi numero di nodi worker al cluster Docker Swarm e scalare la tua applicazione.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.