由 Spring Boot 2.3 构建的 docker 图像是否比由 jib 构建的图像更好?

Is A docker image built by Spring Boot 2.3 better than the one by jib?

到目前为止,我使用 Spring Boot 2.2 并使用 jib 构建 docker 映像。

但是现在,Spring Boot 2.3 发布了, 发行说明说 Spring Boot 2.3 可以默认使用 Paketo buildpack 构建 Docker 图像。

Spring Boot 2.3 enhances Docker support with new features 这篇文章说 Spring Boot 2.3 将允许更高效的 Docker 构建。

我试图用 Spring Boot 2.3 构建一个 docker 映像。 如下所示,Spring Boot 2.3 可以默认使用一些 jvm 选项构建映像以优化内存。

Container memory limit unset. Configuring JVM for 1G container.
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=83555K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx453020K (Head Room: 0%, Loaded Class Count: 12338, Thread Count: 250, Total Memory: 1.0G)
Adding 127 container CA certificates to JVM truststore
Spring Cloud Bindings Boot Auto-Configuration Enabled

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \  
\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 '  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.3.1.RELEASE)

我的问题: 由 Spring Boot 2.3 构建的 docker 图像是否比由 jib 构建的图像更好?

不是更好,而是不同。 Jib 可以在不安装 docker 的情况下构建图像。 Spring docker build 解压 jar(启动时稍微好一些)并将依赖项放入一个层中。当你构建新版本时,它可以重用那些层(如果依赖关系没有改变),所以它只用你的应用程序创建一个层(它的大小远小于依赖关系的大小)。这导致构建速度更快。但是你必须安装本地 docker.