# 🚀 优化版 Dockerfile for Next.js with pnpm (目标: <200MB) # 第一阶段:构建阶段 FROM node:22-alpine AS builder # 设置工作目录 WORKDIR /app # 安装 pnpm RUN npm install -g pnpm # 复制包管理器配置文件 (利用Docker缓存) COPY package.json ./ # 安装依赖 RUN pnpm install # 复制源代码和配置文件 COPY . . # 构建应用 RUN pnpm run build # 清理构建阶段缓存 (关键优化点) RUN pnpm store prune && \ rm -rf node_modules && \ rm -rf ~/.pnpm-store && \ rm -rf /root/.pnpm-store # 第二阶段:运行阶段 (使用更小的基础镜像) FROM node:22-alpine AS runner # 设置工作目录 WORKDIR /app # 创建非root用户 RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs # 只安装必要的运行时工具 RUN apk add --no-cache wget && \ apk cache clean # 从构建阶段复制构建产物 (standalone模式包含所有需要的依赖) COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/public ./public # 设置用户 USER nextjs # 暴露端口 EXPOSE 3000 # 设置环境变量 ENV PORT=3000 \ HOSTNAME="0.0.0.0" \ NODE_ENV=production # 启动应用 (standalone模式直接运行server.js) CMD ["node", "server.js"]