Java应用云原生构建优化

Posted by elrond on October 12, 2022

1. 面临的问题

Java构建速度慢

当前构建方式: Dockerfile + jar 包

2. Jib调研

2.1. Jib 解决了什么问题

一般情况,java程序使用Dockerfile打包,是通过一整个jar包运行

    • 构建路径短: 不依赖Docker, 不需要安装Docker、不需要写Dockerfile,所有构建过程都通过Maven可以实现,没有三方软件的调用
    • 对应用无侵入: 集成在Maven/Gradle, 可以通过修改aven/Gradle的项目文件或者直接在命令行完成打包且直接上传到指定的镜像仓库
    • 构建快: 通过以下方式可以最小化打包,java代码有修改重新打包时只重新打包修改的部分,其他部分复用原有的,这也是Jib构建时间比Docker构建快的最大优势
      • 通过class, lib, resource来运行而不是通过整个jar包
      • 分层构建

2.2. 使用Jib对各个角色的影响

  • Java开发者:
    • 开发者不需要去了解Docker相关,只需要配置Maven插件就能打出容器镜像,达到开发构建一体化
    • 版本迭代时打包速度变快
  • 打包环境维护者:
    • 打包效率变高
    • 本地存储使用量减少

2.3. Jib使用(Maven)

2.3.1. 通过在pom.xml添加配置

from image一定要采用sha256tag不能使用自定义tag,否则不能触发 Reproducible 特性

  • 在pom.xml添加Jib配置
<project>
    <build>
        <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <!-- jib插件版本 -->
                <version>3.2.1</version>
                <configuration>
                    <!-- 相当于 Dockerfile 中的 FROM -->
                    <from>
                        <!-- <image>172.16.0.11:30002/java/java@sha256:135245e1b7ab29d8ed9e1dd081498e70f31772748ba04eff87509c03bb36570e</image> -->
                        <image>my-register/base/centos@sha256:e8242c0c21830c5c59c2cf0ba008e8d53d284615fb930e8ccec06336289a8197</image>
                    </from>
                    <to>
                        <!--构建镜像名称 ${project.name} maven内置变量 ${env.TAG} 操作系统ENV变量 -->
                        <image>172.16.0.11:30002:/test/${project.name}:${env.TAG}</image>
                        <!-- 仓库的账号密码 如果本地有login就不需要了 -->
                        <!-- <auth>
                           <username>xxxxx</username>
                           <password>xxxxxxx</password>
                        </auth> -->
                        <!--Docker 镜像的 tag, 如果上面to.image-->
                        <!-- <tags>
                            <tag>${env.TAG}</tag>
                        </tags> -->
                    </to>
                    <container>
                        <!--jvm参数-->
                        <jvmFlags>
                            <jvmFlag>-Djava.security.egd=file:/dev/./urandom</jvmFlag>
                        </jvmFlags>
                        <!-- mainClass -->
                        <mainClass>xxx.xxx.xxxx.xxxx.xxxx.xxxx</mainClass>
                        <!-- 镜像时间戳,不设置的话打出来的镜像时间是52年前 低版本的为<useCurrentTimestamp>true</useCurrentTimestamp> -->
                        <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                    </container>
                    <!--用没配置安全认证的registry-->
                    <allowInsecureRegistries>true</allowInsecureRegistries>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • 编译命令

如果仓库是http,则需要加上 -D sendCredentialsOverHttp 且 Docker配置中需要添加 "insecure-registries": ["172.16.0.11:30002"],

mvn compile jib:build  -D sendCredentialsOverHttp  -f my-service/pom.xml

2.3.2. 通过在命令行构建

无需对 pom.xml 进行修改

# com.google.cloud.tools:jib-maven-plugin:3.2.1:build 倒数第二个参数为jib版本,最后一个参数为build时直接push到远端仓库,为dockerBuild时仅在本地构建
mvn clean package jib:build -Dmaven.test.skip=true -U -e -X com.google.cloud.tools:jib-maven-plugin:3.2.1:build \
  # http仓库
  -D sendCredentialsOverHttp \
  # 构建的基础镜像
  -Djib.from.image=172.16.0.11:30002/java/java@sha256:135245e1b7ab29d8ed9e1dd081498e70f31772748ba04eff87509c03bb36570e \
  # 远端仓库地址
  -Djib.to.image=172.16.0.11:30002/test/test-my-service:$TAG \
  # mainClass
  -Djib.container.mainClass=xxxxxxxxxxxxx \
  # 启动参数
  -Djib.container.jvmFlags.jvmFlag=-Djava.security.egd=file:/dev/./urandom \
  # 使用系统时间戳
  -Djib.container.creationTime=USE_CURRENT_TIMESTAMP \
  -Djib.allowInsecureRegistries=true \
  -f my-service/pom.xml

