From 931d3ee1b7a2402aac435290b340662545533e89 Mon Sep 17 00:00:00 2001 From: Mike Solar Date: Mon, 21 Sep 2026 13:07:50 +0800 Subject: [PATCH] improve: use alibaba mirror for maven and npmmirror for pnpm --- Dockerfile | 14 ++++++++-- docker/maven-settings.xml | 57 +++++++++++++++++++++++++++++++++++++++ frontend/Dockerfile | 16 +++++++---- 3 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 docker/maven-settings.xml diff --git a/Dockerfile b/Dockerfile index 558bdea..f58641b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,12 +3,22 @@ # 构建:docker build -t lab-backend . # 运行:docker run -p 8080:8080 -e SPRING_PROFILES_ACTIVE=mariadb \ # -e DB_HOST=host.docker.internal -e DB_USER=lab -e DB_PASSWORD=lab123456 lab-backend +# +# 国内加速:构建阶段使用阿里云 Maven 镜像(docker/maven-settings.xml) +# 如需走官方中央仓库:docker build --build-arg MAVEN_MIRROR=false -t lab-backend . # ===================================================================== # ---------- 构建阶段 ---------- -FROM docker.io/library/maven:3.9-eclipse-temurin-21 AS build +FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /build +# MAVEN_MIRROR=false 时跳过阿里云镜像配置,使用默认中央仓库 +ARG MAVEN_MIRROR=true +COPY docker/maven-settings.xml /tmp/maven-settings.xml +RUN if [ "$MAVEN_MIRROR" = "true" ]; then \ + mkdir -p /root/.m2 && cp /tmp/maven-settings.xml /root/.m2/settings.xml; \ + fi + # 先只复制 pom,利用 Docker 层缓存预热依赖 COPY pom.xml . RUN mvn -B -q -Dmaven.test.skip=true dependency:go-offline @@ -19,7 +29,7 @@ RUN mvn -B -q -Dmaven.test.skip=true package \ && cp target/*.jar /build/app.jar # ---------- 运行阶段 ---------- -FROM docker.io/library/eclipse-temurin:21-jre +FROM eclipse-temurin:21-jre WORKDIR /opt/app # 以非 root 用户运行 diff --git a/docker/maven-settings.xml b/docker/maven-settings.xml new file mode 100644 index 0000000..8e3da70 --- /dev/null +++ b/docker/maven-settings.xml @@ -0,0 +1,57 @@ + + + + + + + aliyun-public + Aliyun Public Repository + https://maven.aliyun.com/repository/public + * + + + + + + aliyun-repos + + + + aliyun-central + https://maven.aliyun.com/repository/central + true + false + + + aliyun-spring + https://maven.aliyun.com/repository/spring + true + false + + + + + aliyun-plugin + https://maven.aliyun.com/repository/public + true + false + + + + + + + aliyun-repos + + diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 3ea02fe..bb3b8bb 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,24 +1,30 @@ # ===================================================================== # 前端镜像:pnpm 构建静态资源 -> Nginx 托管(同时反代 /api 到后端) # 构建:docker build -t lab-frontend ./frontend +# +# 国内加速:npm/pnpm 使用 npmmirror(淘宝镜像) +# 如需走官方源:docker build --build-arg NPM_REGISTRY=https://registry.npmjs.org -t lab-frontend ./frontend # ===================================================================== # ---------- 构建阶段 ---------- -FROM docker.io/library/node:24-alpine AS build +FROM node:24-alpine AS build WORKDIR /app -# 使用与本地一致的 pnpm 主版本,锁定依赖保证可复现 -RUN npm install -g pnpm@11.3.0 +# 使用 npmmirror 加速 npm 全局安装与依赖拉取 +ARG NPM_REGISTRY=https://registry.npmmirror.com +RUN npm config set registry "$NPM_REGISTRY" \ + && npm install -g pnpm@11.3.0 \ + && pnpm config set registry "$NPM_REGISTRY" # 先装依赖,充分利用层缓存 COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ -RUN pnpm install --frozen-lockfile +RUN pnpm install --frozen-lockfile --registry="$NPM_REGISTRY" COPY . . RUN pnpm build # ---------- 运行阶段 ---------- -FROM docker.io/library/nginx:1.27-alpine +FROM nginx:1.27-alpine COPY nginx.conf /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html