作為一個Java開發你用過Jib嗎
阿新 • • 發佈:2020-06-28
## 1. 前言
![Jib,容器化你的Java應用](https://asset.felord.cn/blog/20200625112856.png)
**Jib**是**Google**開發的可以直接構建 **Java**應用的**Docker**和**OCI**映象的類庫,以**Maven**和**Gradle**外掛形式提供。它最騷操作的是可以在沒有**Docker**守護程式的情況下構建,也就是說,您不必在計算機上安裝**docker**守護程式!儘管**Spring Boot 2.3.0.RELEASE**已經推出了構建映象的功能,胖哥還是忍不住要試試**Jib**。
> 其實最騷的還是名字。
## 2. Docker構建流程和Jib的構建流程
沒有對比就沒有傷害。我們還是要對比一下這兩者的構建流程。
**Docker**構建流程需要我們先把專案打成**Jar**然後編寫**Dockerfile**,然後使用**Docker**構建功能進行構建映象、執行容器。流程如下:
![docker構建流程](https://img2020.cnblogs.com/other/1739473/202006/1739473-20200628092028793-628440961.png)
而Jib是這樣構建的:
![Jib構建流程](https://img2020.cnblogs.com/other/1739473/202006/1739473-20200628092028990-1301809487.png)
作為一個**Java**開發者,不用再關心各種無關的命令和操作,只需要專注於Java,而且高效穩定以及可複用的增量構建。為什麼**Jib**能這麼快而高效?
傳統上,將**Java**應用程式與應用程式**Jar**一起構建為單個影象層,而**Jib**的構建策略將**Java**應用程式分為多層,以進行更細化的增量構建。更改程式碼時,僅重建更改,而不重建整個應用程式。
## 3. Jib構建Spring Boot應用
接下來我將演示如何將**Spring Boot** 應用打成映象並上傳到**Dockerhub**倉庫。
以**Maven**工程為例,我們只需要在`pom.xml`中引入**Jib Maven 外掛**。預設情況下**Jib**會把我們打好的映象上傳到**Google**的**gcr.io**倉庫,實際中我們會把打好的映象上傳到私有倉庫,所以我們要加一些個性化配置。這裡我以**dockerhub**倉庫為例新增一些個性化配置:
```xml
```
然後在專案根目錄執行`mvn clean compile jib:build`就可以了。
![上傳到dockerhub中的映象](https://img2020.cnblogs.com/other/1739473/202006/1739473-20200628092029251-76217298.png)
其實也可以簡單引入**Jib**外掛:
```xml
```
只不過我們的命令會更復雜一些,需要指定一些必要的引數,例如:
```bash
mvn clean compile jib:build \
-Djib.to.image=myregistry/myimage:latest \
-Djib.to.auth.username=$USERNAME \
-Djib.to.auth.password=$PASSWORD
```
> 更多的定製命令可參考官方文件:
>
> https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#extended-usage
## 4. 總結
**Jib**使用起來非常簡單,讓開發人員以**Java**的風格來完成**Docker**映象的構建,能夠大大改善程式設計的體驗。多多關注:**碼農小胖哥** 獲取更多有用的程式設計乾貨教程。
`關注公眾號:Felordcn 獲取更多資訊`
[個人部落格:https://felord.cn](https://fe