2.3.3. 两种方式比较

  • 命令行方式对java应用本身无侵入,但命令过长,需要修改的参数比较多,很容易出错,且命令行与java应用分开时如果编译出错排查链路变长
  • 应用的打包应该集成在应用里面,在原来的基础上仅需一个参数即可控制编译Docker包与否,这种做法更为标准

3. 对比测试

3.1. 测试说明

项目 参数 备注
操作系统 CentOS7.9  
Docker Engine 20.10.16  
Jib 3.2.1  
java项目大小 44408行java代码  

对比测试,每组10次

  • Jib自定义Tag构建
  • Docker自定义Tag构建
  • Jib sha256 Tag构建

  • Jib base CentOS构建
  • Jib base Java构建

3.2. Jib与Docker

  • jib
mvn clean package jib:build -Dmaven.test.skip=true -D sendCredentialsOverHttp -U -e -X  -f my-service/pom.xml
  • Docker
mvn clean package -Dmaven.test.skip=true -U -f my-service/pom.xml
docker build -t 172.16.0.11:30002/test/my-service:test001 .
docker push -t 172.16.0.11:30002/test/my-service:test001
FROM 172.16.0.11:30002/java/java:8
ADD my-service/target/my-service.jar
echo 'java -jar -Djava.security.egd=file:/dev/./urandom /opt/app.jar' > start.sh
ENTRYPOINT ./start.sh

buildtime

3.2.1. 耗时分析

docker_build_flow jib_build_flow

docker构建镜像主要时间花在,每次构建下面三步都需要重复执行,Jib可以不需要send context 也不需要每次全量的jar包,push的时候分层更多更细

  • Sending build context to Docker daemon – 600MB
  • Dockerfile ADD app.jar – 150MB
  • docker push – 150MB

3.3. from image tag

  • 使用sha256标签
  • 使用自定义标签

标签类型不同决定了能不能使用 reproducible 特性,测试的时候由于项目比较小,编译速度比较快,没有测试出明显差异

3.4. base image

  • java
  • centos

不同的base镜像,如果本地都有docker缓存则差不多,如果本地没有缓存的情况下,用java镜像比centos镜像快10s左右

4. 总结

  • Jib可以加快至少 20% 的构建时间,多个服务同时使用Jenkins+Jib构建时,平均单个应用可以节省20s构建时间 附录: 测试说明
  • Jib最佳实践为应用集成以Maven插件的方式集成Jib
  • Jib可以节省打包服务器的本地空间

5. 参考

6. 附录

6.1. Jib介绍

  • google开源的java应用构建容器镜像的工具
  • Apache-2.0 license
  • 11.9k stars
  • 支持集成在Maven/Gradle
  • 解决了java应用构建容器镜像无需依赖三方软件(Docker)的问题,拥有构建块、占用本地空间少等优势

6.2. 工程实施

6.2.1. 配置项目pom.xml

<plugin>
    <!--https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#example-->
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
        <!-- 相当于 Dockerfile 中的 FROM -->
        <from>
            <!-- <image>172.16.80.60:30002/java/java:8</image> -->
            <image>my-register/base/centos:7.9.2009</image>
        </from>
        <to>
            <image>my-register/my-namespace/my-namespace-${project.name}:latest</image>
            <!-- 私有仓库的账号密码&ndash;&gt;-->
            <!--<auth>
              <username>admin</username>
              <password>Harbor12345</password>
            </auth> -->
            <!--Docker 镜像的 tag 这里使用maven定义的版本号-->
            <!-- <tags>
              <tag>${env.TAG}</tag>
            </tags> -->
        </to>
        <container>
            <!--jvm内存参数-->
            <jvmFlags>
                <jvmFlag>-Djava.security.egd=file:/dev/./urandom</jvmFlag>
            </jvmFlags>
          <!-- 镜像时间戳, 低版本的为<useCurrentTimestamp>true</useCurrentTimestamp> -->
          <mainClass>com.xxx.my-namespace.limit.service.my-namespaceLimitServiceApp</mainClass>
          <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
        </container>
        <!--用没配置安全认证的registry-->
        <allowInsecureRegistries>true</allowInsecureRegistries>
    </configuration>
