《OpenShift / RHEL / DevSecOps 汇总目录》
文本已在 OpenShift 4.10 环境中进行验证。

文章目录

  • 创建应用镜像,并 Java 微服务转换可执行程序
  • 生成最小化的应用镜像

创建应用镜像,并 Java 微服务转换可执行程序

  1. 创建测试项目
$ oc new-project quarkus
  1. 使用 ubi-quarkus-native-s2i:22.1-java11 作为基础镜像和 Source-2-Image 方法运行 quarkus-quickstarts 应用中的微服务。
$ oc new-app quay.io/quarkus/ubi-quarkus-native-s2i:22.1-java11~https://github.com/quarkusio/quarkus-quickstarts.git --context-dir=getting-started --name=quarkus-quickstart-native
  1. 查看创建的 BuildConfig,然后查看 Build 运行日志,其中包含了将 Java 应用编译成二进制应用的过程。在完成后会将生成的 quarkus-quickstart-native 镜像推送到 OpenShift 内部的 Image Registry 中。
$ oc get bc quarkus-quickstart-native
NAME                                TYPE     FROM         LATEST
quarkus-quickstart-native           Source   Git          1$ oc logs -f bc/quarkus-quickstart-native
...
以上省略
========================================================================================================================
GraalVM Native Image: Generating 'getting-started-1.0.0-SNAPSHOT-runner' (executable)...
========================================================================================================================
[1/7] Initializing...                                                                                    (7.1s @ 0.28GB)Version info: 'GraalVM 22.1.0 Java 11 CE'C compiler: gcc (redhat, x86_64, 8.5.0)Garbage collector: Serial GC3 user-provided feature(s)1. io.quarkus.runner.Feature2. io.quarkus.runtime.graal.DisableLoggingFeature3. io.quarkus.runtime.graal.ResourcesFeature
[2/7] Performing analysis...  [***********]                                                             (33.9s @ 2.29GB)9,867 (89.55%) of 11,018 classes reachable15,190 (60.66%) of 25,043 fields reachable49,924 (57.36%) of 87,035 methods reachable411 classes,   581 fields, and 1,494 methods registered for reflection68 classes,    88 fields, and    54 methods registered for JNI access
[3/7] Building universe...                                                                               (5.8s @ 0.92GB)
[4/7] Parsing methods...      [***]                                                                      (5.2s @ 2.55GB)
[5/7] Inlining methods...     [*****]                                                                    (8.5s @ 3.66GB)
[6/7] Compiling methods...    [******]                                                                  (34.5s @ 1.78GB)
[7/7] Creating image...                                                                                  (4.5s @ 2.70GB)19.80MB (44.38%) for code area:   32,401 compilation units20.12MB (45.11%) for image heap:   6,756 classes and 245,742 objects4.69MB (10.51%) for other data44.60MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 packages in code area:                               Top 10 object types in image heap:1.73MB sun.security.ssl                                     4.26MB byte[] for code metadata
1001.92KB java.lang.invoke                                     2.33MB java.lang.Class975.00KB java.util                                            2.22MB java.lang.String715.49KB com.sun.crypto.provider                              2.20MB byte[] for general heap data484.63KB sun.security.x509                                    1.81MB byte[] for java.lang.String427.76KB io.netty.buffer                                    925.03KB com.oracle.svm.core.hub.DynamicHubCompanion420.41KB java.lang                                          519.61KB java.util.HashMap$Node405.77KB com.oracle.svm.core.reflect                        458.10KB byte[] for reflection metadata390.50KB java.io                                            445.95KB java.lang.String[]389.44KB java.util.concurrent                               250.41KB java.util.concurrent.ConcurrentHashMap$Node... 365 additional packages                                 ... 2430 additional object types(use GraalVM Dashboard to see all)
------------------------------------------------------------------------------------------------------------------------8.7s (8.3% of total time) in 29 GCs | Peak RSS: 6.31GB | CPU load: 4.78
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:/tmp/src/target/getting-started-1.0.0-SNAPSHOT-native-image-source-jar/getting-started-1.0.0-SNAPSHOT-runner (executable)/tmp/src/target/getting-started-1.0.0-SNAPSHOT-native-image-source-jar/getting-started-1.0.0-SNAPSHOT-runner.build_artifacts.txt
========================================================================================================================
Finished generating 'getting-started-1.0.0-SNAPSHOT-runner' in 1m 44s.
...
以下省略
...
Successfully pushed image-registry.openshift-image-registry.svc:5000/quarkus/quarkus-quickstart-native@sha256:b8d2873fe7100ec2f08c2a504d4d4e1413f8623373c88a33707a4d599f988f99
Push successful
  1. 查看生成的 ImageStreamTag。
