Fala dev 👋
Se você quer rodar sua aplicação Next.js com Docker, seja para desenvolvimento local ou deploy em produção (VPS, ECS, Fly.io, etc), esse artigo é para você!
Aqui eu explico como criar um Dockerfile moderno com:
- ✅ Suporte ao App Router do Next 14+
- ✅ Cache de dependências
- ✅ Multi-stage build
- ✅ Imagem leve para produção
📦 Estrutura básica do projeto
.
├── app/
├── components/
├── public/
├── styles/
├── package.json
├── tsconfig.json
├── next.config.js
├── Dockerfile
├── .dockerignore🐳 Dockerfile completo (dev + produção)
# Etapa 1 - Instala dependências
FROM node:18-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install
# Etapa 2 - Build do projeto
FROM node:18-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm build
# Etapa 3 - Execução da app
FROM node:18-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
EXPOSE 3000
CMD ["pnpm", "start"]🧼 .dockerignore
node_modules
.next
.env.local
pnpm-lock.yaml
\*.log🛠️ Rodando localmente
Para buildar e subir a aplicação Next.js com Docker:
docker build -t meu-app-nextjs .
docker run -p 3000:3000 meu-app-nextjsSe estiver usando .env.local, adicione com:
docker run --env-file .env.local -p 3000:3000 meu-app-nextjs🧪 Dica para ambiente de desenvolvimento
Você também pode montar um docker-compose.yml para rodar com bind volume:
version: "3.8"
services:
web:
build: .
ports: - "3000:3000"
volumes: - .:/app - /app/node_modules
command: pnpm dev
environment: - NODE_ENV=development✅ Por que usar Docker no Next.js?
Ambiente padronizado: elimina “na minha máquina funciona”
Pronto para deploy: ideal para VPS, Docker Swarm ou ECS
Builds consistentes: com cache e stages separados
Fácil CI/CD: pipelines pré-prontos para GitHub Actions, GitLab, etc
📦 Imagem final leve e produtiva
Com esse setup, sua imagem final:
é baseada em Alpine
só contém os arquivos do build
ignora o node_modules do host
usa cache de dependências da melhor forma possível
🚀 Conclusão
Com esse Dockerfile, você pode rodar qualquer projeto Next.js com segurança e facilidade — tanto em desenvolvimento quanto em produção.
Dica bônus: use multiplos docker-compose.override.yml se quiser diferenciar dev de produção.
Até a próxima! Allisson Lima Desenvolvedor Frontend | apaixonado por DX, testes e DevOps