
Compose na prática: ambientes isolados e tarefas de execução única
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 downcompose.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 diagnosticoPor 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. O que -p cloudshop-pr42 ajuda a separar?
2. Qual comando é apropriado para uma migração pontual?
3. Antes de aplicar vários arquivos Compose, como conferir sua combinação?
Minhas anotações
Salvo automaticamente neste navegador.
