Por Que Todo Dev Precisa de Docker
"Funciona na minha maquina" nao e mais desculpa. Docker garante que seu ambiente e identico em desenvolvimento, staging e producao.
Conceitos Fundamentais
- Imagem: template read-only com tudo que sua app precisa
- Container: instancia rodando de uma imagem
- Dockerfile: receita para construir uma imagem
- Docker Compose: orquestra multiplos containers
Seu Primeiro Dockerfile
Para uma aplicacao Node.js:
FROM node:20-alpine AS base
FROM base AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM base AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/server.js"]
Este Dockerfile multi-stage gera uma imagem otimizada com apenas o necessario para rodar.
Docker Compose Para Dev
Configure todo seu ambiente local com um arquivo:
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
depends_on:
- db
- redis
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secret
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:
Comandos Essenciais
# Subir tudo
docker compose up -d
Ver logs
docker compose logs -f app
Entrar no container
docker compose exec app sh
Parar tudo
docker compose down
Deploy em Producao
Para deploy, recomendo:
- Coolify: alternativa open-source ao Heroku, roda em qualquer VPS
- Railway: deploy automatico a partir do Dockerfile
- VPS + Docker Compose: para controle total
Dicas Importantes
- Sempre use
.dockerignorepara excluir node_modules e .git - Use imagens Alpine — sao 5x menores
- Nunca rode containers como root em producao
- Use health checks para monitoramento automatico