</plugin>

6.2.2. Jenkins参数设置

  • Base镜像版本
  • 生成的镜像tag
  • Jvm参数

以上参数均可以设置在变量中,通过命令行调用

Jenkins Multi-line String Parameter

  • FROMIMG my-register/base/centos@sha256:e8242c0c21830c5c59c2cf0ba008e8d53d284615fb930e8ccec06336289a8197
  • TAG 1.2.1
  • JVMFLAG -Xms4g,-Xmx4g,-Djava.security.egd=file:/dev/./urandom

这里的参数不是追加,而是覆盖pom.xml

命令行调用

clean package jib:build -Dmaven.test.skip=true -U -e -X -Djib.to.tags=$TAG -Djib.from.image=$FROMIMG -D sendCredentialsOverHttp -Djib.container.jvmFlags=$JVMFLAG

6.3. 多服务测试数据

6.3.1. 环境说明

项目 数值 备注
服务器类型 虚拟机  
服务器配置 8C16G  
操作系统 CentOS Linux release 7.9.2009  
Jenkin版本 2.346.2  
Jenkins安装方式 进程  
Docker版本 20.10.17  

6.3.2. 测试说明

选择五个在生产环境耗时较多应用的Jenkins Job,复制到测试环境,在环境相同的情况下测试单体服务的构建耗时多服务排队时的构建耗时

6.3.3. Java应用单次构建容器镜像耗时对比

Java应用单次构建容器镜像耗时对比

服务名称 my-service1 my-service2 my-service3 my-service4 my-service5 my-service6 总计  
Docker耗时 53 69 35 46 46 42 87 378
Jib耗时 38 43 23 31 27 28 56 246
缩短时间百分比(1-Jib/Docker) 28.30% 37.68% 34.29% 32.61% 41.30% 33.33% 35.63% 34.92%

七个应用节省了378-246=132s, 平均每个应用减少 18.8s,缩短时间比例为34.92%

6.3.4. Java多应用排队构建容器镜像时间对比

Java多应用排队构建容器镜像时间对比

服务名称 my-service1 my-service2 my-service3 my-service4 my-service5 my-service6 总计  
Docker耗时 64 56 47 48 70 104 43 432
Jib耗时 52 43 48 49 36 69 36 333
缩短时间百分比(1-Jib/Docker) 18.75% 23.21% -2.13% -2.08% 48.57% 33.65% 16.28% 22.92%

七个应用共节省 432-333=99s 平均每个应用减少 14.8s, 缩短时间比例为22.92%

6.3.5. 总结

模拟生产环境常用场景在测试环境测试的数据可得出如下结论

  • 构建时间较短,镜像大小差异不多的时候,通过Jenkins构建Docker和Jib无法拉开差距,甚至由于Jenkin需要采集数据会出现Jib略逊Docker 2-5s的情况
  • 单服务构建无论是排队或单体构建平均都能节省20s以上时间

6.4. 测试过程遇到的问题及解决方式

6.4.1. maven配置自定义配置文件

容器部署的Jenkins,使用Jenkins插件安装的Maven如果需要自定义配置,则需要进入容器修改 /home/jenkins/agent/tools/hudson.tasks.Maven_MavenInstallation/mvn/conf/settings.xml

6.4.2. Docker部署的Jenkins无法使用Docker build命令

6.4.2.1. 场景说明

  • Jenkins 使用K8S容器部署
  • Jenkins的Job中需要运行 docker build命令构建镜像

很常见的场景,CI过程构建容器镜像,如果在Docker容器内构建Docker镜像则需要将宿主机的Docker socket挂载到容器里面,具体配置比较复杂,且性能较弱,这里大概说下思路

6.4.2.2. 解决方式

Jenkins使用k8s新建的pod作为slave节点,当Jenkins Job启动的时候,k8s启动一个pod,在pod中运行Job

