Files
hunjing/docker/frontend/Dockerfile
T
2026-08-21 16:00:13 +08:00

51 lines
1.7 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ==============================
# 琉璃镜 · 魂镜前端镜像(Frontend / Next.js):Node 22 + pnpm
# 多阶段构建:deps -> builder -> prod-deps -> runner
# 启动入口:pnpm start(即 next start,默认端口 3000)
# 依赖 BuildKit 的 cache mount,Docker 23+ 默认开启;旧版本需设置 DOCKER_BUILDKIT=1。
# ==============================
# ---------- 基础镜像 ----------
FROM node:22-alpine AS base
ENV PNPM_HOME="/pnpm" \
PATH="$PNPM_HOME:$PATH" \
NEXT_TELEMETRY_DISABLED=1
RUN corepack enable
# ---------- 全量依赖(用于构建) ----------
FROM base AS deps
WORKDIR /app/frontend
COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile
# ---------- 构建 ----------
FROM base AS builder
WORKDIR /app/frontend
COPY --from=deps /app/frontend/node_modules ./node_modules
COPY frontend/ ./
# 当前无 public 目录;mkdir 保证 runner 阶段 COPY 不会失败
RUN mkdir -p public \
&& pnpm build
# ---------- 仅生产依赖(缩小运行时镜像) ----------
FROM base AS prod-deps
WORKDIR /app/frontend
COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile --prod
# ---------- 运行时 ----------
FROM base AS runner
WORKDIR /app/frontend
ENV NODE_ENV=production
COPY --from=prod-deps /app/frontend/node_modules ./node_modules
COPY --from=builder /app/frontend/.next ./.next
COPY --from=builder /app/frontend/public ./public
COPY frontend/package.json frontend/next.config.ts ./
EXPOSE 3000
CMD ["pnpm", "start"]