Database
 sql >> Base de Dados >  >> RDS >> Database

Usando o Docker no Azure Container Service com Swarm Cluster


No primeiro artigo, “Criando um cluster Docker Swarm no Azure Container Service”, discutimos a criação de um cluster Docker Swarm no Azure Container Service (ACS). Cada máquina virtual (mestre ou agente) tem o Docker em execução quando o Swarm é criado. Neste artigo de continuação, discutiremos o uso do Docker no Swarm criado no Serviço de Contêiner do Azure. Discutiremos o uso do Docker autônomo e de um serviço de modo Docker Swarm. Este artigo tem as seguintes seções:
  • Definindo o ambiente
  • Como listar informações do Docker
  • Executando uma imagem do Docker Hello World
  • Executando uma imagem do Docker Nginx
  • Como listar contêineres do Docker
  • Acessando o contêiner Nginx Docker em um navegador
  • Removendo um contêiner do Docker
  • Inicializando o modo Docker Swarm
  • Criando um serviço do Docker
  • Como listar serviços do Docker
  • Como listar tarefas de serviço do Docker
  • Como listar contêineres do Docker para o serviço Docker
  • Explorando registros gerados por um contêiner de serviço do Docker
  • Conclusão

Definindo o ambiente


Use o mesmo ambiente do primeiro artigo, “Criando um Docker Swarm Cluster no Serviço de Contêiner do Azure”. Crie um cluster Swarm no ACS, conforme discutido no artigo. Neste artigo, usaremos o cluster Swarm que consiste em três nós mestres e um nó de agente para executar um contêiner Docker autônomo e um serviço de modo Docker Swarm.

Como listar informações do Docker


Inicie o Cloud Shell conforme discutido no artigo “Criando um cluster do Docker Swarm no Azure Container Service”. Conecte-se a uma VM mestre do Swarm usando uma chave privada SSH RSA, nome de usuário e endereço IP público do mestre, conforme discutido no artigo anterior também. O comando SSH para se conectar à VM mestre é o seguinte; a chave privada SSH RSA, o nome de usuário e o endereço IP público seriam diferentes para usuários diferentes.
ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected]