需要安装 kubernetes 插件,这里简单说下思路,图文并茂的说明见 How to Setup Jenkins Build Agents on Kubernetes Pods

  • Manage Jenkins -> Manage nodes and clouds -> Configure Clouds -> add a new cloud kubernetes -> …

需要定制镜像的话,建议基于 registry.cn-beijing.aliyuncs.com/kubesphereio/builder-base:v3.2.0 定制,例如安装Docker 增加 docker挂载等等,maven配置文件挂载等等

配置完毕流水线是可以直接使用k8s启动的pod构建的,但Job需要手动在configure中选 Restrict where this project can be run pod对应的label即可

这种方式跑任务网络性能、磁盘性能都会比直接在vm启动的jenkins上跑要慢得多,且配置复杂,不易维护,不太建议使用这种方式,优势是不用操心Jenkins Slave的配置,k8s会帮我们做好

6.5. 镜像分层

  • 镜像history
docker history 56c8530944e1
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
56c8530944e1   30 hours ago    jib-maven-plugin:3.2.1                          92B       jvm arg files
<missing>      30 hours ago    jib-maven-plugin:3.2.1                          2.47MB    classes
<missing>      30 hours ago    jib-maven-plugin:3.2.1                          131kB     resources
<missing>      30 hours ago    jib-maven-plugin:3.2.1                          18.3MB    snapshot dependencies
<missing>      30 hours ago    jib-maven-plugin:3.2.1                          137MB     dependencies
<missing>      5 months ago    /bin/sh -c #(nop)  ENV CLASSPATH=.:/usr/loca…   0B
<missing>      5 months ago    /bin/sh -c #(nop)  ENV PATH=/usr/local/jdk1.…   0B
<missing>      5 months ago    /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/local/…   0B
<missing>      5 months ago    /bin/sh -c #(nop) ADD file:895ba8e155e6c8045…   397MB
<missing>      5 months ago    /bin/sh -c #(nop)  ENV JAVA_TOOL_OPTIONS=-ja…   0B
<missing>      5 months ago    /bin/sh -c #(nop) ADD dir:c61f33bde6e3ef838a…   31.6MB
<missing>      5 months ago    /bin/sh -c fc-cache -fv                         103kB
<missing>      5 months ago    /bin/sh -c #(nop) ADD dir:c50b2a588266d5797a…   194MB
<missing>      5 months ago    /bin/sh -c #(nop)  ENV LC_ALL=zh_CN.utf8        0B
<missing>      5 months ago    /bin/sh -c localedef -c -f UTF-8 -i zh_CN zh…   3.33MB
<missing>      5 months ago    /bin/sh -c yum -y install kde-l10n-Chinese f…   384MB
<missing>      5 months ago    /bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /…   47B
<missing>      5 months ago    /bin/sh -c #(nop)  ENV TZ=Asia/Shanghai         0B
<missing>      5 months ago    /bin/sh -c #(nop)  MAINTAINER xxx               0B
<missing>      10 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      10 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      10 months ago   /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB
  • dependencies
│ Layers ├────────────────────────────────────────────────────── ┃ ● Current Layer Contents ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cmp   Size  Command                                              └── app
    204 MB  FROM 291eb894538de0b                                     └── libs
      14 B  ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && ec         ├── xxxxxxxx.jar
    384 MB  yum -y install kde-l10n-Chinese fontconfig less net-         ├── xxxxxxxx.jar
    3.3 MB  localedef -c -f UTF-8 -i zh_CN zh_CN.utf8                    ├── xxxxxxxx.jar
    194 MB  #(nop) ADD dir:c50b2a588266d5797a8512e1370281ac214e1         ├── xxxxxxxx.jar
    103 kB  fc-cache -fv                                                 ├── xxxxxxxx.jar
     32 MB  #(nop) ADD dir:c61f33bde6e3ef838a27bb3869357c1085e72         ├── xxxxxxxx.jar
    397 MB  #(nop) ADD file:895ba8e155e6c804557aac3f942d1edb19e6         ├── xxxxxxxx.jar
    137 MB  jib-maven-plugin:3.2.1                                       ├── xxxxxxxx.jar
     18 MB  jib-maven-plugin:3.2.1                                       ├── xxxxxxxx.jar
    131 kB  jib-maven-plugin:3.2.1                                       ├── xxxxxxxx.jar
    2.5 MB  jib-maven-plugin:3.2.1                                       ├── xxxxxxxx.jar
      92 B  jib-maven-plugin:3.2.1                                       ├── xxxxxxxx.jar
                                                                         ├── xxxxxxxx.jar
