在微服務架構中,構建Docker鏡像是必不可少的。然而,構建Docker鏡像并不是一項容易的任務。通常情況下,需要先了解Docker的知識,編寫Dockerfile,然后運行Docker守護程序來構建和發布鏡像到注冊表。
盡管有一些Maven和Gradle的Docker插件可供選擇,例如Spotify的Docker插件和fabric8的Docker插件,但在本文中,我們要給讀者介紹一種新的方法——Jib。
Jib是一款由Google開發的開源容器鏡像構建工具。Jib采用了獨特的構建方式,使用Jib無需編寫Dockerfile或安裝Docker守護程序就可以輕松地使用Maven或Gradle構建Java容器。接下來,我們將詳細介紹如何使用Jib來構建和發布Docker鏡像。
下面的引用摘自Jib的官方頁面,清楚地說明了Jib的優勢:
您無需維護Dockerfile,運行Docker守護程序,甚至不必擔心創建帶有所有依賴項的大型JAR文件。
現在來看一個例子。構建一個樣例的Spring Boot REST服務,并將Jib依賴項添加到其中,以創建項目的Docker鏡像。稍后我們將看到如何將此鏡像推送到我們選擇的容器注冊表中。
這里有一個可工作的項目,現在可以使用Jib為其創建一個容器鏡像。Jib Maven插件將完成所有繁重的工作。將插件配置添加到pom.xml文件的<build><plugins>部分。
JIB的Maven插件
唯一需要配置的是提供<to><image>,即Docker鏡像的名稱。現在可以使用該插件創建一個Docker鏡像,該鏡像將在本地的Docker守護程序上可用。
$ mvn clean compile jib:dockerBuild
mvn jib構建日志
從輸出中,可以看到Jib的神奇之處。它為應用程序創建了三個獨立的圖像層。默認基本層是gcr.io/distroless/java:8。然后,我們得到一個用于依賴項、資源和類的單獨圖像層。這意味著對應用程序源代碼的更改只需要重新構建類層。Jib還自動發現了SpringBootJibApplication中的main方法。
如果我們檢查Docker,可以看到新鏡像可供使用。
$ docker images springboot-jib
docker images結果
您會注意到CREATED顯示的是50 years ago,這似乎不正確。這是因為Jib默認創建可復現的構建;因此,它不包含構建時間戳。(關于可復現構建的更多信息。)
讓我們運行以確保它正常工作。
$ docker run -p 8080:8080 --name springboot-jib springboot-jib
應用程序啟動日志
現在可以使用push命令docker push ...將我們的鏡像推送到Docker Hub,但是Jib也可以為我們完成這個操作。當您嘗試對項目進行一些更改并重新構建時,會發現構建速度更快。
可以使用Jib在構建過程中自動將鏡像推送到容器注冊表。因此,需要使用Docker倉庫路徑適當地標記我們的容器鏡像。作為最佳實踐,可以使用我們的Maven項目版本給鏡像打上標簽。
更新Docker Hub注冊表路徑
Jib將需要您的容器注冊表憑據以便能夠為您推送鏡像。有幾種選擇,但這里將在構建命令中內聯添加我的憑據。
$ mvn jib:build -Djib.to.auth.username=prgnr173 -Djib.to.auth.password=
推送Docker Hub鏡像
Jib還提供了其他一些配置選項。例如,如果不想使用默認的distroless鏡像,可以添加一個基于alpine的FROM鏡像。
使用alpine作為基礎鏡像
Jib還支持許多Java運行時配置:
請確保查看Jib的文檔以查看所有可用的配置屬性。
下面是Google Cloud分享的Jib和Docker的構建時間比較,Jib明顯是勝出者。
構建時間比較:Jib vs Docker
通過本文的學習,讀者了解了如何使用Google的Jib構建和發布Docker鏡像。可以訪問Jib的官方文檔,根據您的項目需求進行更好的定制。
本文鏈接:http://www.tebozhan.com/showinfo-26-13615-0.html使用JIB插件輕松實現Spring Boot應用容器化
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com