我是如何把Docker镜像从1.2G缩小到89M的

Raj Kumar | 2026-08-21T05:48:00 | DevOps, Cloud

通过多阶段构建、distroless基础镜像和.dockerignore优化,把Java应用镜像从1.2G瘦到89M

# 我是如何把Docker镜像从1.2G缩小到89M的 我们的Java服务Docker镜像1.2G,每次部署pull半天。花了一下午优化,最终缩到89M。 ## 优化前 ```dockerfile # 不要学这个写法! FROM ubuntu:22.04 RUN apt-get update && apt-get install -y openjdk-17-jdk maven COPY . /app WORKDIR /app RUN mvn clean package CMD ["java", "-jar", "target/app.jar"] # 镜像大小:1.2G ``` ## 优化后:多阶段构建 ```dockerfile # 阶段一:构建 FROM maven:3.9-eclipse-temurin-17 AS builder WORKDIR /build COPY pom.xml . RUN mvn dependency:go-offline # 先下载依赖,利用缓存 COPY src ./src RUN mvn clean package -DskipTests # 阶段二:运行(用distroless极简镜像) FROM gcr.io/distroless/java17-debian11 COPY --from=builder /build/target/app.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] # 镜像大小:89M ``` ## 关键技巧 1. **多阶段构建**:构建工具不进最终镜像 2. **distroless**:没有shell、没有包管理器,只有JRE 3. **依赖缓存**:先COPY pom.xml再mvn dependency:go-offline 4. **.dockerignore**:排除target、.git、IDE配置等 镜像从1.2G到89M,部署时间从3分钟降到20秒,爽。

← Back to Blog