You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建支持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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:57:49