49 lines
1.4 KiB
Docker
49 lines
1.4 KiB
Docker
# 默认使用本地镜像 local-node:20-alpine(可先执行: docker tag node:20-alpine local-node:20-alpine)
|
||
# 也可通过 --build-arg NODE_IMAGE=xxx 指定其他镜像
|
||
ARG NODE_IMAGE=node:20-alpine
|
||
FROM ${NODE_IMAGE} AS base
|
||
|
||
FROM base AS deps
|
||
# 国内构建若卡在 npm ci,可传 --build-arg NPM_REGISTRY=https://registry.npmmirror.com
|
||
ARG NPM_REGISTRY=https://registry.npmjs.org/
|
||
RUN apk add --no-cache libc6-compat
|
||
WORKDIR /app
|
||
COPY package.json package-lock.json ./
|
||
RUN npm config set registry "$NPM_REGISTRY" \
|
||
&& npm config set fetch-timeout 300000 \
|
||
&& npm config set fetch-retries 5
|
||
# 使用 BuildKit 缓存 npm 目录,二次构建更快
|
||
RUN --mount=type=cache,target=/root/.npm \
|
||
npm ci
|
||
|
||
# Rebuild the source code only when needed
|
||
FROM base AS builder
|
||
WORKDIR /app
|
||
COPY --from=deps /app/node_modules ./node_modules
|
||
COPY . .
|
||
ENV NODE_ENV=production
|
||
RUN npm run build
|
||
|
||
FROM base AS runner
|
||
WORKDIR /app
|
||
ENV NODE_ENV=production
|
||
|
||
# 测试点生成需要编译/运行用户 C++ 标程
|
||
RUN apk add --no-cache build-base
|
||
|
||
RUN addgroup -g 1001 -S nodejs
|
||
RUN adduser -S nextjs -u 1001
|
||
|
||
COPY --from=builder /app/public ./public
|
||
# Automatically leverage output traces to reduce image size
|
||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||
|
||
USER nextjs
|
||
|
||
ENV PORT=3000
|
||
EXPOSE 3000
|
||
|
||
CMD ["node", "server.js"]
|