用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章