Como Dockerizar uma Aplicação Next.js em 2025

July 31, 2025 (9mo ago)

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:


📦 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-nextjs

Se 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