使用多阶段构建
多阶段构建可以显著减少最终镜像的大小,同时加快构建速度。在Dockerfile中分离依赖下载和代码编译阶段,避免重复下载依赖项。
FROM maven:3.8.6-jdk-11 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
FROM openjdk:11-jre-slim
COPY --from=build /app/target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
缓存Maven依赖
通过将Maven本地仓库挂载为卷或使用dependency:go-offline提前下载依赖项,避免每次构建时重新下载。
# 利用Docker层缓存机制
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package
并行构建与优化Maven参数
在mvn命令中启用并行构建(-T参数)并跳过测试(-DskipTests),减少构建时间。
RUN mvn package -T 1C -DskipTests
使用更小的基础镜像
替换官方Maven镜像为轻量级基础镜像(如eclipse-temurin),或使用Alpine Linux版本减少镜像体积。
FROM eclipse-temurin:11-jdk-jammy AS build
构建缓存工具
利用BuildKit(Docker 18.09+)的缓存功能,通过--mount=type=cache缓存Maven本地仓库。
# syntax=docker/dockerfile:1.4
RUN --mount=type=cache,target=/root/.m2 \
mvn package -DskipTests
启动构建时启用BuildKit:
DOCKER_BUILDKIT=1 docker build .
分层构建策略
将频繁变更的层(如src目录)放在Dockerfile的后面,确保不经常变更的层(如依赖项)能被缓存复用。
离线模式与依赖预下载
在本地生成依赖项后复制到镜像中,完全避免在线下载。
mvn dependency:go-offline
tar -czf dependencies.tar.gz ~/.m2
ADD dependencies.tar.gz /root/.m2
精简构建上下文
通过.dockerignore文件排除无关文件(如target/、.git/),减少构建上下文传输时间。
**/target/
.git/
*.iml
Docker多阶段构建优化指南
213

被折叠的 条评论
为什么被折叠?



