MODELO MENTAL
Imagem é receita; container é uma execução dessa receita.
Uma imagem reúne filesystem, runtime e instruções. Um container é uma instância isolada criada a partir dela. Docker não substitui o entendimento da aplicação: torna dependências e limites mais visíveis.
Imagem
Artefato imutável criado em camadas e versionado com uma tag.
Container
Processo em execução, com rede, variáveis e armazenamento definidos.
Compose
Arquivo declarativo que conecta serviços, redes e volumes.
PRÁTICA COM CONTEXTO
Descreva a aplicação e seus serviços em arquivos versionados.
- Comece por uma imagem base confiável. Mantenha-a atualizada e instale apenas o necessário.
- Separe build e execução. A imagem final deve carregar somente o que precisa para rodar.
- Use volumes para dados persistentes. O filesystem efêmero de um container não deve guardar dados duráveis.
- Execute em ambiente limpo. Valide a imagem antes de considerá-la pronta para outro ambiente.
services:
app:
build: .
ports: ["3000:3000"]
environment:
DATABASE_URL: postgres://app:app@db:5432/app
depends_on: [db]
db:
image: postgres:16-alpine
DECISÕES RESPONSÁVEIS
Reprodutibilidade não elimina cuidados de segurança.
Não coloque segredos na imagem. Tokens, senhas e chaves devem ser injetados no ambiente de execução por um mecanismo apropriado, sem aparecer em código, commits ou logs.
| Pergunta | Por que importa |
|---|---|
| Os dados precisam sobreviver ao container? | Use volume ou serviço de dados adequado; containers são descartáveis. |
| A imagem contém apenas o necessário? | Imagens menores reduzem superfície de ataque e tempo de distribuição. |
| A equipe consegue reproduzir o ambiente? | Compose documenta serviços e suas relações em um único arquivo. |