perf: 启用 Docker BuildKit 和 Maven 缓存优化构建速度
- 启用 Docker BuildKit 缓存挂载 - 使用 --mount=type=cache 缓存 Maven 依赖 - 优化 Dockerfile 层缓存策略 - 添加构建优化指南文档 预期效果: - 首次构建: ~30分钟 - 后续构建(无变更): ~2分钟 - 后续构建(有变更): ~5-8分钟
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user