42 lines
928 B
Plaintext
42 lines
928 B
Plaintext
|
|
# ===============================
|
|||
|
|
# 1) 依赖安装 + 构建阶段
|
|||
|
|
# ===============================
|
|||
|
|
FROM node:16-alpine AS build
|
|||
|
|
|
|||
|
|
WORKDIR /app
|
|||
|
|
|
|||
|
|
# 只拷贝 package.json,加快缓存命中
|
|||
|
|
COPY package.json ./
|
|||
|
|
|
|||
|
|
# 预先安装依赖(利用缓存)
|
|||
|
|
RUN npm install --registry=https://registry.npmmirror.com
|
|||
|
|
|
|||
|
|
# 拷贝全部代码
|
|||
|
|
COPY . .
|
|||
|
|
|
|||
|
|
# 通过构建参数传入构建环境(如 sit/test/prod)
|
|||
|
|
ARG BUILD_ENV=sit
|
|||
|
|
ENV BUILD_ENV=${BUILD_ENV}
|
|||
|
|
|
|||
|
|
# 要求 package.json 中的 script 形如:build:sit, build:test, build:prod
|
|||
|
|
RUN npm run build:${BUILD_ENV}
|
|||
|
|
|
|||
|
|
# ===============================
|
|||
|
|
# 2) 生产镜像阶段
|
|||
|
|
# ===============================
|
|||
|
|
FROM nginx:1.25-alpine AS runtime
|
|||
|
|
|
|||
|
|
# 清理默认 nginx 静态内容
|
|||
|
|
RUN rm -rf /usr/share/nginx/html/*
|
|||
|
|
|
|||
|
|
# 拷贝 build 结果
|
|||
|
|
COPY --from=build /app/dist /usr/share/nginx/html/
|
|||
|
|
|
|||
|
|
# 权限
|
|||
|
|
RUN chmod -R 755 /usr/share/nginx/html
|
|||
|
|
|
|||
|
|
EXPOSE 80
|
|||
|
|
|
|||
|
|
CMD ["nginx", "-g", "daemon off;"]
|
|||
|
|
|