English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Docker Swarm è uno strumento di gestione di cluster di Docker. Trasforma un pool di host Docker in un singolo host Docker virtuale. Docker Swarm fornisce un'API Docker standard, pertanto qualsiasi strumento che ha già comunicato con il demone Docker può utilizzare Swarm per espandersi facilmente su più host.
Gli strumenti supportati includono ma non sono limitati alle seguenti voci:
Dokku
Docker Compose
Docker Machine
Jenkins
Come illustrato nella figura di seguito, il cluster swarm è composto da un nodo amministrativo (manager) e un nodo lavorativo (work node).
swarm manager:负责整个集群的管理工作,包括集群配置、服务管理等所有与集群有关的工作。
work node:ovvero il nodo disponibile nella figura,主要负责运行相应的服务来执行任务(task).
Nelle esempi seguenti, si utilizza Docker Machine e virtualbox, assicurarsi che il tuo host abbia installato virtualbox.
Creare il computer docker:
$ docker-machine create -d virtualbox swarm-manager
Inizializzare il cluster swarm, il computer che sta eseguendo l'inizializzazione è il nodo amministrativo del cluster.
$ docker-machine ssh swarm-manager $ docker swarm init --advertise-addr 192.168.99.107 # L'IP qui è l'IP assegnato durante la creazione del computer.
L'output sopra dimostra che l'inizializzazione è stata eseguita con successo. È necessario copiare la seguente riga, che verrà utilizzata durante l'aggiunta del nodo lavorativo:
docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
Qui vengono direttamente creati due computer, swarm-worker1 e swarm-worker2.
Entrare rispettivamente nei due computer, specificare l'aggiunta al cluster creato nel passo precedente, qui verrà utilizzato il contenuto copiato nel passo precedente.
L'output dei dati sopra indica che l'aggiunta è stata eseguita con successo.
Nell'immagine qui sopra, a causa della lunghezza del contenuto copiato nel passo precedente, viene automaticamente troncato. Di fatto, il comando eseguito nella figura è il seguente:
docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
Entrare nel nodo di gestione e eseguire: docker info per visualizzare le informazioni del cluster corrente.
$ docker info
Tramite il cerchio rosso, si può sapere che nel cluster attualmente in esecuzione ci sono tre nodi, uno dei quali è il nodo di gestione.
AttenzioneOgni operazione relativa alla gestione del cluster viene eseguita sul nodo di gestione.
Nell'esempio seguente, creare un servizio chiamato helloworld su un nodo di lavoro, che viene assegnato in modo casuale a un nodo di lavoro:
docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com
Visualizzare su quale nodo il servizio helloworld è in esecuzione, si può vedere che attualmente è sul nodo swarm-worker1:
docker@swarm-manager:~$ docker service ps helloworld
Visualizzare le informazioni specifiche del deploy di helloworld:
docker@swarm-manager:~$ docker service inspect --pretty helloworld
Estenderemo il servizio helloworld ai due nodi.
docker@swarm-manager:~$ docker service scale helloworld=2
Si può vedere che è stato espanso da un nodo a due nodi.
docker@swarm-manager:~$ docker service rm helloworld
Verificare se è stato eliminato:
Nella seguente esempio, spiegheremo come aggiornare il redis alla versione più recente.
Creare una versione 3.0.6 di redis.
docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6
Aggiorna in modo continuo redis.
docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis
Dalla figura si può notare che la versione di redis è stata aggiornata da 3.0.6 a 3.0.7, il che indica che il servizio è stato aggiornato con successo.
Visualizza tutti i nodi:
docker@swarm-manager:~$ docker node ls
Si può vedere che tutti i nodi sono attivi e possono ricevere nuove assegnazioni di compiti.
Ferma il nodo swarm-worker1:
Attenzione:swarm-worker1 lo stato diventa Drain. Non influisce sui servizi del cluster, ma il nodo swarm-worker1 non riceverà nuovi compiti, la capacità di carico del cluster diminuisce.
Puoi riattivare il nodo con il seguente comando:
docker@swarm-manager:~$ docker node update --availability active swarm-worker1