第 12 章 生成原生可执行文件
您可以使用 Podman 或 Docker 等容器运行时从 Quarkus 应用程序生成原生可执行文件。Quarkus 使用构建器镜像生成二进制可执行文件,您可将其与 Red Hat Universal Base Images RHEL8-UBI 和 RHEL8-UBI 一同使用。红帽构建的 Quarkus 1.11 使用 registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3 作为 quarkus.builder-image 属性的默认值。
应用程序的原生可执行文件包含应用程序代码、所需库、Java API 以及虚拟机(VM)的更精简版本。较小的虚拟机基础提高了应用程序的启动时间,并生成最小磁盘占用量。
流程
打开 Getting Started 项目
pom.xml文件,并验证它是否包含原生配置集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意使用 Quarkus
原生配置集可让您运行原生的可执行文件和原生镜像测试。使用以下方法之一构建原生可执行文件:
使用 Docker 构建原生可执行文件:
./mvnw package -Pnative -Dquarkus.native.container-build=true
./mvnw package -Pnative -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Podman 构建原生可执行文件:
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这些命令
在目标目录中创建getting-started-*-runner二进制文件。重要将 Quarkus 应用程序编译到原生可执行文件的过程中会占用大量内存。您可以通过设置
quarkus.native-image-xmx配置属性来限制原生编译过程中使用的内存量。设置低内存限制可能会增加构建时间。如需了解更多详细信息,请参阅 原生可执行文件配置属性。
运行原生可执行文件:
./target/getting-started-*-runner
./target/getting-started-*-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您构建原生的可执行程序时,启用了
prod配置集,并使用prod配置集运行 Quarkus 原生测试。您可以使用quarkus.test.native-image-profile属性更改它。
12.1. 手动创建容器 复制链接链接已复制到粘贴板!
本节演示了如何使用您的应用程序为 Linux X86_64 手动创建容器镜像。当使用 Quarkus 原生容器生成原生镜像时,它会创建一个以 Linux X86_64 操作系统为目标的可执行文件。如果您的主机操作系统与这个操作系统不同,您将无法直接运行该二进制文件,您需要手动创建容器。
您的 Quarkus Getting Started 项目在 src/main/docker 目录中包含 Dockerfile.native,包含以下内容:
流程
使用以下方法之一构建原生 Linux 可执行文件:
使用 Docker 构建原生可执行文件:
./mvnw package -Pnative -Dquarkus.native.container-build=true
./mvnw package -Pnative -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Podman 构建原生可执行文件:
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下方法之一构建容器镜像:
使用 Docker 构建容器镜像:
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Podman 构建容器镜像
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行容器:
使用 Docker 运行容器:
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-startedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Podman 运行容器:
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-startedCopy to Clipboard Copied! Toggle word wrap Toggle overflow