0 XP

DEVOPSQUEST

Minha Trilha
Módulo 4 · Docker e Compose

Compose na prática: ambientes isolados e tarefas de execução única

Intermediário 50 min+25 XPDocker ComposePostgreSQL

Objetivos desta aula

  • Isolar stacks com nomes de projeto
  • Combinar arquivos Compose de forma explícita
  • Executar migrações como tarefa de execução única
  • Investigar falhas sem destruir o ambiente
  • Validar a configuração antes de subir serviços

Compose na prática começa pela organização do trabalho: duas branches do CloudShop podem precisar de bancos independentes. O nome de projeto, definido com -p, agrupa serviços, redes e volumes para que um ambiente não reutilize os recursos do outro por acidente.

Isolamento tem limites: projetos diferentes separam recursos gerenciados pelo Compose, mas não tornam exclusiva uma porta do host. Se ambos publicarem 8080:80, haverá conflito; use portas distintas ou publicação dinâmica para executar os dois ao mesmo tempo.

Arquivos complementares permitem manter uma definição base e acrescentar necessidades locais. Informe os arquivos com -f na ordem desejada: o último ajusta o anterior. Use docker compose config para enxergar o resultado, porque listas e caminhos têm regras de mesclagem que merecem conferência.

Profiles habilitam ferramentas opcionais, como uma interface administrativa ou um serviço de diagnóstico. Um serviço com profiles: [tools] não inicia no fluxo padrão; --profile tools o inclui. Isso evita gastar recursos com ferramentas de uso ocasional.

Tarefas de execução única não devem ficar presas a um servidor permanente. Uma migração pode reutilizar a imagem da API e executar outro comando com docker compose run --rm: o container é removido ao terminar, mas o efeito no banco permanece.

Migração exige coordenação: execute-a uma vez por release e interrompa o processo se ela falhar. O exemplo assume que a API já possui npm run migrate e as credenciais necessárias; executar várias migrações concorrentes pode causar disputa por locks e mudanças parciais.

Diagnóstico antes de reconstrução preserva evidências. Consulte ps -a, os logs recentes e o estado de saúde antes de tentar outro build. up --wait espera serviços em execução ou saudáveis quando há healthchecks; não substitui um teste funcional de compra.

Encerramento seguro distingue ambiente descartável de dados persistentes. down remove containers e redes do projeto, mas preserva volumes nomeados por padrão. Não acrescente -v por hábito: confirme primeiro qual banco e qual projeto serão afetados.

Na prática

Operar dois ambientes a partir do Compose existente

bash

# Pré-requisito: compose.yaml define os serviços api e db, com healthchecks.
# Cada ambiente usa seus próprios volumes; evite container_name e portas fixas.
docker compose -p cloudshop-pr42 -f compose.yaml config --quiet
docker compose -p cloudshop-pr42 -f compose.yaml up -d --wait db
# A imagem da API deve implementar o script migrate e receber as credenciais.
docker compose -p cloudshop-pr42 -f compose.yaml run --rm api npm run migrate
docker compose -p cloudshop-pr42 -f compose.yaml up -d --wait
docker compose -p cloudshop-pr42 -f compose.yaml ps -a
docker compose -p cloudshop-pr42 -f compose.yaml logs --tail=100 api
# Preserva volumes nomeados para a próxima execução.
docker compose -p cloudshop-pr42 -f compose.yaml down

compose.tools.yaml: diagnóstico opcional sem publicar porta

yaml

services:
  diagnostico:
    image: busybox:1.37
    profiles: [tools] # Só participa quando solicitado.
    command: ["nslookup", "db"]
    networks: [backend] # Rede já declarada no arquivo base.
# Execute: docker compose -f compose.yaml -f compose.tools.yaml run --rm diagnostico

Por que isso importa

Operar ambientes paralelos e migrações controladas torna o onboarding e a revisão de PRs previsíveis, sem misturar dados.

Erro comum

Fixar container_name ou portas do host e esperar que apenas -p elimine todos os conflitos.

Dica de produção

Padronize a combinação de arquivos e o nome de projeto em scripts documentados; registre o resultado de cada migração.

Alerta de segurança

docker compose config pode revelar valores interpolados; não publique sua saída completa se houver credenciais.

Pergunta de entrevista

Como você prepararia dois ambientes do mesmo projeto no mesmo host sem compartilhar dados ou disputar portas?

Glossário

projeto Compose
Agrupamento lógico que identifica e separa recursos de um stack.
profile
Seleção opcional de serviços que não precisam iniciar no fluxo padrão.
one-off
Tarefa executada em um container temporário até seu processo terminar.
mesclagem
Combinação das definições de vários arquivos Compose em uma configuração final.

Conexão com o CloudShop

Criar um ambiente isolado de revisão do CloudShop e executar sua migração antes de iniciar a API.

Quiz da aula

  1. 1. O que -p cloudshop-pr42 ajuda a separar?

  2. 2. Qual comando é apropriado para uma migração pontual?

  3. 3. Antes de aplicar vários arquivos Compose, como conferir sua combinação?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima