You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复用多阶段构建中已有的Docker镜像以加速构建?

优化Dockerfile以复用Maven依赖缓存

直接修改Dockerfile,利用Docker分层缓存特性拆分步骤,就能避免每次构建重复下载依赖:

ARG BUILD_PATH=/usr/app

# Building image
FROM maven:3.8.3-openjdk-17 AS maven
ARG BUILD_PATH
RUN mkdir -p $BUILD_PATH
WORKDIR $BUILD_PATH

# 先复制pom.xml,单独完成依赖下载
COPY pom.xml .
RUN mvn dependency:go-offline -Dmaven.test.skip

# 再复制项目全部代码
COPY . .
# 基于已缓存的依赖执行打包
RUN mvn clean package -Dmaven.test.skip

# Final image
FROM eclipse-temurin:17-jdk-alpine
ARG BUILD_PATH
COPY --from=maven $BUILD_PATH/target/app.jar /

ENTRYPOINT ["java", "-jar", "/app.jar"]

核心逻辑:

  • Docker构建是分层执行的,只要某一层的输入内容没变化,就会复用之前的缓存层。
  • 把pom.xml单独复制并执行依赖下载,只要依赖配置不修改,这一层的缓存就会保留,不会重复下载依赖。
  • 后续复制代码、打包的步骤,只会在代码变更时重新执行,不会触发依赖的重复下载。

额外提示:

  • 多模块项目可以单独复制父pom和子模块pom文件,进一步细化缓存粒度。
  • 构建时不要加--no-cache参数,除非你需要完全重新构建所有层。

内容的提问来源于stack exchange,提问作者Rafael Santiago Altoé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 18:24:55