Docker: Orquestração de containers com o Docker Swarm: Difference between revisions

From Wiki
Line 17: Line 17:
* '''workers''' = onde os containers são executados
* '''workers''' = onde os containers são executados


Este exemplo consiste em um node '''manager''' e dois nodes '''workers'''. Os managers manipulam comandos e gerenciam o estado do swarm. Os workers não podem manipular comandos e são simplesmente usados para executar contêineres em escala. Por padrão, os managers também são usados para executar contêineres.


=Passos=
=Passos=
Line 32: Line 34:
  [node1] (local) [email protected] ~$ '''docker swarm init --advertise-addr eth0'''
  [node1] (local) [email protected] ~$ '''docker swarm init --advertise-addr eth0'''


  <small>Resultado:
Resultado:
  <small>
  Swarm initialized: current node (zn2ljc47iah166z7mbjmx4o1h) is now a manager.
  Swarm initialized: current node (zn2ljc47iah166z7mbjmx4o1h) is now a manager.
   
   
Line 46: Line 49:
  [node2] (local) [email protected] ~$ '''docker swarm join --token SWMTKN-1-60gbmmu7ec4h1...ia451aepqz 192.168.0.38:2377'''
  [node2] (local) [email protected] ~$ '''docker swarm join --token SWMTKN-1-60gbmmu7ec4h1...ia451aepqz 192.168.0.38:2377'''


  <small>Resultado:    
Resultado:
  <small>   
  This node joined a swarm as a worker.
  This node joined a swarm as a worker.
</small>
</small>
Line 56: Line 60:
==== Listando os Nodes ====
==== Listando os Nodes ====


[node1] (local) [email protected] ~$ '''docker node ls'''
Executar no node1


   <small>Resultado: 
'''docker node ls'''
 
Resultado:
   <small>
  ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
  ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
  zn2ljc47iah166z7mbjmx4o1h *  node1              Ready              Active              Leader              18.03.1-ce
  zn2ljc47iah166z7mbjmx4o1h *  node1              Ready              Active              Leader              18.03.1-ce
Line 66: Line 73:


==Implante seu primeiro serviço==
==Implante seu primeiro serviço==
==== Criando o primeiro serviço ====
Executar no '''node1'''
docker service create -d true --name nginx1 --p 80:80 --mount source=/etc/hostname,target=/usr/share/nginx/html/index.html,type=bind,ro nginx:1.12
Este comando é declarativo. o Docker Swarm tentará manter o estado declarado neste comando, a menos que seja explicitamente alterado por outro
comando de service do docker. Esse comportamento é útil quando os nodes ficam inativos, por exemplo, e os contêineres são reprogramados automaticamente em outros nodes.
==== Listando os serviços ====
docker service ls
Resultado:
<small>ID                  NAME                MODE                REPLICAS            IMAGE              PORTS
c87phpl7nerz        competent_mccarthy  replicated          0/1                true:latest
5s2z3gq9107b        nginx1              replicated          1/1                nginx:1.12          *:80->80/tcp
jua95ifymrdz        trusting_morse      replicated          0/1                true:latest
</small>
Este comando lista os 3 nodes do swarm. O asterisco (*) ao lado do ID do node representa o node que manipulou esse comando específico (docker node é neste caso).
docker service ps nginx1
Resultado:
<small>
ID                  NAME                IMAGE              NODE                DESIRED STATE      CURRENT STATE            ERROR        PORTS
g4ozhxmyokf5        nginx1.1            nginx:1.12          node1              Running            Running 5 minutes ago
8if9h0qg4sew        \_ nginx1.1        nginx:1.12          node1              Shutdown            Complete 5 minutes ago
</small>
==== Testando o nginx rodando no container ====
Execute o comando '''curl localhost:80''', o resultado será o hostname do node onde o container está sendo executado:
node1
==Escale seu serviço==
==Escale seu serviço==
==Aplicar atualizações contínuas==
==Aplicar atualizações contínuas==
==Reconciliar problemas com contêineres==
==Reconciliar problemas com contêineres==

