Como implantar uma aplicação multi-serviço como uma pilha Docker Swarm

DockerBeginner
Pratique Agora

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.