Nel primo articolo, "Creazione di un cluster Docker Swarm nel servizio contenitore di Azure", abbiamo discusso della creazione di un cluster Docker Swarm nel servizio contenitore di Azure (ACS). Ogni macchina virtuale (master o agente) ha Docker in esecuzione quando viene creato lo Swarm. In questo articolo di continuazione, discuteremo dell'uso di Docker nello Swarm creato nel servizio Azure Container. Discuteremo l'utilizzo sia di Docker standalone che di un servizio in modalità Docker Swarm. Questo articolo ha le seguenti sezioni:
- Impostazione dell'ambiente
- Elenco informazioni Docker
- Esecuzione di un'immagine Docker di Hello World
- Esecuzione di un'immagine Docker Nginx
- Elenco dei contenitori Docker
- Accesso a Nginx Docker Container in un browser
- Rimozione di un contenitore Docker
- Inizializzazione della modalità Sciame Docker
- Creazione di un servizio Docker
- Elenco dei servizi Docker
- Elenco delle attività del servizio Docker
- Elenco dei container Docker per il servizio Docker
- Esplorazione dei log generati da un contenitore di servizi Docker
- Conclusione
Impostazione dell'ambiente
Usare lo stesso ambiente del primo articolo, "Creazione di un cluster Docker Swarm nel servizio Azure Container". Crea un cluster Swarm su ACS, come discusso nell'articolo. In questo articolo utilizzeremo il cluster Swarm composto da tre nodi master e un nodo agente per eseguire un container Docker autonomo e un servizio in modalità Docker Swarm.
Elenco delle informazioni sulla finestra mobile
Avvia Cloud Shell come illustrato nell'articolo "Creazione di un cluster Docker Swarm nel servizio Azure Container". Connettiti a una VM master Swarm utilizzando una chiave privata RSA SSH, un nome utente e un indirizzo IP pubblico del master, come discusso anche nell'articolo precedente. Il comando SSH per connettersi alla VM master è il seguente; la chiave privata SSH RSA, il nome utente e l'indirizzo IP pubblico sarebbero diversi per utenti diversi.
ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected]
Viene stabilita una connessione e viene visualizzato un prompt dei comandi per la VM master.
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected] Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-65-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Tue Oct 10 22:40:17 UTC 2017 System load: 0.27 Processes: 131 Usage of /: 4.2% of 28.80GB Users logged in: 0 Memory usage: 2% IP address for eth0: 172.16.0.5 Swap usage: 0% IP address for docker0: 172.17.0.1 Graph this data and manage this system at: https://landscape.canonical.com/ Get Cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud New release '16.04.3 LTS' available. Run 'do-release-upgrade' to upgrade to it. Last login: Tue Oct 10 22:40:17 2017 from 40.78.30.37
Tre nodi master sono stati configurati nello Swarm fornito nell'articolo "Creazione di un cluster Docker Swarm nel servizio Azure Container". Il numero di VM master può essere 1, 3 o 5. Quando si eseguono più VM master, il comando SSH per connettersi a ciascuna delle VM master è lo stesso ad eccezione della porta SSH, che è 2200 per 1 master, 2201 per il 2 master, 2202 per il 3 master, 2203 per il 4 master e 2204 per il 5 master. Con tre VM master, le porte SSH utilizzate sono 2200, 2201 e 2202. Per connettersi a un 2 master, il comando SSH è il seguente:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2201 [email protected]
E il comando SSH per connettersi al 2 master è il seguente:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2202 [email protected]
Il demone Docker è in esecuzione a 172.16.0.5:2375 . Per visualizzare le informazioni a livello di sistema, esegui info docker comando. Viene elencato l'output (parziale) del comando:
[email protected]:~$ docker -H 172.16.0.5:2375 info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Role: primary Strategy: spread Nodes: 1 swarm-agent-D50F2361000001: 10.0.0.5:2375 Is Manager: false Kernel Version: 3.19.0-65-generic Operating System: linux Architecture: amd64 CPUs: 2 Total Memory: 7.145GiB
Esecuzione di un'immagine Docker di Hello World
Ciascuna delle macchine virtuali in uno Swarm ACS è un host Docker e un container Docker autonomo può essere eseguito su qualsiasi macchina virtuale Swarm. Ad esempio, esegui l'immagine Docker "hello-world" su una macchina virtuale master.
[email protected]:~$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 5b0f327be733: Pull complete Digest: sha256:b2ba691d8aac9e5ac3644c0788e3d3823f9e97f757f01d2 ddc6eb5458df9d801 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/ [email protected]:~$
L'immagine Docker ciao-mondo è in esecuzione sulla macchina virtuale Swarm master e non su Swarm. La VM master è solo una delle VM nello Swarm. Docker Swarm sta ascoltando l'endpoint 172.16.0.5:2375. Per eseguire i container Docker sullo Swarm, è necessario fornire l'endpoint Swarm, come discuteremo nella prossima sezione. Quando un container Docker viene eseguito su uno Swarm, il master Swarm assegna un agente Swarm su cui eseguire il container Docker.
Esecuzione di un'immagine Docker Nginx
Il ciao-mondo L'immagine Docker utilizzata nella sezione precedente è un'immagine Docker molto semplice con poca Dockerizzazione e genera solo un messaggio. In questa sezione, eseguiremo un container autonomo con l'immagine Docker nginx per un server Nginx. Il comando seguente crea un contenitore Docker chiamato hello-nginx ed espone la porta 80 sull'host.
docker run --name hello-nginx -d -p 80:80 nginx
L'output dalla esecuzione della finestra mobile il comando è elencato:
[email protected]:~$ docker run --name hello-nginx -d -p 80:80 nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx bc95e04b23c0: Pull complete 110767c6efff: Pull complete f081e0c4df75: Pull complete Digest: sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee 6e65a03465392072 Status: Downloaded newer image for nginx:latest b3679edba090ff41482f3754b4d852d295985b501f6fa2a08b46c04bd0014c2e
La precedente esecuzione della finestra mobile Il comando esegue un container Docker nella macchina virtuale Swarm master. La esecuzione della finestra mobile il comando può essere eseguito su Swarm fornendo l'IP e la porta dell'endpoint Swarm come segue:
[email protected]:~$ docker -H 172.16.0.5:2375 run --name hello-nginx -d -p 80:80 nginx ddcbc335988f7b5dba762b436bfde4c22d01144d67313813ba140a5391bac8df
Elenco dei contenitori Docker
Elenca i contenitori Docker su una macchina virtuale master con docker ps comando. Il ciao-nginx Il contenitore Docker viene elencato. Quando viene creato uno Swarm, viene creato un container Swarm manager, che non è creato dall'utente ma è un container di sistema.
Nota del redattore: Tieni presente che molti dei seguenti elenchi di codici sono troppo ampi per essere visualizzati correttamente. Scorri la casella del codice verso destra per vedere l'intero elenco. |
[email protected]:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3679edba090 nginx "nginx -g 'daemon..." 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp hello-nginx f82ebb6efa4f swarm:1.1.0 "/swarm manage --r..." 5 minutes ago Up 3 minutes 0.0.0.0:2375->2375/tcp containers_swarm_1
I contenitori Docker nell'endpoint Swarm possono essere elencati come segue:
[email protected]:~$ docker -H 172.16.0.5:2375 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ddcbc335988f nginx "nginx -g 'daemon..." 36 seconds ago Up 35 seconds 10.0.0.5:80->80/tcp swarm-agent-D50F2361000001/hello-nginx
Il contenitore Docker è in esecuzione su un agente Swarm come indicato dal nome del contenitore Docker swarm-agent-D50F2361000001/hello-nginx .
Accesso al contenitore Docker Nginx in un browser
Come discusso in precedenza, quando un container Docker viene eseguito sullo Swarm utilizzando l'endpoint Swarm, il master Swarm pianifica il container su uno degli agenti Swarm nello Swarm. Per accedere al server Nginx in esecuzione nel contenitore Docker sull'endpoint Swarm, è necessario utilizzare l'IP pubblico dell'agente Swarm. Lo sciame che abbiamo usato ha un solo agente dello sciame. L'IP pubblico dell'agente Swarm può essere ottenuto dall'elenco Risorse, come mostrato nella Figura 1.
Figura 1: Indirizzo IP pubblico dell'agente Swarm
In alternativa, fai clic sul bilanciamento del carico dell'agente Swarm in Risorse , come mostrato nella Figura 2.
Figura 2: Bilanciatore del carico dell'agente dello sciame
Nella pagina dei dettagli dell'agente Swarm ottieni l'indirizzo IP (vedi Figura 3).
Figura 3: Indirizzo IP dell'agente Swarm
L'indirizzo IP può essere ottenuto anche dalla pagina dei dettagli del servizio di bilanciamento del carico dell'agente Swarm, come mostrato nella Figura 4.
Figura 4: IP pubblico dell'agente Swarm nella pagina Load Balancer
In un browser su una macchina locale, vai all'indirizzo IP pubblico dell'agente Swarm. Viene visualizzata la pagina di benvenuto del server Nginx, come mostrato nella Figura 5.
Figura 5: Invocare il server Nginx in un browser
Rimozione di un contenitore Docker
Per rimuovere un contenitore Docker, esegui docker rm comando. Non è possibile rimuovere un container Docker in esecuzione. Innanzitutto, arresta il contenitore Docker hello-nginx in esecuzione sullo Sciame.
[email protected]:~$ docker -H 172.16.0.5:2375 stop hello-nginx hello-nginx
Successivamente, il contenitore fermo può essere rimosso con docker rm .
[email protected]:~$ docker -H 172.16.0.5:2375 rm hello-nginx hello-nginx
Inizializzazione della modalità Sciame Docker
Come discusso in precedenza, lo swarm del servizio contenitore di Azure non ha la modalità swarm abilitata per impostazione predefinita. La modalità Swarm deve essere inizializzata con docker swarm init comando.
[email protected]:~$ docker swarm init --advertise-addr 52.176.1.213 Swarm initialized: current node (ia4uj7431stu8y0j5h2yvdp27) is now a manager.
Per aggiungere un lavoratore a questo swarm, esegui il comando seguente:
docker swarm join --token SWMTKN-1-5ksj7uqccgv1vnnmie09qmt191ldpupof4ihg4vhm083c20xsh -6uyq5653uo62e521bcoatzyyz52.176.1.213:2377
Per aggiungere un manager a questo swarm, esegui 'gestore token di unione di docker swarm' e segui le istruzioni.
Elenca i nodi della modalità Swarm con il nodo mobile ls comando. Viene elencato il nodo di gestione dello sciame.
[email protected]:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ia4uj7431stu8y0j5h2yvdp27 * swarm-master-D50F2361-0 Ready Active Leader
Creazione di un servizio Docker
Dopo aver inizializzato la modalità Docker Swarm, creare un servizio Docker con il servizio Docker create comando. Ad esempio, crea un servizio Docker composto da due repliche utilizzando l'immagine Docker alpine e ping docker.com.
[email protected]:~$ docker service create --replicas 2 --name helloworld alpine ping docker.com tg1ywqiyei3jw9prco6890ol1
Come altro esempio, crea un servizio Docker con l'immagine Docker tutum/hello-world ed esporre il servizio sull'host sulla porta 8080.
[email protected]:~$ docker service create > --name hello-world > --publish 8080:80 > --replicas 2 > tutum/hello-world 3e38c1595cddg0ckmoyasrnnu
Elenco dei servizi Docker
Elenca i servizi Docker con il servizio Docker ls comando. Vengono elencati i due servizi creati nella sezione precedente.
[email protected]:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS 3e38c1595cdd hello-world replicated 2/2 tutum/hello-world:latest *:8080->80/tcp tg1ywqiyei3j helloworld replicated 2/2 alpine:latest
Elenco delle attività del servizio Docker
Elenca le attività del servizio Docker per helloworld servizio basato sull'immagine Docker alpino .
[email protected]:~$ docker service ps helloworld ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 0mal82mskbge helloworld.1 alpine:latest swarm-master-D50F2361-0 Running Running 33 seconds ago iqz0bqkldxs2 helloworld.2 alpine:latest swarm-master-D50F2361-0 Running Running 32 seconds ago
Elenca le attività del servizio Docker per hello-world servizio basato sul tutum/hello-world Immagine Docker.
[email protected]:~$ docker service ps hello-world ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS yok48ja4o835 hello-world.1 tutum/hello-world:latest swarm-master-D50F2361-0 Running Running 38 seconds ago x5tvcuglwzd0 hello-world.2 tutum/hello-world:latest swarm-master-D50F2361-0 Running Running 38 seconds ago
Elenco dei container Docker per il servizio Docker
I contenitori Docker per un servizio Docker su un host Docker nello Swarm possono essere elencati con docker ps comando.
[email protected]:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b6b069102300 tutum/hello-world:latest "/bin/sh -c 'php-f..." 6 minutes ago Up 6 minutes 80/tcp hello-world.2.x5tvcuglwzd05olktbf3tpfqe 62e26d4bc0ff tutum/hello-world:latest "/bin/sh -c 'php-f..." 6 minutes ago Up 6 minutes 80/tcp hello-world.1.yok48ja4o835nc7cog8hhjlr7 db4827da350b alpine:latest "pingdocker.com" 7 minutes ago Up 7 minutes helloworld.2.iqz0bqkldxs2sg8ny50je7e7y 92dab9f7ae97 alpine:latest "pingdocker.com" 7 minutes ago Up 7 minutes helloworld.1.0mal82mskbgecbcwh3op18nrr
Contenitori Docker per hello-world e helloworld i servizi vengono elencati.
Esplorazione dei log generati da un contenitore di servizi Docker
I log generati, se presenti, in un contenitore Docker per un servizio Docker possono essere elencati con i registri docker comando. Ad esempio, ottieni l'ID contenitore per un servizio basato su immagini alpine ed elenca i log:
[email protected]:~$ docker logs db4827da350b PING docker.com (34.201.187.190): 56 data bytes
Come indica l'output, viene eseguito il ping del dominio docker.com e vengono scambiati 56 byte di dati.
Conclusione
In questo articolo è stato discusso l'uso di Docker in un cluster Docker Swarm nel servizio contenitore di Azure. Abbiamo utilizzato container Docker autonomi e servizi Docker su Swarm. Un cluster Swarm su ACS espone un endpoint Swarm per eseguire un container Docker autonomo. Quando i container Docker vengono eseguiti sull'endpoint Swarm, Swarm esegue container Docker autonomi sugli agenti Swarm. La modalità Swarm non è abilitata per impostazione predefinita e deve essere inizializzata su una VM Swarm master.