fix: 移除 BuildKit 依赖,使用传统 Docker 层缓存
- 移除 BuildKit 语法和缓存挂载 - 使用传统 Docker 层缓存优化 - 优化 Dockerfile 层顺序(pom -> 依赖 -> 代码) - 仍然可以获得较好的缓存效果
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
# ============================================
|
||||
# 多阶段构建:Maven 编译 + 运行时镜像
|
||||
# 使用 Docker BuildKit 缓存加速构建
|
||||
# 使用 Docker 层缓存加速构建
|
||||
# ============================================
|
||||
|
||||
# ============ 构建阶段 ============
|
||||
@@ -16,6 +16,7 @@ ARG JAR_NAME
|
||||
ARG SKIP_TESTS=true
|
||||
|
||||
# 复制 pom 文件(利用 Docker 层缓存)
|
||||
# 先复制 pom,再下载依赖,这样依赖层可以被缓存
|
||||
COPY pom.xml .
|
||||
COPY viewsh-dependencies/pom.xml viewsh-dependencies/
|
||||
COPY viewsh-framework/pom.xml viewsh-framework/
|
||||
@@ -32,17 +33,14 @@ COPY viewsh-module-iot/viewsh-module-iot-api/pom.xml viewsh-module-iot/viewsh-mo
|
||||
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/
|
||||
|
||||
# 下载依赖(使用 BuildKit 缓存挂载)
|
||||
# 缓存会保存在 Docker 的缓存卷中,不会包含在最终镜像里
|
||||
RUN --mount=type=cache,target=/root/.m2 \
|
||||
mvn dependency:go-offline -B -q || true
|
||||
# 下载依赖(这一层会被缓存,除非 pom 文件变化)
|
||||
RUN mvn dependency:go-offline -B -q || true
|
||||
|
||||
# 复制源代码
|
||||
# 复制源代码(代码变化不会影响依赖层的缓存)
|
||||
COPY . .
|
||||
|
||||
# 编译打包(使用 BuildKit 缓存挂载)
|
||||
RUN --mount=type=cache,target=/root/.m2 \
|
||||
mvn clean package -pl ${MODULE_NAME} -am -DskipTests=${SKIP_TESTS} -B -q
|
||||
# 编译打包
|
||||
RUN mvn clean package -pl ${MODULE_NAME} -am -DskipTests=${SKIP_TESTS} -B -q
|
||||
|
||||
# ============ 运行阶段 ============
|
||||
FROM eclipse-temurin:17-jre-alpine
|
||||
|
||||
Reference in New Issue
Block a user