Revision as of 01:21, 27 September 2018

Visão geral da orquestração de contêiner

Quando executamos contêineres em produção temos que nos preocupar como:

  • schedular os serviços em nós distribuídos,
  • alta disponibilidade,
  • implementar a reconciliação,
  • o dimensionamento do ambiente
  • o registro em log.

Neste artigo, vou a ferramenta de orquestração que vem incorporada ao Docker Engine, o Docker Swarm, para resolver alguns desses problemas.

Pontos importantes:

  • manager = gerencia os nodes e containers
  • workers = onde os containers são executados


Este exemplo consiste em um node manager e dois nodes workers. Os managers manipulam comandos e gerenciam o estado do swarm. Os workers não podem manipular comandos e são simplesmente usados para executar contêineres em escala. Por padrão, os managers também são usados para executar contêineres.

Passos

Crie seu primeiro swarm

Para facilitar o entendimento vou usar o https://labs.play-with-docker.com, faça o Login/Sign.

Vou criar 1 node de manager e 2 de workers.

Clique 3 vezes no botão +Add Instance, para criar 3 nodes.

Criando o Manager

[node1] (local) [email protected] ~$ docker swarm init --advertise-addr eth0

Resultado:


Swarm initialized: current node (zn2ljc47iah166z7mbjmx4o1h) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-60gbmmu7ec4h1...ia451aepqz 192.168.0.38:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Criando o Worker no Node 2

[node2] (local) [email protected] ~$ docker swarm join --token SWMTKN-1-60gbmmu7ec4h1...ia451aepqz 192.168.0.38:2377

Resultado:

   
This node joined a swarm as a worker.

Criando o Worker no Node 3

[node3] (local) [email protected] ~$ docker swarm join --token SWMTKN-1-60gbmmu7ec4h1...ia451aepqz 192.168.0.38:2377

Listando os Nodes

Executar no node1

docker node ls

Resultado:

   
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
zn2ljc47iah166z7mbjmx4o1h *   node1               Ready               Active              Leader              18.03.1-ce
lchy7h37gybh01uaoifcf2tk1     node2               Ready               Active                                  18.03.1-ce6dfxgdw04f
t40kelfin697kdjf96lh4n0f2     node3               Ready               Active                                  18.03.1-ceeoektffd94

Implante seu primeiro serviço

Criando o primeiro serviço

Executar no node1

docker service create -d true --name nginx1 --p 80:80 --mount source=/etc/hostname,target=/usr/share/nginx/html/index.html,type=bind,ro nginx:1.12

Este comando é declarativo. o Docker Swarm tentará manter o estado declarado neste comando, a menos que seja explicitamente alterado por outro comando de service do docker. Esse comportamento é útil quando os nodes ficam inativos, por exemplo, e os contêineres são reprogramados automaticamente em outros nodes.

Listando os serviços

docker service ls

Resultado: ID NAME MODE REPLICAS IMAGE PORTS c87phpl7nerz competent_mccarthy replicated 0/1 true:latest 5s2z3gq9107b nginx1 replicated 1/1 nginx:1.12 *:80->80/tcp jua95ifymrdz trusting_morse replicated 0/1 true:latest

Este comando lista os 3 nodes do swarm. O asterisco (*) ao lado do ID do node representa o node que manipulou esse comando específico (docker node é neste caso).

docker service ps nginx1

Resultado:


ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR         PORTS
g4ozhxmyokf5        nginx1.1            nginx:1.12          node1               Running             Running 5 minutes ago
8if9h0qg4sew         \_ nginx1.1        nginx:1.12          node1               Shutdown            Complete 5 minutes ago

Testando o nginx rodando no container

Execute o comando curl localhost:80, o resultado será o hostname do node onde o container está sendo executado:

node1

Escale seu serviço

Aplicar atualizações contínuas

Reconciliar problemas com contêineres

Determine quantos nós você precisa

Ver também