Uma conexão é estabelecida e um prompt de comando para a VM mestre é exibido.
[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

Três nós mestres foram configurados no Swarm provisionado no artigo “Criando um cluster do Docker Swarm no Serviço de Contêiner do Azure”. O número de VMs mestres pode ser 1, 3 ou 5. Ao executar várias VMs mestres, o comando SSH para se conectar a cada uma das VMs mestres é o mesmo, exceto para a porta SSH, que é 2200 para 1 mestre, 2201 para o 2 master, 2202 para o 3 master, 2203 para o 4 master e 2204 para o 5 master. Com três VMs mestres, as portas SSH usadas são 2200, 2201 e 2202. Para se conectar a um mestre 2, o comando SSH é o seguinte:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa
   -p 2201 [email protected]

E, o comando SSH para conectar ao 2 master é o seguinte:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa
   -p 2202 [email protected]

O daemon do Docker está sendo executado em 172.16.0.5:2375 . Para exibir informações de todo o sistema, execute as informações do docker comando. A saída (parcial) do comando é listada:
[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

Executando uma imagem do Docker Hello World


Cada uma das máquinas virtuais em um ACS Swarm é um host do Docker e um contêiner autônomo do Docker pode ser executado em qualquer uma das VMs do Swarm. Como exemplo, execute a imagem do Docker “hello-world” em uma VM mestre.
[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]:~$

A imagem do Docker hello-world está sendo executado na VM mestre do Swarm e não no Swarm. A VM mestre é apenas uma das VMs do Swarm. O Docker Swarm está escutando o endpoint 172.16.0.5:2375. Para executar contêineres do Docker no Swarm, o endpoint do Swarm deve ser fornecido, conforme discutiremos na próxima seção. Quando um contêiner do Docker é executado em um Swarm, o mestre do Swarm atribui um agente do Swarm para executar o contêiner do Docker.

Executando uma imagem do Docker Nginx


O olá-mundo A imagem do Docker usada na seção anterior é uma imagem do Docker muito básica sem muita Dockerização e apenas gera uma mensagem. Nesta seção, executaremos um contêiner autônomo com a imagem do Docker nginx para um servidor Nginx. O comando a seguir cria um contêiner do Docker chamado hello-nginx e expõe a porta 80 no host.
docker   run --name hello-nginx -d -p 80:80 nginx

A saída da execução do docker comando está listado:
[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

A execução do docker anterior O comando executa um contêiner do Docker na VM mestre do Swarm. A execução do docker O comando pode ser executado no Swarm fornecendo o IP e a porta do endpoint Swarm da seguinte forma:
[email protected]:~$ docker -H 172.16.0.5:2375 run
  --name hello-nginx -d -p 80:80 nginx
ddcbc335988f7b5dba762b436bfde4c22d01144d67313813ba140a5391bac8df

Como listar contêineres do Docker


Liste os contêineres do Docker em uma VM mestre com o docker ps comando. O olá-nginx O contêiner do Docker é listado. Um contêiner do gerenciador de Swarm, que não é criado pelo usuário, mas é um contêiner do sistema, é criado quando um Swarm é criado.
Nota do editor: Observe que muitas das listagens de código a seguir são muito amplas para serem exibidas corretamente. Role a caixa de código para a direita para ver a listagem inteira.
[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

Os contêineres do Docker no endpoint do Swarm podem ser listados da seguinte maneira:
[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

O contêiner Docker está sendo executado em um agente Swarm, conforme indicado pelo nome do contêiner Docker swarm-agent-D50F2361000001/hello-nginx .

Acessando o contêiner Nginx Docker em um navegador


Conforme discutido anteriormente, quando um contêiner do Docker é executado no Swarm usando o endpoint do Swarm, o mestre do Swarm agenda o contêiner em um dos agentes do Swarm no Swarm. Para acessar o servidor Nginx em execução no contêiner Docker no endpoint Swarm, o IP público do agente Swarm deve ser usado. O Swarm que usamos tem apenas um agente Swarm. O IP Público do agente Swarm pode ser obtido na listagem de Recursos, conforme mostrado na Figura 1.


Figura 1: Endereço IP público do agente Swarm

Como alternativa, clique no balanceador de carga do agente Swarm em Recursos , como mostrado na Figura 2.


Figura 2: Balanceador de carga do agente Swarm

Na página de detalhes do agente Swarm, obtenha o endereço IP (consulte a Figura 3).


Figura 3: Endereço IP do Agente Swarm

O endereço IP também pode ser obtido na página de detalhes do balanceador de carga do agente Swarm, conforme mostrado na Figura 4.


Figura 4: IP público do agente de enxame na página do balanceador de carga

Em um navegador em uma máquina local, navegue até o endereço IP público do agente Swarm. A página de boas-vindas do servidor Nginx é exibida, conforme mostrado na Figura 5.


Figura 5: Invocando o servidor Nginx em um navegador

Removendo um contêiner do Docker


Para remover um contêiner do Docker, execute o docker rm comando. Um contêiner do Docker em execução não pode ser removido. Primeiro, pare o contêiner do Docker hello-nginx correndo no enxame.
[email protected]:~$ docker -H 172.16.0.5:2375
   stop hello-nginx
hello-nginx

Subsequentemente, o container parado pode ser removido com docker rm .
[email protected]:~$ docker -H 172.16.0.5:2375
   rm hello-nginx
hello-nginx

Inicializando o modo Docker Swarm


Conforme discutido anteriormente, o Azure Container Service Swarm não tem o modo Swarm habilitado por padrão. O modo Swarm deve ser inicializado com o docker swarm init comando.
[email protected]:~$ docker swarm init
   --advertise-addr 52.176.1.213
Swarm initialized: current node (ia4uj7431stu8y0j5h2yvdp27) is
   now a manager.

Para adicionar um trabalhador a esse enxame, execute o seguinte comando:
docker swarm join --token
SWMTKN-1-5ksj7uqccgv1vnnmie09qmt191ldpupof4ihg4vhm083c20xsh
   -6uyq5653uo62e521bcoatzyyz52.176.1.213:2377

Para adicionar um gerente a este swarm, execute 'docker swarm join-token manager' e siga as instruções.

Liste os nós do modo Swarm com o nodo docker ls comando. O nó do gerenciador Swarm é listado.
[email protected]:~$ docker node ls
ID                           HOSTNAME                 STATUS   AVAILABILITY   MANAGER STATUS
ia4uj7431stu8y0j5h2yvdp27 *  swarm-master-D50F2361-0  Ready    Active         Leader

Criando um serviço Docker


Tendo inicializado o modo Docker Swarm, crie um serviço Docker com o docker service create comando. Como exemplo, crie um serviço do Docker composto por duas réplicas usando a imagem do Docker alpine e pingdocker. com.
[email protected]:~$ docker service create
--replicas 2 --name helloworld alpine ping docker.com
tg1ywqiyei3jw9prco6890ol1

Como outro exemplo, crie um serviço do Docker com a imagem do Docker tutum/hello-world e expor o serviço no host na porta 8080.
[email protected]:~$ docker service create 
>     --name hello-world 
>     --publish 8080:80 
>     --replicas 2 
>     tutum/hello-world
3e38c1595cddg0ckmoyasrnnu

Como listar serviços do Docker


Liste os serviços do Docker com o docker service ls comando. Os dois serviços criados na seção anterior são listados.
[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

Como listar tarefas de serviço do Docker


Liste as tarefas de serviço do Docker para o helloworld serviço baseado na imagem do Docker alpine .
[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

Liste as tarefas de serviço do Docker para o hello-world serviço baseado no tutum/hello-world Imagem do 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

Como listar contêineres do Docker para o serviço Docker


Os contêineres do Docker para um serviço do Docker em um host do Docker no Swarm podem ser listados com o 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

Contêineres do Docker para o hello-world e olá mundo serviços são listados.

Explorando registros gerados por um contêiner de serviço do Docker


Os logs gerados, se houver, em um contêiner do Docker para um serviço do Docker podem ser listados com os docker logs comando. Como exemplo, obtenha o ID do contêiner para um serviço baseado em imagem alpino e liste os logs:
[email protected]:~$ docker logs db4827da350b
PING docker.com (34.201.187.190): 56 data bytes

Como a saída indica, o domínio docker.com recebe ping e 56 bytes de dados são trocados.

Conclusão


Neste artigo, discutimos o uso do Docker em um cluster Docker Swarm no Azure Container Service. Usamos contêineres autônomos do Docker e serviços do Docker no Swarm. Um cluster Swarm no ACS expõe um endpoint Swarm para executar um contêiner Docker autônomo. Quando os contêineres do Docker são executados no endpoint do Swarm, o Swarm executa contêineres autônomos do Docker nos agentes do Swarm. O modo Swarm não está habilitado por padrão e deve ser inicializado em uma VM mestre Swarm.