$ oc get istag
NAME                                 IMAGE REFERENCE                                                                                                                                              UPDATED
quarkus-quickstart-native:latest     image-registry.openshift-image-registry.svc:5000/quarkus/quarkus-quickstart-native@sha256:b8d2873fe7100ec2f08c2a504d4d4e1413f8623373c88a33707a4d599f988f99   15 minutes ago
ubi-quarkus-native-s2i:22.1-java11   quay.io/quarkus/ubi-quarkus-native-s2i@sha256:29276cfbaf3111ffe272c194b37b5fdf9598e806d60bcae2e7d5e331d4a35a0d                                               18 minutes ago
  1. 对比 ubi-quarkus-native-s2i:22.1-java11 和 quarkus-quickstart-native:latest 镜像的大小,确认镜像都是 1.3G 左右。说明:ubi-quarkus-native-s2i 镜像之所有比较大,是因为其中不但包含了标准的 RHEL UBI 镜像内容,还包含了针对 Quarkus Native 编译的 Source 2 Image 的运行环境。
$ ISTags="quarkus-quickstart-native:latest ubi-quarkus-native-s2i:22.1-java11"
$ for ISTag in $ISTags; do oc get istag $ISTag --output=jsonpath='{.image.dockerImageMetadata.Size}{"\t"}{.metadata.name}{"\n"}'; done
1397020952      quarkus-quickstart-native:latest
1273656913      ubi-quarkus-native-s2i:22.1-java11
  1. 最后可以生成 Route 并测试访问应用。
$ oc expose svc/quarkus-quickstart-native
$ URL_NATIVE="http://$(oc get route | grep quarkus-quickstart-native | awk '{print $2}')"
$ curl $URL_NATIVE/hello/greeting/quarkus

生成最小化的应用镜像

  1. 基于已有的 ImageStream 和 registry.access.redhat.com/ubi9/ubi-minimal:latest 基础镜像,运行 Build 创建出新的应用镜像。
$ oc get is quarkus-quickstart-native
NAME                        IMAGE REPOSITORY                                                                     TAGS     UPDATED
quarkus-quickstart-native   image-registry.openshift-image-registry.svc:5000/quarkus/quarkus-quickstart-native   latest   2 minutes ago$ oc new-build --name=quarkus-quickstart-native-minimal \--source-image=quarkus-quickstart-native \--source-image-path='/home/quarkus/application:.' \--dockerfile=$'FROM registry.access.redhat.com/ubi9/ubi-minimal:latest\nCOPY application /application\nCMD /application\nEXPOSE 8080'
  1. 确认创建了名为 quarkus-quickstart-native-minimal 的 BuildConfig,然后查看 Build 日志。确认在最后会生成 quarkus-quickstart-native-minimal 应用镜像,并将其对送到了 OpenShift 内部 Image Registry 中了。
$ oc get bc quarkus-quickstart-native-minimal
NAME                                TYPE     FROM         LATEST
quarkus-quickstart-native-minimal   Docker   Dockerfile   1$ oc logs -f bc/quarkus-quickstart-native-minimal
...
以上省略
Successfully pushed image-registry.openshift-image-registry.svc:5000/quarkus/quarkus-quickstart-native-minimal@sha256:d0f97dac24939a5620eebabf72f06277e995e6a1a55df4861bcef772e3d924b0
Push successful
  1. 对比刚刚生成的 quarkus-quickstart-native-minimal:latest 应用镜像和第一次生成的 quarkus-quickstart-native:latest 应用镜像大小。确认新镜像只有 50M 左右。
$ ISTags="quarkus-quickstart-native-minimal:latest quarkus-quickstart-native:latest"
$ for ISTag in $ISTags; do oc get istag $ISTag --output=jsonpath='{.image.dockerImageMetadata.Size}{"\t"}{.metadata.name}{"\n"}'; done
50784630        quarkus-quickstart-native-minimal:latest
1397020952      quarkus-quickstart-native:latest
  1. 基于新的应用镜像运行应用。
$ oc get is quarkus-quickstart-native-minimal
NAME                                IMAGE REPOSITORY                                                                             TAGS          UPDATED
quarkus-quickstart-native-minimal   image-registry.openshift-image-registry.svc:5000/quarkus/quarkus-quickstart-native-minimal   latest        2 minutes ago$ oc new-app quarkus-quickstart-native-minimal
$ oc expose svc quarkus-quickstart-native-minimal
$ URL_MINIMAL="http://$(oc get route | grep quarkus-quickstart-native-minimal | awk '{print $2}')"
$ curl $URL_MINIMAL/hello/greeting/quarkus
  1. 进入运行新旧应用镜像的 Pod,确认 /application 和 /tmp 的差异。
