springboot2.6.2系列教程之容器镜像&部署&生产功能-14

发布时间:2022-08-29 01:00

容器镜像

Spring Boot 应用程序可以使用 Dockerfiles进行容器化,或者使用 Cloud Native Buildpacks 创建优化的 docker 兼容容器镜像,您可以在任何地方运行。

高效的容器镜像

很容易将 Spring Boot fat jar 打包为 docker 镜像。然而,在 docker 镜像中复制和运行 fat jar 有很多缺点。在不打开包装的情况下运行 fat jar 总是有一定的开销,在容器化环境中这可能很明显。另一个问题是,将应用程序的代码及其所有依赖项放在 Docker 映像的一层中是次优的。由于您可能比升级您使用的 Spring Boot 版本更频繁地重新编译您的代码,因此通常最好将它们分开一点。如果你把jar文件放在你的应用程序类之前的层,Docker通常只需要改变最底层,就可以从它的缓存中提取其他的。

解压 jar

如果您从容器运行应用程序,则可以使用可执行 jar,但分解它并以不同的方式运行它通常也是一个优势。某些 PaaS 实现也可能会选择在运行前解压缩jar。例如,Cloud Foundry 就是这样运作的。运行解压jar的一种方法是启动适当的启动器,如下所示:

$ jar -xf myapp.jar
$ java org.springframework.boot.loader.JarLauncher

这实际上在启动时(取决于 jar 的大小)比从未分解的存档中运行要快一些。在运行时,您不应期望有任何差异。

解压 jar 文件后,您还可以通过使用其“自然”主方法而不是JarLauncher. 例如:

$ jar -xf myapp.jar
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication

分层 Docker 镜像

为了更容易创建优化的 Docker 镜像,Spring Boot 支持向 jar 中添加层索引文件。它提供了层列表和应包含在其中的 jar 的部分。索引中的层列表是根据应将层添加到 Docker/OCI 映像的顺序进行排序的。开箱即用,支持以下层:

  • dependencies (对于定期发布的依赖项)
  • spring-boot-loader(对于 下的所有内容org/springframework/boot/loader
  • snapshot-dependencies (对于快照依赖项)
  • application (对于应用程序类和资源)

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号