1核2g 做网站,wordpress站长地图,如何注册一家投资公司,华为网站建站目录 序言为什么选择 Quarkus Native Image#xff1f;性能优势便捷的云原生部署 搭建项目构建可执行文件方式一#xff1a;配置GraalVM方式二#xff1a;容器运行错误示例构建过程分析 创建docker镜像基于可执行文件命令式构建基于dockerfile构建方式一#xff1a;构建mic… 目录 序言为什么选择 Quarkus Native Image性能优势便捷的云原生部署 搭建项目构建可执行文件方式一配置GraalVM方式二容器运行错误示例构建过程分析 创建docker镜像基于可执行文件命令式构建基于dockerfile构建方式一构建micro base image方式二构建minimal base image方式三使用dockerfile多阶段构建 序言
为什么选择 Quarkus Native Image
性能优势
快速启动时间 传统的 Java 应用运行在 JVMJava Virtual Machine上启动时需要进行类加载、字节码解释和 JITJust-In-Time编译等一系列过程这些过程会导致启动时间较长。而 Quarkus 的 Native Image 使用 GraalVM 进行本地编译直接将 Java 应用编译成机器码。这样在应用启动时几乎不需要任何额外的初始化步骤启动时间可以快一个数量级。 例如传统的 Java 应用可能需要几秒钟甚至更长时间才能完全启动而使用 Quarkus Native Image 的应用通常在几十毫秒内即可启动。这对于需要快速响应和弹性扩展的场景如微服务架构和无服务器架构尤为重要。低内存占用 由于 Quarkus Native Image 在编译时进行了一系列优化包括去除未使用的代码和优化内存布局生成的本地二进制文件的内存占用显著减少。这种优化不仅减少了运行时的内存消耗还降低了垃圾回收的频率和开销。 对于在云环境中运行的应用这种内存占用的减少意味着可以在相同的硬件资源上运行更多的实例提升了资源利用率和性价比。
便捷的云原生部署
轻量级容器 传统的 Java 应用在容器化部署时需要包含完整的 JVM 环境这会增加容器镜像的大小。而 Quarkus Native Image 生成的二进制文件不依赖 JVM可以显著减小容器镜像的体积。例如一个传统的 Java 应用的容器镜像可能有几百 MB而使用 Quarkus Native Image 的镜像可能只有几十 MB。
这种轻量级容器的优势在于 1、更快的镜像拉取在部署和扩展应用时镜像的拉取速度更快减少了启动时间。 2、更低的存储成本减小了存储镜像所需的空间节省了存储成本。
Kubernetes 集成 Quarkus 天生为 Kubernetes 设计提供了很多开箱即用的特性简化了在 Kubernetes 环境中的部署和管理。例如 1、自动生成 Kubernetes 资源配置通过 Quarkus 的扩展可以自动生成 Deployment、Service 等 Kubernetes 资源配置减少了手动配置的工作量。 2、与 Kubernetes 原生工具集成Quarkus 提供了与 Kubernetes 原生工具如 Helm 和 OpenShift的集成方便应用的打包、部署和管理。 3、健康检查和监控Quarkus 提供了内置的健康检查、指标收集和分布式跟踪支持方便在 Kubernetes 环境中进行应用的监控和管理。
搭建项目
之前的文章按照官网指南构建第一个quarkus项目并启动运行。 【quarkus系列】创建quarkus第一个应用程序
这篇文章我们开始学习如何本地构建quarkus可执行文件。
官网指南中本地开发环境需要满足以下条件
1、按照JDK17版本
2、本地有docker环境
接着上篇文章中的开发代码继续开发
关于构建成native本地文件核心配置pom.xml
profilesprofileidnative/idactivationpropertynamenative/name/property/activationpropertiesskipITsfalse/skipITsquarkus.native.enabledtrue/quarkus.native.enabled/properties/profile
/profiles默认构建会执行native文件
其次或者使用命令行 -Dquarkus.native.enabledtrue 作为属性传递
构建可执行文件
官网指南给出多种构建方式优先介绍常用的方式
方式一配置GraalVM
方式一推荐使用方式二
安装并配置GraalVM,官网链接https://quarkus.io/guides/building-native-image#configuring-graalvm
如图
运行命令
./mvnw install -Dnative如果使用该命令没有配置GraalVM,执行报错如下
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:2.13.3.Final:build (default) on project getting-started: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR] [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Cannot find the native-image in the GRAALVM_HOME, JAVA_HOME and System PATH. Install it using gu install native-image
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.getNativeImageBuildRunner(NativeImageBuildStep.java:314)
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:212)
[ERROR] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
[ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:580)
[ERROR] at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
[ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
[ERROR] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
[ERROR] at java.base/java.lang.Thread.run(Thread.java:1583)
方式二容器运行
相对于方式一更推荐使用方式二开发无需配置以上环境变量直接启动docker即可
必要条件确保有一个有效的容器运行时Docker、podman环境
首先将本地服务器docker启动
构建可执行命令
./mvnw install -Dnative -DskipTests -Dquarkus.native.container-buildtrue显示选择运行时容器
官方也可以显式选择容器运行命令如下
此处我们仍然选择使用docker
./mvnw install -Dnative -Dquarkus.native.container-buildtrue -Dquarkus.native.container-runtimedocker优化构建命令 使用命令构建不方便也可以将其设置在application.properties quarkus.native.container-buildtrue
运行命令./mvnw install -Dnative -DskipTests即可
错误示例
如果docker未启动则报错如图 日志中很明显提示需要运行docker
构建过程分析
docker启动之后开始pull image ,如图 docker同时会启动构建native镜像的容器如图 构建完成之后本地项目会生成可执行文件如图
创建docker镜像
基于可执行文件命令式构建
构建命令
./mvnw package -Dnative -Dquarkus.native.container-buildtrue -Dquarkus.container-image.buildtrue控制台日志
Finished generating getting-started-1.0.0-SNAPSHOT-runner in 3m 14s.
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] docker run --env LANGC --rm -v /quarkus-projects/getting-started/target/getting-started-1.0.0-SNAPSHOT-native-image-source-jar:/project:z --entrypoint /bin/bash quay.io/quarkus/ubi-quarkus-native-image:22.2-java17 -c objcopy --strip-debug getting-started-1.0.0-SNAPSHOT-runner
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 218135ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:43 min
[INFO] Finished at: 2024-05-13T18:47:0608:00
[INFO] ------------------------------------------------------------------------
从控制台中可以看到已经完成docker镜像的创建以及镜像标签22.2-java17
输入docker images查看镜像是否生成
基于dockerfile构建
方式一构建micro base image
Micro base image 通常是指极度精简的基础镜像这类镜像仅包含运行应用所需的最基本的依赖和工具去除了所有不必要的部分。 特点: 1、极小的体积micro base image 的目标是将镜像体积降到最低以便快速传输和启动。 2、最小依赖只包含运行应用所需的最基本的库和工具通常没有包管理器、shell 等组件。 3、安全性由于镜像内的组件极少减少了攻击面提高了安全性。 4、性能更小的镜像体积和更少的组件有助于快速启动和高效运行。
路径src/main/docker文件名Dockerfile.native-micro
内容如下
FROM quay.io/quarkus/quarkus-micro-image:2.0
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD [./application, -Dquarkus.http.host0.0.0.0]
与命令同理一样需要依赖本机的可执行文件故不能删除可执行文件
可以使用以下命令生成 docker 映像
docker build -f src/main/docker/Dockerfile.native-micro -t quarkus-quickstart/getting-started .运行镜像命令
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started方式二构建minimal base image
Minimal base image 通常指的是精简但仍保留了一些基础工具和库的镜像这类镜像比 micro base image 体积稍大但更易用。
特点 1、较小的体积相比完整的操作系统镜像minimal base image 体积较小但比 micro base image 略大。 2、基本工具和库包含一些常用的工具和库如包管理器、shell、调试工具等方便开发和调试。 3、较高的灵活性在保持精简的同时提供了一定的灵活性和便利性适合大多数应用场景。 4、易用性提供了更多的基础设施支持易于使用和配置。 路径src/main/docker文件名Dockerfile.native
内容如下
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9
WORKDIR /work/
RUN chown 1001 /work \ chmod grwX /work \ chown 1001:root /work
COPY --chown1001:root target/*-runner /work/applicationEXPOSE 8080
USER 1001CMD [./application, -Dquarkus.http.host0.0.0.0]以上两种方式均需要本地生成native可执行文件故如果本地可执行文件删除则需要先执行命令:./mvnw install -Dnative -DskipTests
方式三使用dockerfile多阶段构建
使用dockerfile直接在容器中生成本机可执行文件同时完成镜像的构建;
第一阶段使用 Maven 或 Gradle 构建本机可执行文件;
第二阶段是复制生成的本机可执行文件的最小映像;
Dockerfile
## Stage 1 : build with maven builder image with native capabilities
FROM quay.io/quarkus/ubi-quarkus-mandrel-builder-image:jdk-21 AS build
COPY --chownquarkus:quarkus mvnw /code/mvnw
COPY --chownquarkus:quarkus .mvn /code/.mvn
COPY --chownquarkus:quarkus pom.xml /code/
USER quarkus
WORKDIR /code
RUN ./mvnw -B org.apache.maven.plugins:maven-dependency-plugin:3.1.2:go-offline
COPY src /code/src
RUN ./mvnw package -Dnative## Stage 2 : create the docker final image
FROM quay.io/quarkus/quarkus-micro-image:2.0
WORKDIR /work/
COPY --frombuild /code/target/*-runner /work/application# set up permissions for user 1001
RUN chmod 775 /work /work/application \ chown -R 1001 /work \ chmod -R grwX /work \ chown -R 1001:root /workEXPOSE 8080
USER 1001CMD [./application, -Dquarkus.http.host0.0.0.0]同理将dockerfile文件路径src/main/docker/Dockerfile.multistage.
构建镜像命令
docker build -f src/main/docker/Dockerfile.multistage -t quarkus-quickstart/getting-started .运行命令
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
文章转载自: http://www.morning.wzwyz.cn.gov.cn.wzwyz.cn http://www.morning.bchhr.cn.gov.cn.bchhr.cn http://www.morning.darwallet.cn.gov.cn.darwallet.cn http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn http://www.morning.pbmg.cn.gov.cn.pbmg.cn http://www.morning.shxrn.cn.gov.cn.shxrn.cn http://www.morning.jydky.cn.gov.cn.jydky.cn http://www.morning.rqfnl.cn.gov.cn.rqfnl.cn http://www.morning.gmyhq.cn.gov.cn.gmyhq.cn http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn http://www.morning.xfxnq.cn.gov.cn.xfxnq.cn http://www.morning.prfrb.cn.gov.cn.prfrb.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.ljjph.cn.gov.cn.ljjph.cn http://www.morning.c7513.cn.gov.cn.c7513.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.bfwk.cn.gov.cn.bfwk.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.sgnjg.cn.gov.cn.sgnjg.cn http://www.morning.pwqyd.cn.gov.cn.pwqyd.cn http://www.morning.snccl.cn.gov.cn.snccl.cn http://www.morning.qfrsm.cn.gov.cn.qfrsm.cn http://www.morning.mggwr.cn.gov.cn.mggwr.cn http://www.morning.bsplf.cn.gov.cn.bsplf.cn http://www.morning.rcjwl.cn.gov.cn.rcjwl.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.xdjwh.cn.gov.cn.xdjwh.cn http://www.morning.sskhm.cn.gov.cn.sskhm.cn http://www.morning.ysmw.cn.gov.cn.ysmw.cn http://www.morning.dsncg.cn.gov.cn.dsncg.cn http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.qbfs.cn.gov.cn.qbfs.cn http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn http://www.morning.rhqr.cn.gov.cn.rhqr.cn http://www.morning.lbrrn.cn.gov.cn.lbrrn.cn http://www.morning.rnxs.cn.gov.cn.rnxs.cn http://www.morning.hjrjr.cn.gov.cn.hjrjr.cn http://www.morning.nxrgl.cn.gov.cn.nxrgl.cn http://www.morning.wdqhg.cn.gov.cn.wdqhg.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn http://www.morning.joinyun.com.gov.cn.joinyun.com http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.lyzwdt.com.gov.cn.lyzwdt.com http://www.morning.lclpj.cn.gov.cn.lclpj.cn http://www.morning.gtwtk.cn.gov.cn.gtwtk.cn http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.gybnk.cn.gov.cn.gybnk.cn http://www.morning.bhgnj.cn.gov.cn.bhgnj.cn http://www.morning.tscsd.cn.gov.cn.tscsd.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn http://www.morning.fcqlt.cn.gov.cn.fcqlt.cn http://www.morning.bfmrq.cn.gov.cn.bfmrq.cn http://www.morning.lqlc.cn.gov.cn.lqlc.cn http://www.morning.sfwcb.cn.gov.cn.sfwcb.cn http://www.morning.xjqhh.cn.gov.cn.xjqhh.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.rywr.cn.gov.cn.rywr.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.rlbg.cn.gov.cn.rlbg.cn http://www.morning.plqhb.cn.gov.cn.plqhb.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.rwyd.cn.gov.cn.rwyd.cn http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn http://www.morning.huxinzuche.cn.gov.cn.huxinzuche.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.bfmrq.cn.gov.cn.bfmrq.cn http://www.morning.ltffk.cn.gov.cn.ltffk.cn http://www.morning.jhswp.cn.gov.cn.jhswp.cn http://www.morning.yrmpr.cn.gov.cn.yrmpr.cn http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn