在基于 Java 开发的 Spring Boot 项目中,推荐使用 官方、轻量、安全且专为 Java 优化的镜像模板。以下是主流且最佳实践的选择(按推荐优先级排序):
✅ 首选:eclipse-temurin:<version>-jdk-jre(推荐 JDK 17/21 + JRE 或 slim 变体)
(原 adoptopenjdk / ibm-semeru-runtimes 的继任者,由 Eclipse Adoptium 项目维护,被广泛认可为事实标准)
- ✅ 官方支持、定期安全更新、符合 TCK 认证
- ✅ 提供
jre(仅运行时)和jdk(含编译工具)版本;Spring Boot 应用通常只需 JRE,更轻量 - ✅ 多架构支持(amd64/arm64)
- ✅
slim或alpine变体可进一步减小体积(但注意 Alpine 使用 musl libc,需确认 Spring Boot 依赖兼容性)
📌 示例(推荐组合):
# 推荐:JDK 17(LTS)+ jre-slim(Debian base,稳定兼容)
FROM eclipse-temurin:17-jre-slim
# 或 JDK 21(最新 LTS)+ jre-slim
# FROM eclipse-temurin:21-jre-slim
COPY target/myapp.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
⚠️ 注意事项:
- ❌ 避免使用
openjdk:<version>-alpine(如openjdk:17-alpine):
Alpine 基于 musl libc,某些 JNI 库(如 JNA、Netty native transport、JDBC 驱动如 Oracle/SQL Server)可能不兼容或需额外配置;Spring Boot 3.x + GraalVM 原生镜像除外(此时 Alpine 是推荐目标)。 - ❌ 避免
java:8、openjdk:8等已 EOL(End-of-Life)镜像:无安全更新,违反生产规范。 - ❌ 避免
springio/spring-boot-docker等非官方/已废弃镜像(该仓库已归档)。
🔧 进阶优化建议:
-
多阶段构建(推荐)
利用 Maven 构建阶段 + JRE 运行阶段,彻底分离构建依赖,最小化最终镜像:# 构建阶段 FROM maven:3.9-amazoncorretto-17 AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline -B COPY . . RUN mvn package -DskipTests # 运行阶段(极简) FROM eclipse-temurin:17-jre-slim COPY --from=build /app/target/*.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] -
启用 JVM 优化参数(可选)
如-XX:+UseContainerSupport(自动适配容器内存/CPU)、-Xms512m -Xmx512m(避免 OOMKilled)、-Dfile.encoding=UTF-8 -
Spring Boot 3.x 用户注意:
- 要求最低 JDK 17,推荐 JDK 21
- 若使用 GraalVM Native Image,则选用
ghcr.io/graalvm/native-image:21等专用镜像
| ✅ 总结推荐模板: | 场景 | 推荐镜像 |
|---|---|---|
| 通用生产环境(Spring Boot 2.7+/3.x) | eclipse-temurin:17-jre-slim 或 eclipse-temurin:21-jre-slim |
|
| 极致轻量 + 兼容性要求高 | eclipse-temurin:17-jre-focal(Ubuntu base,比 slim 更全的库) |
|
| 需要构建 + 运行一体化(简单项目) | eclipse-temurin:17-jdk-slim(含 Maven 时再分阶段更佳) |
💡 补充:可通过 https://hub.docker.com/_/eclipse-temurin 查看所有 tag 和说明;也可参考 Spring 官方文档:Building Container Images
需要我为你生成一个完整的、带健康检查/多阶段/环境变量的最佳实践 Dockerfile 吗?
PHPWP博客