Introdução
Neste tutorial, exploraremos o processo de implantação de uma aplicação multi-serviço utilizando o Docker Swarm, uma robusta plataforma de orquestração de contêineres. Você aprenderá como utilizar o Docker Compose para definir os serviços da sua aplicação e, em seguida, implantá-los sem problemas como um stack do Docker Swarm, garantindo escalabilidade e alta disponibilidade.
Compreendendo o Docker Swarm
O Docker Swarm é uma solução nativa de agrupamento e orquestração para contêineres Docker. Permite gerenciar um grupo de hosts Docker e implantar aplicações neles, proporcionando alta disponibilidade e escalabilidade.
O que é o Docker Swarm?
O Docker Swarm é um recurso embutido do Docker que permite criar e gerenciar um cluster de hosts Docker, chamado de Swarm. Em um Swarm, vários hosts Docker (nós) trabalham juntos como um único host Docker virtual. Isso permite implantar suas aplicações e serviços em todo o Swarm, e o Docker cuidará do balanceamento de carga, escalonamento e failover para você.
Conceitos-chave no Docker Swarm
- Swarm: Um cluster de hosts Docker configurados para trabalhar juntos.
- Node (nó): Um único host Docker que faz parte do Swarm.
- Service (serviço): Uma forma declarativa de definir como sua aplicação ou serviço deve ser implantado e escalonado em todo o Swarm.
- Task (tarefa): Uma única instância de um contêiner em execução como parte de um serviço.
- Overlay Network (rede overlay): Uma rede virtual que conecta todos os nós em um Swarm, permitindo que os contêineres se comuniquem entre si.
Benefícios do Docker Swarm
- Alta Disponibilidade: O Docker Swarm gerencia automaticamente a saúde e a disponibilidade de seus serviços, reiniciando tarefas falhas e redistribuindo-as pelo Swarm.
- Escalabilidade: Você pode facilmente escalar seus serviços para cima ou para baixo ajustando o número de réplicas.
- Balanceamento de Carga: O Docker Swarm fornece balanceamento de carga embutido, distribuindo as solicitações de entrada pelas tarefas do seu serviço.
- Simplicidade: O Docker Swarm é um recurso nativo do Docker, tornando fácil configurar e gerenciar suas aplicações containerizadas.
graph TD
A[Host Docker] --> B[Host Docker]
B[Host Docker] --> C[Host Docker]
C[Host Docker] --> A[Host Docker]
A[Host Docker] -- Swarm --> B[Host Docker]
B[Host Docker] -- Swarm --> C[Host Docker]
C[Host Docker] -- Swarm --> A[Host Docker]
Implantando uma Aplicação Multi-Serviço com Docker Compose
O Docker Compose é uma ferramenta que permite definir e executar aplicações multi-contêiner. É particularmente útil quando precisa implantar uma aplicação complexa composta por vários serviços, cada um com seus próprios requisitos.
Criando um Arquivo Docker Compose
Para implantar uma aplicação multi-serviço com Docker Compose, você precisa criar um arquivo docker-compose.yml que define os serviços, suas configurações e como eles devem ser conectados. Aqui está um exemplo:
version: "3"
services:
web:
image: labex/web-app:v1
ports:
- "80:8080"
depends_on:
- db
db:
image: labex/database:v1
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Neste exemplo, temos dois serviços: web e db. O serviço web utiliza a imagem labex/web-app:v1 e expõe a porta 8080 na porta 80 do host. Ele também depende do serviço db. O serviço db utiliza a imagem labex/database:v1 e monta um volume para os dados do banco de dados.
Implantando a Aplicação
Para implantar a aplicação, você pode usar os seguintes comandos:
## Construir as imagens (se necessário)
docker-compose build
## Implantar a aplicação
docker-compose up -d
O comando docker-compose up -d iniciará todos os serviços em segundo plano.
Escalando a Aplicação
Um dos benefícios do uso do Docker Compose é a capacidade de escalar facilmente seus serviços. Por exemplo, para escalar o serviço web para 3 réplicas, você pode executar:
docker-compose scale web=3
Isso criará mais duas instâncias do serviço web, e o Docker Compose automaticamente balanceará a carga entre elas.
graph LR
client[Cliente] --> load_balancer[Balanceador de Carga]
load_balancer --> web1[Serviço Web]
load_balancer --> web2[Serviço Web]
load_balancer --> web3[Serviço Web]
web1 --> db[Serviço de Banco de Dados]
web2 --> db
web3 --> db
Gerenciando e Escalando a Pilha Docker Swarm
Depois de implantar sua aplicação multi-serviço como uma pilha Docker Swarm, você pode usar vários comandos para gerenciá-la e escalá-la.
Implantando a Pilha
Para implantar sua aplicação como uma pilha Docker Swarm, você pode usar o comando docker stack deploy:
docker stack deploy -c docker-compose.yml my-app
Isso criará os serviços Swarm com base nas configurações em seu arquivo docker-compose.yml.
Monitorando a Pilha
Você pode usar os seguintes comandos para monitorar o status de sua pilha Swarm:
## Listar os serviços em execução
docker stack services my-app
## Listar as tarefas (instâncias de contêiner) para um serviço
docker service ps my-app_web
## Visualizar os logs de um serviço
docker service logs my-app_web
Escalando a Pilha
Para escalar um serviço em sua pilha Swarm, você pode usar o comando docker service scale:
## Escalar o serviço "web" para 5 réplicas
docker service scale my-app_web=5
Isso criará mais 4 instâncias do serviço web, e o Docker Swarm automaticamente balanceará a carga entre elas.
graph LR
client[Cliente] --> load_balancer[Balanceador de Carga]
load_balancer --> web1[Serviço Web]
load_balancer --> web2[Serviço Web]
load_balancer --> web3[Serviço Web]
load_balancer --> web4[Serviço Web]
load_balancer --> web5[Serviço Web]
web1 --> db[Serviço de Banco de Dados]
web2 --> db
web3 --> db
web4 --> db
web5 --> db
Atualizando a Pilha
Para atualizar sua pilha Swarm com uma nova versão de um serviço, você pode usar o comando docker service update:
## Atualizar o serviço "web" para usar uma nova imagem
docker service update my-app_web --image labex/web-app:v2
Isso atualizará o serviço web gradualmente, substituindo os contêineres antigos pelos novos sem interromper o serviço.
Usando esses comandos, você pode gerenciar e escalar sua pilha Docker Swarm de forma eficaz, garantindo alta disponibilidade e desempenho de sua aplicação multi-serviço.
Resumo
Ao final deste tutorial, você terá um conhecimento sólido do Docker Swarm e como utilizá-lo para implantar e gerenciar uma aplicação multi-serviço. Você será capaz de configurar um cluster Docker Swarm, definir os serviços da sua aplicação usando o Docker Compose e implantar toda a pilha como um sistema escalável e resiliente.