│ Layer Details ├─────────────────────────────────────────────── xxxxxxxx.jar
                                                                         ├── xxxxxxxx.jar
Tags:   (unavailable)                                                    ├── xxxxxxxx.jar
Id:     35432ca9c41295366eedd0662b879c09fa9a6a87b88001bd88bdd33b         ├── xxxxxxxx.jar
5b939046                                                                 ├── xxxxxxxx.jar
Digest: sha256:54389cf93dbebfef63afc4ba2ac7601b70aaefeaebd673c8c         ├── xxxxxxxx.jar
f6f166baf100989                                                          ├── xxxxxxxx.jar
Command:                                                                 ├── xxxxxxxx.jar
jib-maven-plugin:3.2.1                                                   ├── xxxxxxxx.jar
                                                                         ├── xxxxxxxx.jar
│ Image Details ├─────────────────────────────────────────────── xxxxxxxx.jar
                                                                         ├── xxxxxxxx.jar
                                                                         ├── xxxxxxxx.jar
Total Image size: 1.4 GB                                                 ├── xxxxxxxx.jar
Potential wasted space: 297 MB                                           ├── xxxxxxxx.jar
Image efficiency score: 88 %                                             ├── xxxxxxxx.jar
                                                                         ├── xxxxxxxx.jar
  • resources
│ Layers ├────────────────────────────────────────────────────── ┃ ● Current Layer Contents ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cmp   Size  Command                                              └── app
    204 MB  FROM 291eb894538de0b                                     └── resources
      14 B  ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && ec         ├── META-INF
    384 MB  yum -y install kde-l10n-Chinese fontconfig less net-         │   ├── spring-autoconfigure-metadata.properties
    3.3 MB  localedef -c -f UTF-8 -i zh_CN zh_CN.utf8                    │   └── spring.factories
    194 MB  #(nop) ADD dir:c50b2a588266d5797a8512e1370281ac214e1         ├── application.properties
    103 kB  fc-cache -fv                                                 ├── com
     32 MB  #(nop) ADD dir:c61f33bde6e3ef838a27bb3869357c1085e72         │   └── xxx
    397 MB  #(nop) ADD file:895ba8e155e6c804557aac3f942d1edb19e6         │       └── my-namespace
    137 MB  jib-maven-plugin:3.2.1                                       │           └── my-service
     18 MB  jib-maven-plugin:3.2.1                                       │               └── service
    131 kB  jib-maven-plugin:3.2.1                                       │                   ├── xx
    2.5 MB  jib-maven-plugin:3.2.1                                       │                   ├── xx
      92 B  jib-maven-plugin:3.2.1                                       │                   ├── config
                                                                         │                   ├── constant
│ Layer Details ├───────────────────────────────────────────────         │                   ├── xx
                                                                         │                   ├── xx
Tags:   (unavailable)                                                    │                   │   └── xx
Id:     774bb644a4ea965cd9d9345164a99a7eb34c992239a6802edc608d7a         │                   ├── xx
6a78a621                                                                 │                   │   ├── xx
Digest: sha256:c5b0b2402df31150ef0cecfd720592d7c0054b52e334d4df2         │                   │   ├── xx
00659674411362f                                                          │                   │   ├── xx
Command:                                                                 │                   │   └── xx
jib-maven-plugin:3.2.1                                                   │                   ├── xx
                                                                         │                   ├── provider
│ Image Details ├───────────────────────────────────────────────         │                   │   └── impl
                                                                         │                   ├── rpt
                                                                         │                   │   └── xx
Total Image size: 1.4 GB                                                 │                   ├── service
Potential wasted space: 297 MB                                           │                   │   ├── xx
Image efficiency score: 88 %                                             │                   │   ├── xx
                                                                         │                   │   ├── xx
  • classes
