# 阶段 1: 构建应用 | |
FROM node:bullseye AS builder | |
# 设置工作目录 | |
WORKDIR /app | |
# 安装依赖 (利用 Docker 层缓存) | |
COPY package.json yarn.lock* package-lock.json* ./ | |
RUN npm ci --omit=dev | |
# 复制源代码 | |
COPY . . | |
# 构建应用 (standalone 模式) | |
RUN npm run build | |
# 阶段 2: 创建轻量级运行环境 | |
FROM node:bullseye AS runner | |
WORKDIR /app | |
# 不要以 root 用户运行 | |
RUN addgroup --system --gid 1001 nodejs | |
RUN adduser --system --uid 1001 nextjs | |
USER nextjs | |
# 从构建阶段复制必要文件 | |
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 | |
# 设置环境变量 | |
ENV NODE_ENV=production | |
ENV PORT=3000 | |
# 暴露端口 | |
EXPOSE 3000 | |
# 启动命令 | |
CMD ["node", "server.js"] |