Jib構建你的第一個java鏡像
jib Official:GoogleContainerTools/jib
本文示例完整demo github地址 https://github.com/moxingwang/jib
想要了解並且使用jib,首先你得知道或者使用過docker,在這個基礎上才能夠明白jib是幹什麽得,解決了什麽問題。
首先我們先看一個例子,如何將一個spring-boot項目簡單容器化,如果你從未操作過,可以動手自己實現,或者仔細閱讀這篇文章第一個 spring Boot 應用通過Docker 來實現構建、運行、發布。你可能發現如果需要把一個java項目容器化這是一個麻煩和相對復雜的過程,首先你需要編寫dockerfile,然後在build dockefile,如過需要push到registries,還需要經過push操作。雖然build和push還是非常簡單得。但是寫一個dockerfile真的比較麻煩,學習成本也高,看看官網Dockerfile reference就不想學了。那麽有沒有簡單得辦法呢,記住幾個簡單得命令就可以運行了,如同‘mvn spring-boot:run’這麽簡單得命令,這個時候jib出場了,他就是來完成這個偉大得使命。
如果你還沒明白jib是用來做什麽事情得,推薦你閱讀谷歌開源Java鏡像構建工具Jib的前半部分,或者閱讀jib Official:GoogleContainerTools/jib。
接下來主要介紹具體如何使用(maven的方式)。
將java項目容器化push到registries
jib的引入非常簡單,已maven plugin的方式集成到項目中,只需要在你的項目中引入下面代碼即可
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>0.9.6</version> <configuration> <from> <!--base image--> <image>openjdk:alpine</image> </from> <to> <!--<image>registry.cn-hangzhou.aliyuncs.com/m65536/jibtest</image>--> <!--目標鏡像registry地址,為了方便測試,你需要換成自己的地址,如果你的網絡不好,可以選用國內加速器,比如阿裏雲的--> <image>registry.hub.docker.com/moxingwang/jibtest</image> </to> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin>
這只是一個最簡單的配置,比如registry認證配置,jvm配置等等,可以參考github jib詳細說明jib/jib-maven-plugin/。
構建你的鏡像
mvn compile jib:build
可能你剛剛運行玩這一步就出現錯誤,提示Unauthorized,不用擔心,這個命令需要把構建出來的image commit並且push到你遠程的registry(我這裏是registry.hub.docker.com),你可以按照【常見錯誤1】的方法解決問題。
如果你的網速慢一點可能會在最後步驟‘Finalizing...‘,不過沒有關系,稍微多等一會就ok,直到‘BUILD SUCCESS‘出現。最終一個完整的java project被實例化成鏡像並且push到了registry裏。接下來你可以測試剛剛完成push的鏡像。
打開https://hub.docker.com/,你會發現你的image已經構建成功。
- docker使用鏡像
docker run -it --rm -p8080:8080 registry.hub.docker.com/moxingwang/jibtest
一個spring-boot的image這樣就被啟動成功了。本文示例demo中集成了swagger-iu, 項目啟動成功後我們可以通過http://localhost:8080/sw/swagger-ui.html訪問,可以成功在瀏覽器打開swagger。
把鏡像直接構建到本地docker中
使用這種構建方式,首先你要確保本已經安裝docker並且環境變量都配置正確,因為這種方式jib依賴docker 命令執行,你還需要保證已經啟動服務(在terminal中執行 docker --version 能夠正確返回)。
mvn compile jib:dockerBuild
接下來直接操作,首先查看本地已有images
docker iamges
執行mvn compile jib:dockerBuild
可以看到本地image已經build成功。可以直接啟動使用
docker run -it --rm -p8080:8080 moxingwang/jibtest
啟動成功後同樣可以直接訪問http://localhost:8080/sw/swagger-ui.htmlswagger頁面。
常見錯誤
常見錯誤1 Failed to execute goal com.google.cloud.tools:jib-maven-plugin:0.9.6:build (default-cli) on project jib: Build image failed, perhaps you should set a credential helper name with the configuration ‘<from><credHelper>‘ or set credentials for ‘registry.hub.docker.com‘ in your Maven settings: Unauthorized for registry.hub.docker.com/moxingwang/jibtest: 401 Unauthorized
當你從私有的registries pull或者push的時候需要認證機制。閱讀官方說明按照步驟操作即可。Authentication Methods。
如果幫你本機已經按照docker,那麽操作更簡單,可以通過docker命令直接登陸registries,然後繼續其他jib的操作。
-
registry.hub.docker.com
docker login --username=你的hub.docker的用戶名 registry.hub.docker.com
- registry.hub.docker.com
docker login --username=阿裏雲docker用戶名 registry.cn-hangzhou.aliyuncs.com
推薦閱讀
- jib Official:GoogleContainerTools/jib
- 谷歌開源Java鏡像構建工具Jib
Jib構建你的第一個java鏡像