⌘K

08 – Docker Compose — Organizando e Orquestrando seus Containers sem Esforço

Last updated

Até agora, vimos como instalar o Docker no Linux e como subir containers individuais usando o comando docker run. Mas no cenário real do DevOps e da Engenharia de Dados, as aplicações raramente rodam sozinhas.

Imagine que você precisa subir um ambiente de desenvolvimento com uma API em Python, um banco de dados PostgreSQL e uma interface do Metabase para analisar os dados. Rodar isso tudo no braço via terminal significaria gerenciar múltiplos comandos gigantescos, configurar redes isoladas manualmente e garantir que o banco suba antes da API. Uma dor de cabeça enorme.

É aqui que o Docker Compose brilha. Ele permite que você defina e rode múltiplos containers usando apenas um arquivo de configuração centralizado.

O que é o Docker Compose?

O Docker Compose é uma ferramenta integrada ao Docker para definir aplicações multi-container. Em vez de usar scripts imperativos cheios de comandos de terminal, você usa uma abordagem declarativa.

Você escreve um único arquivo no formato YAML (geralmente chamado docker-compose.yml) descrevendo toda a sua infraestrutura: quais serviços deseja rodar, quais portas eles vão expor, como eles se conectam entre si e onde os dados serão salvos. Depois disso, a mágica acontece com um único comando:

docker compose up -d

O Arquivo na Prática: Subindo uma Stack de Dados Clássica

Para ilustrar o poder do Compose, vamos criar um exemplo clássico de engenharia: uma aplicação web simples que se conecta a um banco de dados PostgreSQL. O Compose criará os containers automaticamente, além de configurar uma rede isolada para que eles se comuniquem de forma segura usando apenas os seus nomes de serviço.

docker-compose.yml
version: “3.8”

services:
  # Serviço 1: Nosso Banco de Dados
  db_dados:
    image: postgres:15-alpine
    container_name: meu_postgres
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: senha_secreta_123
      POSTGRES_DB: producao
    volumes:
      – pgdata:/var/lib/postgresql/data

  # Serviço 2: Interface Web para gerenciar o Banco (pgAdmin)
  pgadmin_web:
    image: dpage/pgadmin4
    container_name: meu_pgadmin
    ports:
      – “8080:80”
    environment:
      PGADMIN_DEFAULT_EMAIL: devops@blog.com
      PGADMIN_DEFAULT_PASSWORD: admin123
    depends_on:
      – db_dados

volumes:
  pgdata:

Entendendo os Parâmetros Chave:

  • services: Define as caixas (containers) que vão compor a sua aplicação. No nosso caso, temos o db_dados e o pgadmin_web.
  • ports: Mapeia a porta da sua máquina física para a porta interna do container. Ao acessar http://localhost:8080 no seu navegador, você entrará na interface do pgAdmin.
  • volumes: Crucial para persistência de dados. Se o container do banco de dados for destruído ou atualizado, as tabelas e dados não serão perdidos porque estão mapeados no volume nomeado pgdata.
  • depends_on: Diz ao Docker que o pgAdmin depende do banco de dados. O Compose é inteligente e vai garantir que o container do Postgres suba antes de tentar iniciar a interface web.

Gerenciando a Infraestrutura no Terminal

Com o arquivo criado, o controle do seu ambiente fica ridiculamente simples. Veja o passo a passo para gerenciar essa stack:

1
Passo 1

Inicie toda a infraestrutura

Entre no diretório onde salvou o arquivo docker-compose.yml e execute o comando abaixo para baixar as imagens e rodar os containers em segundo plano (detached mode):

docker compose up -d
2
Passo 2

Verifique o status da sua Stack

Para checar se todos os serviços configurados no arquivo estão saudáveis e rodando, use:

docker compose ps
3
Passo 3

Derrube o ambiente de uma só vez

Terminou o dia de trabalho? Você limpa a sua máquina e desliga todos os containers e redes criadas com apenas um comando (lembrando que seus dados continuam salvos de forma segura no volume):

docker compose down

💡 Dica de Infraestrutura: Repare que dentro das configurações do pgAdmin, para se conectar ao banco de dados, você não precisa descobrir o endereço IP interno do container do Postgres. Você pode simplesmente colocar db_dados no campo de host (servidor). O Docker Compose cria um servidor DNS interno automático que resolve o nome do serviço diretamente para o container correto!

O Docker Compose é o primeiro passo para sair do ambiente de desenvolvimento local e começar a pensar como um arquiteto de soluções DevOps.

Still stuck? How can we help? Get Help