┃ ● Layers ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ Current Layer Contents ├──────────────────────────────────────
Cmp   Size  Command                                              └── app
    204 MB  FROM 291eb894538de0b                                     └── classes
      14 B  ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && ec         ├── META-INF
    384 MB  yum -y install kde-l10n-Chinese fontconfig less net-         ├── com
    3.3 MB  localedef -c -f UTF-8 -i zh_CN zh_CN.utf8                    │   └── xxx
    194 MB  #(nop) ADD dir:c50b2a588266d5797a8512e1370281ac214e1         │       └── my-namespace
    103 kB  fc-cache -fv                                                 │           └── my-service
     32 MB  #(nop) ADD dir:c61f33bde6e3ef838a27bb3869357c1085e72         │               └── service
    397 MB  #(nop) ADD file:895ba8e155e6c804557aac3f942d1edb19e6         │                   ├── my-serviceService.class
    137 MB  jib-maven-plugin:3.2.1                                       │                   ├── xx
     18 MB  jib-maven-plugin:3.2.1                                       │                   │   ├── xxx.class
    131 kB  jib-maven-plugin:3.2.1                                       │                   │   ├── xxx.class
    2.5 MB  jib-maven-plugin:3.2.1                                       │                   │   └── xxx.class
      92 B  jib-maven-plugin:3.2.1                                       │                   ├── xx
                                                                         │                   │   ├── xx.class
│ Layer Details ├───────────────────────────────────────────────         │                   │   ├── xx.class
                                                                         │                   │   ├── xx.class
Tags:   (unavailable)                                                    │                   │   ├── xx.clas
Id:     5446b98f2be29b01710178c4e838e8fe5abacc2f20fe4f3069d1f5f7         │                   │   ├── xx.class
f9821f19                                                                 │                   │   ├── xx.class
Digest: sha256:54a10e2bed666dbe431cb802459770fe07b941f24d035e4af         │                   │   └── xx.class
6fdec9bc3ce123d                                                          │                   ├── config
Command:                                                                 │                   │   ├── xx.class
jib-maven-plugin:3.2.1                                                   │                   │   ├── xx.class
                                                                         │                   │   ├── xx$1.class
│ Image Details ├───────────────────────────────────────────────         │                   │   ├── xx.class
                                                                         │                   │   └── xx.class
                                                                         │                   ├── constant
Total Image size: 1.4 GB                                                 │                   │   └── xx.class
Potential wasted space: 297 MB                                           │                   ├── dto
Image efficiency score: 88 %                                             │                   │   ├── xx.class
  • jvm arg files
┃ ● Layers ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ Current Layer Contents ├──────────────────────────────────────
Cmp   Size  Command                                              └── app
    204 MB  FROM 291eb894538de0b                                     ├── jib-classpath-file
      14 B  ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && ec     └── jib-main-class-file
    384 MB  yum -y install kde-l10n-Chinese fontconfig less net-
    3.3 MB  localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
    194 MB  #(nop) ADD dir:c50b2a588266d5797a8512e1370281ac214e1
    103 kB  fc-cache -fv
     32 MB  #(nop) ADD dir:c61f33bde6e3ef838a27bb3869357c1085e72
    397 MB  #(nop) ADD file:895ba8e155e6c804557aac3f942d1edb19e6
    137 MB  jib-maven-plugin:3.2.1
     18 MB  jib-maven-plugin:3.2.1
    131 kB  jib-maven-plugin:3.2.1
    2.5 MB  jib-maven-plugin:3.2.1
      92 B  jib-maven-plugin:3.2.1

│ Layer Details ├───────────────────────────────────────────────

Tags:   (unavailable)
Id:     9a87ee9fca59dba8c8519217b595681c349ffe53f9021d0f7dcbd563
cabb3065
Digest: sha256:e1b75e57db9b22f97128676fdd7eb80e73c277dda743f4723
7171f5cce2e02f4
Command:
jib-maven-plugin:3.2.1

│ Image Details ├───────────────────────────────────────────────


Total Image size: 1.4 GB
Potential wasted space: 297 MB
Image efficiency score: 88 %
  • arg files
docker exec b8c077ef8dbe cat /app/jib-classpath-file
/app/resources:/app/classes:/app/libs/*
docker exec b8c077ef8dbe cat app/jib-main-class-file
com.xxx.my-namespace.my-service.service.my-serviceServiceApplication
  • 容器运行命令
docker exec b8c077ef8dbe cat /proc/1/cmdline|tr "\0" " "
java -Djava.security.egd=file:/dev/./urandom -cp /app/resources:/app/classes:/app/libs/* com.xxx.my-namespace.my-service.service.my-serviceServiceApplication