$ oc exec deploy/quarkus-quickstart-native-minimal -- ls -al /application /tmp
-rwxr-xr-x. 1 root root 42211232 Oct 16 12:50 /application
/tmp:
total 0
drwxrwxrwt. 1 root       root 25 Oct 16 12:57 .
dr-xr-xr-x. 1 root       root 28 Oct 16 12:57 ..
drwxrwxrwx. 3 1000760000 root 70 Oct 16 13:02 vertx-cache
$ oc exec deploy/quarkus-quickstart-native -- ls -al /application /tmp
ls: cannot access '/application': No such file or directory
/tmp:
total 8
drwxrwxrwt. 1 root       root     25 Oct 16 12:30 .
dr-xr-xr-x. 1 root       root     17 Oct 16 12:30 ..
drwxr-xr-x. 2 quarkus    quarkus  26 Oct 16 12:28 com_aayushatharva_brotli4j_10073115817846
drwxr-xr-x. 2 quarkus    quarkus   6 Oct 16 12:30 hsperfdata_quarkus
-rwx------. 1 root       root    701 Sep  6 17:17 ks-script-16cks60v
-rwx------. 1 root       root    291 Sep  6 17:17 ks-script-yf1frpot
drwxr-xr-x. 6 quarkus    root    154 Oct 16 12:28 src
drwxrwxrwx. 3 1000760000 root     70 Oct 16 12:30 vertx-cache

OpenShift 4 - 从 1.3G 到 50M,以最小化的可执行程序运行 Quarkus 微服务相关推荐

  1. 在OpenShift上扩展Java EE微服务

    这个小系列的前两个部分介绍了如何使用WildFly Swarm构建一个微型JAX-RS服务并将其打包到Docker映像中 . 您学习了如何将此示例部署到OpenShift ,现在该进行一点扩展了. 为 ...

  2. OpenShift 4 之Istio-Tutorial (3) 监控微服务运行

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本章节我们在OpenShift 4的Serivce Mesh环境中集成的Kiali,J ...

  3. OpenShift 4 之Service Mesh教程(1)- 创建ServiceMesh环境,部署Istio的微服务

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 创建ServiceMesh环境 部署Istio的微服务 参考 创建Servi ...

  4. 使用Quarkus在Openshift上构建微服务的快速指南

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! [重磅]到底是什么野生海鲜美味,惹得人们都往泥瓦匠老家买? 作者 | 康仔 来源 | 公众号 ...

  5. openshift 部署_在OpenShift上部署Java EE微服务

    openshift 部署 我昨天用WildFly Swarm在博客上发布了有关简单JAX-RS微服务的博客. 您学习了如何使用Maven构建所谓的"胖子",还使用Maven Doc ...

  6. openshift_在OpenShift上扩展Java EE微服务

    openshift 这个小系列的前两个部分介绍了如何使用WildFly Swarm构建一个小型的JAX-RS服务并将其打包到Docker映像中 . 您学习了如何将此示例部署到OpenShift ,现在 ...

  7. 在OpenShift上部署Java EE微服务

    我昨天用WildFly Swarm在博客上发布了有关简单JAX-RS微服务的博客. 您学习了如何使用Maven构建一个所谓的"胖子",还使用Maven Docker插件对我们的微服 ...

  8. OpenShift 4 - Istio-Tutorial (2) 部署三个微服务

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本系列演示的场景使用了基于Java实现的三个微服务:Customer.Preferen ...

  9. OpenShift 4 之Service Mesh教程(2)- 用Kiali监控微服务运行

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 获得Kiali访问地址,然后用浏览器访问并登陆. $ oc get route kia ...

最新文章

  1. DPDK 报文收发流程(二十五)
  2. Batch Normalization的作用及原理
  3. android activity切换动画
  4. eclipse maven jetty插件方式启动项目
  5. Qt——P26 Label控件显示图片
  6. LSJ_NHibernate第一章 NHibernate介绍
  7. 使用HttpClient连接池进行https单双向验证
  8. mysql安装运行(centos)
  9. Lena图像分解成小块与从小块合成
  10. 数学建模:R语言的正态性检验
  11. SAP-物料 X 未对销售组织 XXXX 分销渠道 X 语言 XX 定义
  12. bzoj3717 [PA2014]Pakowanie(状压dp+贪心)
  13. 苹果开发者新账号上新app审核被拒绝:Other-Other被拒绝,心路历程记录!
  14. fastspeech2复现github项目--数据准备
  15. Hashmap底层源码
  16. MySQL数据库-设置数据完整性
  17. 微信小程序底部菜单详解
  18. HANA S/4 标准表(MARC MBEW COBL)增强流程
  19. WinInet库之Http通信
  20. 我的世界如何增加小游戏服务器,我的世界服务器小游戏怎么玩 骨灰玩家手把手教学...

热门文章

  1. 关于筹码理论的一些知识
  2. Android6.0新特性
  3. 发生系统错误 1219。不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接。
  4. 自动驾驶:自动驾驶车需要哪些核心技术?
  5. 二值图像的形态学处理
  6. java实现环形链表解决约瑟夫环问题
  7. 用java构造圆类_JAVA实验报告(圆类.doc
  8. 物体检测Object Detection学习笔记(MXNet)(二)
  9. css中单位px、pt、em和rem的区别
  10. 流畅的Python学习