如何构建支持JDK 19与虚拟线程的Quarkus Docker镜像
构建基于OpenJDK 19的Quarkus Docker镜像
下面提供两种可靠的方案,解决红帽官方镜像仅支持JDK17的限制:
方案一:使用官方OpenJDK 19镜像的多阶段构建
这种方式遵循Quarkus最佳实践,构建过程和运行环境分离,镜像体积更小。
创建如下Dockerfile:
# 构建阶段:使用Maven + JDK 19镜像完成应用编译打包 FROM maven:3.9-eclipse-temurin-19 AS builder WORKDIR /project # 先拷贝pom.xml下载依赖,利用Docker缓存优化构建速度 COPY pom.xml . RUN mvn dependency:go-offline -B # 拷贝源码并构建可执行jar包 COPY src src RUN mvn package -Dquarkus.package.type=uber-jar # 运行阶段:使用轻量的OpenJDK 19 JRE镜像 FROM eclipse-temurin:19-jre-alpine WORKDIR /app # 从构建阶段拷贝编译好的jar包 COPY --from=builder /project/target/*-runner.jar app.jar EXPOSE 8080 # 启动应用 CMD ["java", "-jar", "app.jar"]
构建与验证
- 执行构建命令:
docker build -t quarkus-jdk19-app . - 启动容器验证:
docker run -p 8080:8080 quarkus-jdk19-app - 检查JDK版本:
docker run --rm quarkus-jdk19-app java -version,确认输出为OpenJDK 19
方案二:在UBI镜像上手动安装OpenJDK 19
如果你偏好基于红帽UBI生态,可以手动在UBI镜像中安装OpenJDK 19:
创建如下Dockerfile:
# 基于UBI8最小镜像 FROM registry.access.redhat.com/ubi8/ubi-minimal:latest # 安装依赖并下载解压OpenJDK 19 RUN microdnf update -y && \ microdnf install -y wget tar && \ # 可替换为OpenJDK官网最新的JDK19二进制包地址 wget https://download.java.net/java/GA/jdk19.0.2/77062634d192471688e81f320d1d41d9/7/GPL/openjdk-19.0.2_linux-x64_bin.tar.gz && \ tar xzf openjdk-19.0.2_linux-x64_bin.tar.gz -C /opt && \ # 清理安装包和临时依赖,减小镜像体积 rm openjdk-19.0.2_linux-x64_bin.tar.gz && \ microdnf remove -y wget tar && \ microdnf clean all # 配置JDK环境变量 ENV JAVA_HOME=/opt/jdk-19.0.2 ENV PATH=$JAVA_HOME/bin:$PATH # 拷贝Quarkus构建产物 WORKDIR /app COPY target/*-runner.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar"]
关键注意事项
- 确保Quarkus版本支持JDK 19:Quarkus 2.16及以上版本正式支持JDK 19,若使用旧版本请先升级
pom.xml或build.gradle中的Quarkus依赖版本。 - 虚拟线程功能验证:可在应用中添加测试代码(比如用
Thread.startVirtualThread()创建虚拟线程),运行容器后通过接口或日志确认功能正常。
内容的提问来源于stack exchange,提问作者sysid
相关产品推荐
相关产品推荐

