Como Configurar o Docker Compose para Aplicações Multi-Contêiner

DockerBeginner
Pratique Agora

Introdução

Docker Compose é uma ferramenta essencial para desenvolvedores e profissionais de DevOps que buscam otimizar a gestão de contêineres e o lançamento de aplicações. Este tutorial abrangente fornece um guia passo a passo para compreender e implementar o Docker Compose, cobrindo tudo, desde a configuração básica até técnicas avançadas de implantação em diversos ambientes.

Fundamentos do Docker Compose

Introdução ao Docker Compose

Docker Compose é uma ferramenta poderosa para definir e executar aplicações Docker multi-contêiner. Permite que os desenvolvedores utilizem um ficheiro YAML para configurar serviços de aplicação, redes e volumes, simplificando o processo de orquestração de contêineres.

Conceitos Principais

graph TD
    A[Docker Compose] --> B[Definição de Serviço]
    A --> C[Gestão Multi-Contêiner]
    A --> D[Configuração de Ambiente]
Conceito-chave Descrição
Serviço Contêineres individuais na aplicação
docker-compose.yml Ficheiro de configuração que define os serviços
Volumes Armazenamento de dados persistentes para contêineres
Redes Comunicação entre contêineres

Exemplo de Configuração Docker Compose

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Exemplo Prático no Ubuntu 22.04

Instalar o Docker Compose:

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

Executar uma aplicação multi-contêiner:

docker compose up -d
docker compose ps
docker compose down

Casos de Utilização

Docker Compose é ideal para:

  • Ambientes de desenvolvimento locais
  • Configurações de testes automatizados
  • Implantação de aplicações em um único host
  • Arquitetura de microserviços

Configuração e Implantação

Estrutura do Ficheiro Docker Compose

graph TD
    A[docker-compose.yml] --> B[Versão]
    A --> C[Serviços]
    A --> D[Redes]
    A --> E[Volumes]

Exemplo de Configuração Abrangente

version: "3.8"
services:
  web:
    image: python:3.9
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
    environment:
      - DEBUG=true
    depends_on:
      - database

  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

networks:
  default:
    driver: bridge

volumes:
  postgres_data:

Gestão de Configuração de Ambiente

Tipo de Configuração Descrição Utilização
Variáveis de Ambiente Configuração em tempo de execução Dados sensíveis, cadeias de ligação
Ficheiros .env Configuração externa de ambiente Separar a configuração do código
Segredos Docker Informação sensível segura Senhas, tokens

Comandos de Implantação no Ubuntu 22.04

Validar a configuração:

docker compose config

Iniciar os serviços:

docker compose up -d

Escalar os serviços:

docker compose up -d --scale web=3

Monitorizar os serviços:

docker compose ps
docker compose logs

Estratégias de Rede de Contêineres

graph LR
    A[Rede de Contêineres] --> B[Rede Bridge]
    A --> C[Rede Host]
    A --> D[Rede Overlay]

Técnicas de Gestão de Volumes

## Criar volumes nomeados
docker volume create myvolume

## Listar volumes
docker volume ls

## Inspecionar detalhes do volume
docker volume inspect myvolume

Técnicas Avançadas de Compose

Escalonamento de Serviços e Equilíbrio de Carga

graph TD
    A[Load Balancer] --> B[Replica de Serviço 1]
    A --> C[Replica de Serviço 2]
    A --> D[Replica de Serviço 3]

Configuração de Escalonamento

version: "3.8"
services:
  web:
    image: nginx:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    ports:
      - "80:80"

Gestão Dinâmica de Serviços

Técnica Comando Descrição
Escalar Serviços docker compose up --scale web=5 Ajustar dinamicamente a contagem de contêineres
Atualizações Progressivas docker compose up --force-recreate Atualizar serviços com tempo de inatividade mínimo
Implantação Seletiva docker compose up service1 service2 Implantar serviços específicos

Estratégias de Implantação para Produção

## Validar a configuração
docker compose config

## Simulação de implantação
docker compose up --dry-run

## Implantação de produção
docker compose up -d --remove-orphans

Verificações de Saúde de Contêineres

services:
  web:
    image: myapp:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

Redes Avançadas

graph LR
    A[Rede Personalizada] --> B[Comunicação Interna]
    A --> C[Acesso Externo]
    A --> D[Descoberta de Serviços]

Monitorização e Registos

## Registos de serviço em tempo real
docker compose logs -f

## Monitorização de recursos
docker compose top

## Métricas de desempenho
docker stats

Configuração Multi-Ambiente

version: "3.8"
services:
  web:
    image: myapp:${ENV:-development}
    environment:
      - DATABASE_URL=${DATABASE_URL}

Gestão de Segredos

## Criar segredos Docker
echo "database_password" | docker secret create db_password -

## Utilizar segredos no ficheiro compose
services:
database:
secrets:
- db_password

Resumo

Dominando o Docker Compose, os desenvolvedores podem simplificar arquiteturas de aplicações complexas, melhorar a consistência da implantação e criar soluções de contentores mais escaláveis e manuteníveis. O tutorial demonstra como tirar partido de configurações YAML, gerir serviços, redes e volumes, e orquestrar eficazmente aplicações multi-contêiner com facilidade e eficiência.