This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# 🚀 超优化版 .dockerignore for npm (减小镜像体积)
|
||||
# 🚀 优化版 .dockerignore (减小镜像体积)
|
||||
|
||||
# 依赖和构建产物
|
||||
node_modules
|
||||
.next
|
||||
.npm
|
||||
.pnpm-store
|
||||
.npm
|
||||
.yarn
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
@@ -12,10 +12,6 @@ yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# 包管理器锁文件 (保留npm,排除其他)
|
||||
pnpm-lock.yaml
|
||||
yarn.lock
|
||||
|
||||
# 版本控制
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
46
Dockerfile
46
Dockerfile
@@ -1,56 +1,44 @@
|
||||
# 🚀 超优化版 Dockerfile for Next.js with pnpm (Ubuntu环境解决兼容性)
|
||||
# 🚀 优化版 Dockerfile for Next.js with pnpm (目标: <200MB)
|
||||
# 第一阶段:构建阶段
|
||||
FROM node:22-slim AS builder
|
||||
FROM node:22-alpine AS builder
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 安装必要的系统依赖
|
||||
RUN apt-get update && apt-get install -y \
|
||||
python3 \
|
||||
make \
|
||||
g++ \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# 安装 pnpm (指定版本避免版本差异)
|
||||
RUN npm install -g pnpm
|
||||
|
||||
# 安装 pnpm
|
||||
RUN npm install -g pnpm@9.15.0
|
||||
# 复制包管理器配置文件 (利用Docker缓存)
|
||||
COPY package.json pnpm-lock.yaml ./
|
||||
|
||||
# 复制包管理器配置文件 (只需package.json,pnpm会自动生成锁文件)
|
||||
COPY package.json ./
|
||||
|
||||
# 安装依赖 (pnpm正确处理二进制文件,自动生成锁文件)
|
||||
RUN pnpm install --prod --no-optional && \
|
||||
pnpm store prune
|
||||
# 安装依赖 (禁用缓存以减小体积)
|
||||
RUN pnpm install --frozen-lockfile --no-optional
|
||||
|
||||
# 复制源代码和配置文件
|
||||
COPY . .
|
||||
|
||||
# 重新安装所有依赖用于构建 (包含开发依赖)
|
||||
RUN pnpm install --no-optional
|
||||
|
||||
# 构建应用
|
||||
RUN pnpm run build
|
||||
|
||||
# 清理构建阶段缓存 (关键优化点)
|
||||
RUN rm -rf node_modules && \
|
||||
RUN pnpm store prune && \
|
||||
rm -rf node_modules && \
|
||||
rm -rf ~/.pnpm-store && \
|
||||
rm -rf /root/.pnpm-store && \
|
||||
pnpm store prune
|
||||
rm -rf /root/.pnpm-store
|
||||
|
||||
# 第二阶段:运行阶段 (使用Ubuntu slim镜像)
|
||||
FROM node:22-slim AS runner
|
||||
# 第二阶段:运行阶段 (使用更小的基础镜像)
|
||||
FROM node:22-alpine AS runner
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 创建非root用户
|
||||
RUN groupadd --system --gid 1001 nodejs && \
|
||||
useradd --system --uid 1001 --gid nodejs nextjs
|
||||
RUN addgroup --system --gid 1001 nodejs && \
|
||||
adduser --system --uid 1001 nextjs
|
||||
|
||||
# 只安装必要的运行时工具
|
||||
RUN apt-get update && apt-get install -y \
|
||||
wget \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
RUN apk add --no-cache wget && \
|
||||
apk cache clean
|
||||
|
||||
# 从构建阶段复制构建产物 (standalone模式包含所有需要的依赖)
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
"react-error-boundary": "^6.0.0",
|
||||
"react-icons": "^5.5.0",
|
||||
"styled-components": "^6.0.9",
|
||||
"swagger-jsdoc": "^6.2.8",
|
||||
"swagger-ui-react": "^5.22.0",
|
||||
"zustand": "^5.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -33,6 +35,8 @@
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"@types/swagger-jsdoc": "^6.0.4",
|
||||
"@types/swagger-ui-react": "^5.18.0",
|
||||
"tailwindcss": "^4",
|
||||
"typescript": "^5"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user