Docker多阶段构建极致优化指南

Docker多阶段构建优化指南

使用多阶段构建

多阶段构建可以显著减少最终镜像的大小,同时加快构建速度。在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值