CodeGym /Cursos /Docker SELF /Introdução ao Docker Swarm

Introdução ao Docker Swarm

Docker SELF
Nível 18 , Lição 0
Disponível

6.1 Conceitos Básicos do Docker Swarm

Docker Swarm é o sistema de orquestração de containers embutido fornecido pelo Docker. Ele possibilita criar, gerenciar e escalar um cluster de hosts Docker, transformando-os em um único host lógico onde os containers podem ser executados. O Swarm distribui automaticamente tarefas entre os nós, oferecendo conveniência e resiliência. Nesta aula, vamos dar uma olhada nos componentes chave e nos comandos básicos para gerenciar o Docker Swarm.

Conceitos Básicos do Docker Swarm:

  1. Cluster (Swarm): grupo de hosts Docker agrupados em um único cluster lógico.
  2. Managers (Gerentes): nós que gerenciam o cluster e distribuem tarefas entre os nós de trabalho.
  3. Nós de Trabalho (Workers): nós que executam as tarefas e rodam os containers.
  4. Serviços (Services): representação lógica dos aplicativos, descrevendo que tarefas precisam ser executadas e quantas instâncias de containers devem ser iniciadas.
  5. Tarefas (Tasks): containers individuais que são instâncias dos serviços.

Arquitetura do Docker Swarm:

Docker Swarm utiliza uma arquitetura baseada em gerentes e nós de trabalho. Os gerentes gerenciam o estado do cluster, enquanto os nós de trabalho executam as tarefas.

Gerentes:

  • Gerenciam o estado do cluster e sua configuração.
  • Distribuem tarefas entre os nós de trabalho.
  • Garantem resiliência e alta disponibilidade (quando há múltiplos gerentes).

Nós de Trabalho:

  • Executam as tarefas designadas pelos gerentes.
  • Iniciam os containers conforme as tarefas.

Principais comandos do Docker Swarm:

  1. docker swarm init: inicialização de um novo cluster Swarm.
  2. docker swarm join: inclusão de um nó a um cluster existente.
  3. docker node ls: visualização da lista de nós no cluster.
  4. docker service create: criação de um novo serviço.
  5. docker service ls: visualização dos serviços em execução.
  6. docker service scale: escalonamento de um serviço para um número específico de instâncias.
  7. docker service rm: remoção de um serviço do cluster.

Usar o Docker Swarm simplifica o gerenciamento de aplicações em sistemas distribuídos, garantindo resiliência, escalabilidade e conveniência no deploy.

6.2 Criando um cluster Docker Swarm

Criando e gerenciando um cluster Docker Swarm

Passo 1: Inicializando o cluster

No primeiro host (manager), execute o comando:

Terminal

docker swarm init --advertise-addr <MANAGER_IP>

Este comando inicializa um novo cluster Swarm, define o nó atual como manager e exibe o comando para adicionar os nós workers.

Passo 2: Adicionando os nós workers

Nos outros hosts, execute o comando exibido ao executar docker swarm init para juntá-los ao cluster:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

Onde:

  • <SWARM_TOKEN>: token para conexão ao cluster (fornecido pelo comando docker swarm init).
  • <MANAGER_IP>: endereço IP do nó manager.

Passo 3: Visualizando os nós

Para ver todos os nós no cluster, use o comando:

Terminal

docker node ls

Este comando mostra uma lista de todos os nós, incluindo suas funções, estados e disponibilidade.

Exemplo de saída do comando docker node ls

Terminal

ID                                    HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
qwertyuiop12345    manager-node        Ready               Active             Leader
asdfghjkl67890      worker-node1       Ready               Active
zxcvbnm09876       worker-node2       Ready               Active

Explicação das colunas:

  • ID: Identificador único do nó.
  • HOSTNAME: Nome do host no qual o nó está rodando.
  • STATUS: Status atual do nó (por exemplo, Ready).
  • AVAILABILITY: Disponibilidade do nó (por exemplo, Active).
  • MANAGER STATUS: Indica se o nó é um manager (por exemplo, Leader, Reachable) ou um nó worker (vazio).

Agora o cluster Docker Swarm está configurado, e você pode criar e escalar aplicações.

6.3 Gerenciamento do Docker Swarm

Gerenciamento de serviços no Docker Swarm

1. Criando um serviço

Crie um serviço que será executado com um número especificado de réplicas:

Terminal

docker service create --name my_web --replicas 3 -p 8080:80 nginx

Nesse exemplo, é criado o serviço my_web, que executa 3 instâncias do Nginx. Os containers publicam a porta 80 na porta 8080 do host.

2. Visualizando os serviços

Para visualizar todos os serviços em execução no cluster, use o comando:

Terminal

docker service ls

Exemplo de saída do comando docker service ls

Terminal

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. Escalando um serviço

Para alterar o número de instâncias (réplicas) de um serviço, use o comando docker service scale:

Terminal

docker service scale my_web=5

Agora o serviço my_web terá 5 instâncias.

4. Atualizando um serviço

Para atualizar a imagem de um serviço para uma nova versão, use o comando docker service update:

Terminal

docker service update --image nginx:latest my_web

Garantindo alta disponibilidade

O Docker Swarm suporta alta disponibilidade por meio de:

  1. Distribuição de tarefas entre os nós no cluster para recuperação automática de containers em caso de falhas.
  2. Suporte a múltiplos managers: Recomenda-se um número ímpar de managers (por exemplo, 3 ou 5) para evitar problemas com quórum.
  3. Uso de réplicas: Configure várias réplicas para cada serviço para aumentar a resiliência a falhas.

O conceito de quórum

O quórum representa a maioria dos nós que devem concordar com uma determinada ação (como gravação de dados ou eleição de líder) para que ela seja considerada válida. Por exemplo, em um cluster com 5 nós, o quórum será 3 nós.

Dica útil! Certifique-se de que os managers estejam posicionados em diferentes servidores físicos ou em nuvens distintas para minimizar o risco de falhas simultâneas.

6.4 Exemplo de configuração Docker Compose para Docker Swarm

Docker Compose pode ser usado com Docker Swarm pra simplificar a gestão de apps multi-container.

Exemplo de arquivo docker-compose.yml

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8090:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: exemplo
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay
    

Rodando o stack Docker Compose no Swarm

Pra fazer o deploy do stack no Docker Swarm, usa o comando:

Terminal

docker stack deploy -c docker-compose.yml mystack

Visualizando o stack

Ver os stacks implantados:

Terminal

docker stack ls

Ver os serviços no stack

Terminal

docker stack services mystack
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION