Database
 sql >> Database >  >> RDS >> Database

Utilizzo di Docker nel servizio Azure Container con Swarm Cluster

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.