如何使用构建包来构建 Java 容器
您是否仍然编写冗长的 Dockerfile 来描述构建容器映像所需的每个步骤?然后,构建包来拯救你!开发人员只需向他们提供应用程序,构建包发挥其魔力,并将其变成一个功能齐全的容器,准备部署在任何云上。
但魔术究竟是如何发生的呢?如果生成的容器性能不符合业务需求,该怎么办?
本文将深入探讨构建包的幕后情况,了解它们的运行方式,并提供有关优化默认设置以达到更好的性能结果的提示。
什么是构建包?
构建包将应用程序源代码转换为可运行的生产就绪容器映像。构建包为开发人员节省了时间和精力,因为无需配置映像并通过 Dockerfile 手动管理依赖项。
Heroku是2011年第一家开发构建包的公司。从那时起,许多其他公司(Cloud Foundry,Google等)都采用了这一概念。2018 年,Heroku 与 Pivotal 合作创建了云原生构建包项目,该项目涵盖了容器映像的现代标准和规范,例如 OCI 格式。该项目是云原生计算基金会(CNCF)的一部分。
我们将在本文中使用的Paketo构建包是一个由Cloud Foundry支持并由VMware赞助的开源项目。它实现了云原生构建包规范,并支持最流行的语言,包括Java。使用 Paketo 构建包生成的容器可以在任何云上运行。
构建包的工作原理
构建包分两个阶段运行:检测和构建。
- 检测阶段
在检测阶段,构建包会分析源代码,寻找是否应将其应用于应用程序的指标。换句话说,根据源代码测试一组构建包,并选择第一组被认为适合代码来构建应用程序。在构建包检测到必要的指标后,它会返回创建映像所需的协定,并进入构建阶段。
- 构建阶段
在构建阶段,构建包转换代码库,满足之前编写的合同要求。它提供构建时和运行时环境,下载必要的依赖项,根据需要编译代码,并设置入口点和启动脚本。
建设者
生成器是构建容器映像所需的组件组合:
- 构建包,一组可执行文件,用于分析代码并提供构建和运行应用程序的计划;
- 堆栈由两个映像组成:构建映像和运行映像。生成映像提供构建环境(执行构建包的容器化环境),运行映像在运行时为应用程序映像提供环境;
- 生命周期管理构建包执行,并将生成的工件组装到最终映像中。
因此,一个构建器可以自动检测和构建不同的应用程序。
构建包提供了多种 JVM — 如何选择?
Paketo buildpacks 默认使用 Liberica JVM。Liberica是一个基于HotSpot的Java运行时,由OpenJDK的主要贡献者支持,并由Spring推荐。它为所有LTS版本(8,11,1