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.