Ti sei mai chiesto se è possibile orchestrare i container direttamente con Docker anziché Kubernetes? Docker Swam potrebbe essere la soluzione che stai cercando e sei sulla strada giusta!
In questo tutorial imparerai come gestire più container Docker con Docker Swarm.
Continua a leggere e inizia a orchestrare!
Prerequisiti
Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere quanto segue:
- Tre istanze EC2 in esecuzione su Ubuntu 20.04.3 LTS.
- Docker installato su tutte le istanze EC2:questo tutorial utilizza la versione 20.10.12.
Costruzione e distribuzione di container in uno sciame di Docker
Docker Swarm è un cluster di macchine virtuali o fisiche che esegue applicazioni Docker. La modalità Swarm offre funzionalità integrate di Docker per l'orchestrazione dei container.
Ma prima di poter iniziare a gestire più container, avrai bisogno di sistemi/macchine diversi (istanze AWS EC2).
Puoi imparare i concetti chiave in modalità sciame prima di approfondire il tutorial.
Supponendo che le tue istanze EC2 siano configurate:
1. Apri il tuo browser web e accedi alla dashboard di EC2. Visualizza una delle pagine di riepilogo delle informazioni delle tue istanze EC2 e prendi nota dell'indirizzo IPv4 pubblico, come mostrato di seguito.
2. Quindi, apri il tuo terminale ed esegui il comando seguente per creare un nodo manager in una delle tue istanze EC2. Assicurati di sostituire 18.237.102.75
con l'indirizzo IPv4 pubblico della tua istanza EC2 che hai annotato in precedenza (passaggio uno). Il comando seguente inizializza l'istanza come nodo Docker swarm manager.
Un nodo manager assegna indirizzi IP ad attività/contenitori, assegna attività a nodi, invia comandi per l'esecuzione dei nodi di lavoro.
Il nodo manager esegue le funzioni di orchestrazione e gestione del cluster di Docker Swarm. Ma non preoccuparti. Imparerai a conoscere i nodi di lavoro andando oltre in questo tutorial.
sudo docker swarm init --advertise-addr 18.237.102.75
Nota il comando simile mostrato di seguito.
3. Esegui il comando annotato in precedenza (passaggio due) per unirti allo sciame come nodo di lavoro. Un nodo di lavoro riceve ed esegue le attività indicate dai nodi manager.
4. Ora esegui il docker node
comando qui sotto per controllare tutti i nodi presenti in un particolare swarm. Tieni presente che solo il nodo manager può eseguire il comando seguente.
sudo docker node ls
5. Ripetere il passaggio due per creare un nodo manager in un'altra istanza EC2.
Se non hai più il tuo token di unione, puoi eseguire il comando seguente nel nodo manager e visualizzare il token di unione.
sudo docker swarm join-token worker
6. Quindi, esegui il seguente docker service
comando per creare il servizio gestito nel Docker Swarm. Distribuirai una semplice immagine NGINX in questo tutorial.
Il docker service
il comando seguente esegue le seguenti operazioni:
- Crea un servizio chiamato (
--name
)nginx-service
, ma qualsiasi nome funzionerà. - Dichiara il numero di
--replicas
della tua applicazione/contenitore che desideri. In questo caso, il valore delle repliche è impostato su tre (3
). Le repliche forniscono un'elevata disponibilità dell'applicazione, eliminando i tempi di inattività. Docker condivide le repliche tra i tre nodi disponibili durante la creazione di repliche per il servizio. - Dichiara la porta (
-p 80:80
), quindi indica il nome dell'immagine da utilizzare (nginx:latest
).
sudo docker service create --name nginx-service --replicas 3 -p 80:80 nginx:latest
7. Eseguire il comando seguente per confermare il servizio (servizio nginx) creato in precedenza (passaggio sei).
sudo docker service ls
8. Ora passa a ciascun nodo ed esegui il comando seguente per elencare i contenitori disponibili.
sudo docker ps
Vedrai una replica del contenitore che hai creato per ogni nodo, come mostrato di seguito.
9. Infine, ottieni gli indirizzi IP per ciascuna delle istanze EC2 e naviga su di esse sul tuo browser web preferito.
Allo stesso modo, di seguito puoi verificare che ogni istanza contenga una replica della tua applicazione.
Distribuzione e ridimensionamento di un'applicazione con più servizi
Hai eseguito la distribuzione di un singolo servizio, ma come distribuiresti un'applicazione con più servizi? Docker Swarm può anche portare a termine il lavoro. Utilizzerai il stack deploy
comando, che utilizza le istruzioni indicate in un file YAML che creerai.
1. Apri il nodo manager e crea un file YAML nel tuo editor di testo preferito. Puoi nominare il file in modo diverso, ma per questa demo il file si chiama nome-file.yml .
Compila il nome-file.yml file con il codice seguente, che crea due servizi utilizzando le immagini NGINX e Ubuntu.
version: '3.3' # version of compose file
services:
service1:
image: 'nginx:latest' # latest version of NGINX image on Docker hub
ports:
- '8000:8080'
service2:
image: 'ubuntu' # Ubuntu image on docker hub
2. Quindi, esegui la docker stack
comando di seguito per deploy
i servizi creati dal file-name.yml
file su Docker Swarm. Il new-stack
parametro è arbitrario, che nomina lo stack creato dal comando per i servizi.
sudo docker stack deploy -c file-name.yml new-stack
3. Eseguire il comando seguente per elencare i servizi disponibili e annotare il nome del servizio desiderato.
sudo docker service ls
4. Ora esegui il comando seguente per creare repliche per il tuo stack. Quattro (4
) repliche per l'esattezza per questa demo. Il nodo manager assegnerà quali nodi conterranno le repliche.
L'applicazione precedentemente distribuita su Docker Swarm (passaggio due) ha una sola replica gestita dal nodo di gestione. Per ridimensionare un servizio, crei quattro repliche di quel servizio. Poiché hai solo tre nodi, un nodo gestirà due repliche, mentre il resto dei nodi ne gestirà una ciascuno.
Puoi anche ridurre un servizio riducendo il numero di repliche.
sudo docker service scale new-stack_service1=4
5. Infine, esegui il comando docker service riportato di seguito per vedere tutti i container che attualmente gestiscono le repliche di new-stack_service1
servizio.
sudo docker service ps new-stack_service1
Nell'immagine seguente, nota che un nodo gestisce due repliche.
Aggiornamento del servizio in Swarm
Hai già imparato come distribuire i servizi, ma sai che è possibile aggiornare i servizi? Forse vuoi testare una versione precedente di un servizio. In tal caso, utilizzerai l'update
tag e --image
flag per indicare la versione del servizio che desideri, quindi indica il nome del servizio da aggiornare.
1. Eseguire il comando seguente per controllare i dettagli del servizio attualmente in esecuzione.
sudo docker service inspect --pretty nginx-service
Di seguito, puoi vedere che NGINX è in esecuzione sull'ultimo versione.
2. Ora, esegui il comando seguente se preferisci modificare/aggiornare a una versione diversa di NGINX nel servizio attualmente in esecuzione (nginx-service
) per il test. Assicurati di sostituire nginx:1.20
con la tua versione preferita.
sudo docker service update --image nginx:1.20 nginx-service
3. Infine, esegui nuovamente il comando seguente come hai fatto in precedenza (passaggio uno) per ispezionare i dettagli del servizio in esecuzione.
sudo docker service inspect --pretty nginx-service
Si noti di seguito che il servizio in esecuzione è stato aggiornato correttamente.
Aggiornamento della disponibilità dei nodi
Potresti voler lavorare su un particolare nodo di lavoro per, magari, apportare alcune modifiche al contenitore, ma vuoi che la tua applicazione sia attiva. Come? Mentre lavori su quel nodo, drain
quel nodo, quindi non riceve alcuna attività dal nodo gestore.
Accanto allo drain
comando, devi aggiungere il update
tag e --availability
flag per alterare la disponibilità di un particolare nodo.
1. Esegui il docker node
comando seguente per elencare i nodi disponibili e annotare l'ID del nodo di destinazione.
sudo docker node ls
2. Quindi, esegui il comando seguente per modificare il --availability
del nodo drenando (drain
). Sostituisci kseh5660n8xb3i2ojidzx0x13
con l'ID del nodo di destinazione che hai annotato nel passaggio uno.
sudo docker node update --availability drain kseh5660n8xb3i2ojidzx0x13
3. Infine, riesegui la docker
comando di seguito come hai fatto nel passaggio uno per elencare i nodi disponibili. sudo docker node ls
sudo docker node ls
Di seguito, puoi vedere che la disponibilità del nodo selezionato è cambiata (Scarico ), in modo che il nodo non partecipi alle attività in corso nello sciame.
Conclusione
In questo tutorial hai imparato a sfruttare l'orchestrazione dei container con Docker Swarm. Hai acquisito conoscenze fondamentali sulla scalabilità di un'applicazione con più servizi e sull'esecuzione di operazioni quando lavori con Docker Swarm.
A questo punto, sai già come gestire il tuo container Docker e i servizi in Docker Swarm. Quindi, come pensi di incorporare questa nuova conoscenza nelle tue future orchestrazioni di container? Forse inizi a distribuire le applicazioni Django con Docker Swarm?