Categories
程式開發

用Jib容器化Java应用程序


Jib是一个用于构建Java应用程序空间得到了节省并优化了Docker和OCI镜像的开源工具,它一直在不断添加新功能,以进一步改善开发和CI/CD的体验。其中的一些亮点包括Jib插件扩展框架、对流行应用程序框架的原生支持、CI/CD性能的改进、以及使用Skaffold在本地Kubernetes上增强的开发体验。

Jib插件扩展框架

Jib真正的强大之处在于它能够以声明的方式将Java应用程序重新构建成优化了的Docker和OCI镜像,并应用容器最佳实践,而无需Docker守护进程。借助新的Jib插件扩展框架,用户现在可以扩展Jib来调整Java应用程序镜像的各个方面。扩展框架基于容器构建计划规范(Container Build Plan Specification),这是一个通用的、与工具无关的规范,可用于描述镜像的构建计划。Jib核心团队已经发布了一些有用的扩展,比如GraalVM原生镜像扩展,可用于快速启动运行在容器中的Java应用程序。新的扩展可以作为Maven和Gradle的第三方插件来构建和贡献。

对应用程序框架的原生支持

现在,一些流行的应用程序框架(如Spring BootQuarkus)都获得了Jib的原生支持。对于Spring Boot,Jib中的打包容器化模式是通过容器化原始的瘦应用程序JAR而不是Spring Boot JAR来提供开箱即用的支持,后者往往不适合容器化。Jib核心团队还发布了支持Quarkus的一方JibMavenGradle扩展,从而可以完全控制如何配置和构建Quarkus镜像。请注意,这些扩展仍处于试验阶段,可能无法构建复杂的项目。

增强的CI/CD支持

由于Jib不依赖Docker守护进程,它可以创建和推送镜像,而无需下载相应的基础镜像。例如,一个典型的基于Java的Dockerfile将包含一个诸如FROM openjdk:11-jre-slim这样的行来指定基础镜像。如果Docker镜像缓存中没有这个基础镜像,Docker守护程序就必须下载它,这是CI/CD环境中的一种典型情况。但是Jib有一些内置的智能功能,可以最大限度地避免下载基础镜像。将Jib集成到CI/CD管道中,可以减少构建时间,节省网络带宽和存储空间。

使用Skaffold提供本地Kubernetes开发支持

Skaffold是一个优化了的工具,它提供了一种快速且可重复的本地Kubernetes开发工作流,现在可以与Jib集成。这种集成使Skaffold可以对Java镜像进行零配置自动同步。通过自动同步,Jib可以将类文件更改和资源文件更改同步到正在运行的容器中,而无需重新构建和重新部署容器/舱室(Container/Pod)。请注意,该设置仅适用于分解了的非WAR应用程序,这是Jib的默认构建模式。此外,底层Java应用程序服务器还应支持重新加载或重新启动。

该项目的示例部分提供了一些使用Jib的入门示例。

原文链接:

Containerizing Java Applications with Jib