~/VibeHandbook
PDF grátis

Infraestrutura

docker.com

Containers

O que é

Pense em um contêiner de navio: tudo o que você coloca dentro dele viaja como uma unidade fechada e chega da mesma forma em qualquer porto. Um de software funciona da mesma maneira — ele empacota seu aplicativo junto com tudo o que ele precisa para rodar (código, bibliotecas, ferramentas do sistema) em um único pacote portátil. Esse pacote roda da mesma forma no seu laptop, em um servidor de teste ou na nuvem, o que elimina o clássico problema do "funciona na minha máquina". O Docker é a ferramenta mais comum para criá-los.

Pontos fortes

  • Ambiente consistente em qualquer lugar — construa uma vez, rode em qualquer lugar.
  • Controle total sobre o runtime, os pacotes do sistema operacional e as dependências.
  • Sem cold starts (atrasos de inicialização) depois que já está rodando; bom para tráfego constante.
  • Portátil entre provedores de nuvem, evitando um vínculo (lock-in) forte com um único fornecedor.
  • Suporta qualquer linguagem ou , incluindo processos de longa duração.

Trade-offs (concessões)

  • Você gerencia mais coisas: imagens-base, atualizações e dimensionamento de recursos.
  • O escalonamento não é automático a menos que você adicione um orquestrador (como o Kubernetes), o que adiciona complexidade real.
  • Um container em execução custa dinheiro mesmo quando está ocioso.
  • Imagens maiores significam builds e deploys mais lentos.
  • A aplicação de correções de segurança na imagem é sua responsabilidade.

Quando usar

Escolha containers quando você precisar de um ambiente consistente e totalmente controlado: aplicativos com dependências específicas do sistema, serviços de longa duração, workers em segundo plano, ou qualquer coisa que ultrapasse os limites das funções e .

Encaixe com vibe coding

Containers são um alvo forte para direção por IA porque um Dockerfile é apenas uma receita, e os agentes são bons em escrever receitas. Você pode pedir para a IA gerar o Dockerfile, um .dockerignore e os comandos de , e depois iterar lendo os erros de build de volta para ela. Dica: peça uma imagem-base pequena (como alpine ou uma variante slim) e um build em múltiplos estágios (multi-stage) — isso mantém as imagens enxutas, os builds rápidos e a superfície de ataque pequena. Plataformas como Fly.io, Google Cloud Run e Railway conseguem fazer o deploy de um container com um único comando.

# Dockerfile — multi-stage Node app
FROM node:20-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=build /app .
EXPOSE 3000
CMD ["node", "server.js"]
# Build and run locally
docker build -t my-app .
docker run -p 3000:3000 my-app