perf: 启用 Docker BuildKit 和 Maven 缓存优化构建速度
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

- 启用 Docker BuildKit 缓存挂载
- 使用 --mount=type=cache 缓存 Maven 依赖
- 优化 Dockerfile 层缓存策略
- 添加构建优化指南文档

预期效果:
- 首次构建: ~30分钟
- 后续构建(无变更): ~2分钟
- 后续构建(有变更): ~5-8分钟
This commit is contained in:
lzh
2026-01-13 15:36:29 +08:00
parent deabc90f9a
commit 25fad8d6fd
3 changed files with 308 additions and 21 deletions

View File

@@ -1,45 +1,55 @@
# 多阶段构建 Dockerfile 模板
# 适用于所有 Spring Boot 服务
# syntax=docker/dockerfile:1.4
# ============================================
# 多阶段构建Maven 编译 + 运行时镜像
# 使用 Docker BuildKit 缓存加速构建
# ============================================
# ============ 构建阶段 ============
FROM eclipse-temurin:17-jdk-alpine AS builder
FROM maven:3.9.9-eclipse-temurin-17-alpine AS builder
# 安装必要工具
RUN apk add --no-cache maven
# 设置工作目录
WORKDIR /build
# 复制 Maven 配置文件(利用 Docker 缓存)
# 构建参数
ARG MODULE_NAME
ARG JAR_NAME
ARG SKIP_TESTS=true
# 复制 pom 文件(利用 Docker 层缓存)
COPY pom.xml .
COPY viewsh-dependencies/pom.xml viewsh-dependencies/
COPY viewsh-framework/pom.xml viewsh-framework/
COPY viewsh-gateway/pom.xml viewsh-gateway/
COPY viewsh-module-system/pom.xml viewsh-module-system/
COPY viewsh-module-system/viewsh-module-system-api/pom.xml viewsh-module-system/viewsh-module-system-api/
COPY viewsh-module-system/viewsh-module-system-server/pom.xml viewsh-module-system/viewsh-module-system-server/
COPY viewsh-module-infra/pom.xml viewsh-module-infra/
COPY viewsh-module-infra/viewsh-module-infra-api/pom.xml viewsh-module-infra/viewsh-module-infra-api/
COPY viewsh-module-infra/viewsh-module-infra-server/pom.xml viewsh-module-infra/viewsh-module-infra-server/
COPY viewsh-module-iot/pom.xml viewsh-module-iot/
COPY viewsh-server/pom.xml viewsh-server/
COPY viewsh-module-iot/viewsh-module-iot-core/pom.xml viewsh-module-iot/viewsh-module-iot-core/
COPY viewsh-module-iot/viewsh-module-iot-api/pom.xml viewsh-module-iot/viewsh-module-iot-api/
COPY viewsh-module-iot/viewsh-module-iot-server/pom.xml viewsh-module-iot/viewsh-module-iot-server/
COPY viewsh-module-iot/viewsh-module-iot-gateway/pom.xml viewsh-module-iot/viewsh-module-iot-gateway/
# 下载依赖(利用缓存层
RUN mvn dependency:go-offline -B || true
# 下载依赖(使用 BuildKit 缓存挂载
# 缓存会保存在 Docker 的缓存卷中,不会包含在最终镜像里
RUN --mount=type=cache,target=/root/.m2 \
mvn dependency:go-offline -B -q || true
# 复制源代码
COPY . .
# 构建参数:指定要构建的模块
ARG MODULE_NAME
ARG SKIP_TESTS=true
# 编译打包
RUN if [ "$SKIP_TESTS" = "true" ]; then \
mvn clean package -pl ${MODULE_NAME} -am -DskipTests -B; \
else \
mvn clean package -pl ${MODULE_NAME} -am -B; \
fi
# 编译打包(使用 BuildKit 缓存挂载)
RUN --mount=type=cache,target=/root/.m2 \
mvn clean package -pl ${MODULE_NAME} -am -DskipTests=${SKIP_TESTS} -B -q
# ============ 运行阶段 ============
FROM eclipse-temurin:17-jre-alpine
# 安装必要工具(用于健康检查)
RUN apk add --no-cache wget curl
# 构建参数
ARG MODULE_NAME
ARG JAR_NAME