在 Spring Boot 项目中,选择 Docker 镜像时需根据具体需求(如 JDK 版本、镜像大小、安全性等)。以下是常见推荐及适用场景:
1. 官方镜像(推荐基础选择)
- 镜像名:
eclipse-temurin(原 AdoptOpenJDK)FROM eclipse-temurin:17-jdk-jammy - 特点:
- 由 Eclipse 基金会维护,社区信任度高。
- 提供 LTS 版本(如 JDK 11/17/21)。
- 支持多种基础系统(
jammy为 Ubuntu 22.04,alpine更轻量但需注意兼容性)。
2. 轻量级镜像(适合生产环境)
- 使用 JRE 而非 JDK(若只需运行编译后的应用):
FROM eclipse-temurin:17-jre-jammy - Alpine 镜像(更小体积):
FROM eclipse-temurin:17-jdk-alpine- ⚠️ 注意:Alpine 使用 musl libc,可能需测试兼容性(部分依赖如
glibc的库需额外处理)。
- ⚠️ 注意:Alpine 使用 musl libc,可能需测试兼容性(部分依赖如
3. Spring Boot 分层构建(优化构建速度与层缓存)
FROM eclipse-temurin:17-jdk-jammy AS builder
WORKDIR /app
COPY .mvn .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offline
COPY src ./src
RUN ./mvnw package -DskipTests
FROM eclipse-temurin:17-jre-jammy
COPY --from=builder /app/target/your-app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
- 优点: 利用多阶段构建减少最终镜像体积,依赖缓存提速构建。
4. 其他替代方案
- Amazon Corretto(AWS 环境首选):
FROM amazoncorretto:17 - OpenJDK 官方镜像(更新较慢):
FROM openjdk:17-jdk-slim
5. 避免的镜像
- 过时的镜像(如
openjdk:8已无官方支持)。 - 非官方维护的镜像(可能存在安全风险)。
选择建议:
- 开发/测试:直接使用
eclipse-temurin:17-jdk(功能完整)。 - 生产环境:优先选择
-jre或-alpine版本,并通过分层构建优化。 - 云环境:如 AWS 用 Amazon Corretto,Azure 用 Microsoft OpenJDK。
根据实际需求调整基础系统(如 -jammy、-alpine)和 JDK 版本(推荐 LTS 版本)。
云服务器