Docker Swarm

posted in: Soluções | 4

Oi Pessoal,

Hoje queremos trazer para vocês mais uma das ferramentas que o Docker disponibiliza em seu ecossistema, chegou a hora de conhecermos o Docker Swarm. O Docker Swarm é uma ferramenta nativa do Docker que permite a criação de clusters de Docker, ou seja, podemos fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando assim o deploy de containers. É possível por exemplo criar um container sem necessariamente saber em qual host ele está, pois o Swarm disponibilidade uma API de integração, onde é possível realizar grande parte das atividades administrativas de um container. Quer ver na prática?

Requisitos:

  • Estar com a versão 1.6+ do Docker
  • Abrir a API do Docker para o Swarm Manager

 

Mãos a obra:

1 – Baixando a imagem oficial:

$ docker pull swarm

2 – Criando o cluster:

$ docker run --rm swarm create 
4765653423fdecsdfe875954a6e2h78ed # 

 

O retorno desse comando será o ID do Cluster, armazena essa informação pois será importante nas próximas etapas.

3 – Adicionando nós ao cluster:

$ docker run -d swarm join --addr=<node_ip:2375> token://4765653423fdecsdfe875954a6e2h78ed

4 – Configurando o Manager:

$ docker run -d -p <porta_manager>:2375 swarm manage token://4765653423fdecsdfe875954a6e2h78ed

Lembrando que <porta_manager> será a porta que você utilizará para se comunicar com o Swarm Manager, responsável pela administração do cluster, a arquitetura ficará da forma como a imagem abaixo:

5 – Verificando o Cluster:

$ docker -H tcp://ip:porta_manager> info

O retorno será algo parecido com isso:

Containers: 0 
Nodes: 3 
agent-2: 172.31.0.1:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 514.5 MiB 
agent-1: 172.31.0.2:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 514.5 MiB 
agent-0: 172.31.0.3:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 514.5 MiB

Você pode enfrentar alguma dificuldade relacionada a TLS, principalmente se estiver apenas testando, para resolver isso basta executar: unset DOCKER_TLS_VERIFY, com isso não será verificado se os hosts possuem acesso via TLS ativado.

Para administrar seu cluster (criar containers, etc) basta utilizar o IP e Porta do Swarm Manage, dessa forma:

$ docker -H tcp://<manager_ip:manager_port> info 
$ docker -H tcp://<manager_ip:manager_port> run ... 
$ docker -H tcp://<manager_ip:manager_port> ps 

Para listar os nós que fazem parte do cluster, bata utilizar o comando abaixo:

$ docker run --rm swarm list token://4765653423fdecsdfe875954a6e2h78ed
172.31.0.1:2375 
172.31.0.2:2375 
172.31.0.3:2375

 

É claro que isso é apenas o início, tendo o cluster montado é possível criar filtros de identificação por tipo de serviço, isso é muito útil para criar containers com o mesmo tipo de serviço em um mesmo local sem a necessidade de saber onde. Mas isso é história para um próximo post 😉

Fique atento as novidades do Blog, e ajude divulgando o mundodocker.com.br.

Abraço!

 

Entusiasta Open Source, seu principal foco é ir atrás de ideias novas e torna-las realidade através de soluções simples e eficientes, o menos é mais, e o dividir é multiplicar.
  • Rodrigo Gattermann

    Usando swarm, basta que a imagem a ser rodada nos nodes esteja somente no manager ou cada node deve possuir essa imagem?

  • Oi Rodrigo,
    A imagem deve estar local em cada servidor, essa é uma das dificuldades que se tem em utilizar o Swarm.

  • Rodrigo Gattermann

    Sim, foi o que eu comprovei. Tive um pouco de dificuldades mas consegui utilizar o docker registry para montar um repositorio de imagens local, no mesmo host do swarm-manager. Com isso cada host ainda baixa a imagem a ser executada, mas acaba ficando automático com o uso do docker-registry.

  • Odravison Amaral

    Acho que faltou um print do resultado do comando “docker ps”. Por que, por exemplo, não ficou muito claro se eu devo subir o nó antes do comando de associar o nó no swarm, ou se esse comando de associar o nó ao swarm já sobe o nó com o serviço, e se sim, do que é preciso… Ficou meio vago, ao menos pra mim, mesmo assim tá de parabéns só pela iniciativa, pois o assunto é consideravelmente novo e temos pouco material em português.