Hướng dẫn Dockerize Next.js với Output Standalone giảm dung lượng Image từ 1GB xuống 100MB

2026-07-24 8 phút đọcBởi Uwmee Software

Khi đóng gói một ứng dụng Next.js để deploy bằng Docker Container, nếu bạn copy toàn bộ thư mục node_modules vào Docker Image, dung lượng Image có thể **phình to lên hơn 1GB**, khiến thời gian build và push lên Server mất hàng chục phút! Tính năng **Output Standalone** trong Next.js chính là chìa khóa thu nhỏ Image xuống **chỉ còn 100MB**!

1. Tính năng output: 'standalone' trong Next.js là gì?

Khi bật output: 'standalone' trong next.config.mjs, Next.js sẽ tự động phân tích và **chỉ gom đúng những thư viện node_modules thực sự được sử dụng** vào một thư mục .next/standalone duy nhất. Tất cả các thư viện devDependencies dư thừa đều bị loại bỏ hoàn toàn!

2. File Dockerfile Multi-stage chuẩn Production 2026

Tạo file Dockerfile ở thư mục gốc dự án:

# Bước 1: Dependencies
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile

# Bước 2: Builder
FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV BUILD_DIR=.next
RUN corepack enable && pnpm build

# Bước 3: Runner (Image siêu nhẹ)
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000

COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static

EXPOSE 3000
CMD ["node", "server.js"]

3. 3 Ưu điểm vượt trội khi chạy Docker Standalone

  • Kích thước Image siêu nhỏ: Giảm từ 1.2GB xuống dưới 100MB.
  • Thời gian khởi động Container thần tốc: Chạy trực tiếp qua lệnh node server.js mà không cần khởi động lại CLI.
  • Tối ưu bộ nhớ RAM Server: Giảm 60% mức độ ngốn RAM của Server VPS.

Kết luận

Dockerize Next.js với Output Standalone là chuẩn mực đóng gói ứng dụng cho mọi quy trình CI/CD hiện đại. Uwmee Software tối ưu sẵn cấu hình Docker Standalone cho mọi dự án website Next.js. Đọc thêm bài viết Deploy Next.js lên VPS với PM2 và Nginx.

Cần vượt Closed Testing nhanh chóng?

Đội 12+ tester thật của Uwmee tương tác hằng ngày đủ 14 ngày — trọn gói chỉ 300.000đ, chạy lại miễn phí nếu không đạt.

Câu hỏi thường gặp