# 第一阶段:构建阶段 - 使用指定node20.15.0版本,安装pnpm FROM node:20.15.0-alpine AS builder # 设定工作目录(容器内的项目目录) WORKDIR /app # 配置pnpm源(可选,加速国内安装) ENV PNPM_REGISTRY=https://registry.npmmirror.com/ # 全局安装pnpm(node20+推荐corepack管理pnpm,更适配) RUN corepack enable && corepack prepare pnpm@latest --activate # 复制包管理文件(先复制lock文件,利用docker层缓存,避免代码变动重复装包) COPY package.json pnpm-lock.yaml* ./ # 安装项目依赖(--frozen-lockfile 锁定依赖版本,保证构建一致性) RUN pnpm install --frozen-lockfile # 复制整个项目代码到容器 COPY . . # 构建参数:指定构建环境(默认im,可在build时覆盖为test/im/prod等) ARG BUILD_ENV=im # 执行对应环境的构建命令(拼接为pnpm build:xxx) RUN pnpm build:${BUILD_ENV} RUN mv /app/dist/main/index.html /app/dist/ # 第二阶段:运行阶段 - 使用官方Nginx稳定版,仅保留dist目录,减小镜像体积 FROM nginx:stable-alpine # 暴露Nginx默认端口(前端项目常规端口) EXPOSE 80 # 可选:替换Nginx默认配置(解决前端路由刷新404、开启gzip压缩,优化静态资源) # COPY ./default.conf /etc/nginx/conf.d/default.conf # 从构建阶段(builder)复制构建后的dist目录到Nginx的静态资源根目录 COPY --from=builder /app/dist /usr/share/nginx/html # Nginx镜像默认会启动nginx,无需额外CMD/ENTRYPOINT