Você entra em um projeto novo. O npm install falha porque sua versão do Node é diferente da do colega. O banco de dados local não conecta. Você perde 2 dias configurando o ambiente.
Docker resolve isso encapsulando tudo (Node, Postgres, Redis) em containers isolados.
Docker Compose: A Receita do Bolo
Com um único arquivo docker-compose.yml, você sobe a infraestrutura inteira.
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: root
redis:
image: redis:alpine
Comando mágico: docker-compose up. Pronto. Você tem o app, o banco e o cache rodando e conversando entre si.
Benefícios para Frontend
Mesmo se você só faz frontend, Docker garante que:
- A versão do Node.js é a mesma de produção.
- Você pode rodar o Backend localmente sem instalar Python/Go/Ruby na sua máquina.
.dockerignore é Essencial
Não copie node_modules, .git ou arquivos de build para a imagem. Use .dockerignore para reduzir contexto e tempo de build. Imagens menores são mais rápidas para pull e deploy.
Multi-stage Builds
Para produção, use multi-stage: um stage para build (com todas as deps) e outro para runtime (só o necessário). A imagem final fica muito menor e mais segura.
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:20-alpine
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
Profissionalismo é garantir que o ambiente de desenvolvimento seja determinístico.