54 lines
1.7 KiB
Plaintext
54 lines
1.7 KiB
Plaintext
# # 使用 Nginx 官方轻量镜像
|
||
# FROM nginx:1.25-alpine
|
||
|
||
# # 拷贝前端构建产物
|
||
# COPY dist/ /usr/share/nginx/html/
|
||
|
||
# # 暴露端口
|
||
# EXPOSE 80
|
||
|
||
# CMD ["nginx", "-g", "daemon off;"]
|
||
|
||
|
||
|
||
# 第一阶段:构建阶段 - 使用指定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 ./nginx.conf /etc/nginx/conf.d/default.conf
|
||
|
||
# 从构建阶段(builder)复制构建后的dist目录到Nginx的静态资源根目录
|
||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||
|
||
# Nginx镜像默认会启动nginx,无需额外CMD/ENTRYPOINT |