簡介
Jib 是 Google 開發的可以直接構建 Java 應用的 Docker 和 OCI 鏡像的類庫,以 Maven 和 Gradle 插件形式提供。
通過 Jib,Java 開發者可以使用他們熟悉的 Java 工具來構建容器。Jib 是一個快速而簡單的容器鏡像構建工具,它負責處理將應用程序打包到容器鏡像中所需的所有步驟。它不需要你編寫 Dockerfile 或安裝 Docker,而且可以直接集成到 Maven 和 Gradle中 —— 只需要將插件添加到構建中,就可以立即將 Java 應用程序容器化。
Docker 構建流程:
Jib 構建流程:
配置
maven
編輯pom.xml文件,添加以下內容:
<build><plugins> ... <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>0.9.4</version> <configuration> <to> <image>myimage</image><credHelper>osxkeychain</credHelper> </to> </configuration> </plugin> ... </plugins> </build>
配置說明:
- from:打包docker的基礎鏡像,默認鏡像是:gcr.io/distroless/java ,需要
翻牆
- to:默認push到dockerhub指定倉庫
- credHelper:docker認證,這個就有點復雜了,下面再詳細說明
credHelper
這個是使用了第三方的一個docker認證工具,源碼倉庫:https://github.com/docker/docker-credential-helpers
這里我提供一個linux的二進制壓縮包: https://download.csdn.net/download/lusyoe/10534491
下面是配置操作步驟:
1. 解壓
下載好后,將其復制到/usr/bin
路徑下,然后通過以下命令進行解壓: tar -xf docker-credential-pass-v0.6.0-amd64.tar.gz
驗證是否可用: docker-credential-pass version
如果打印出0.6.0就表示正常
2. 安裝gpg、pass
執行以下命令: CentOS: sudo yum install gpg pass -y
Ubuntu: sudo apt-get install gpg pass -y
3. 創建簽名
通過gpg2命令生成簽名: gpg2 --gen-key
根據提示,一路確認下來就可以了。中間會提示輸入密碼,這個要記住了,后面會用到。
最后生成隨機數的時候可能會慢一點,隨便在鍵盤上敲點字符就可以了。 最終生成的內容如下:
-
gpg: /root/
.gnupg/trustdb
.gpg: trustdb created
-
gpg:
key xxxxx marked
as ultimately trusted
-
public
and secret
key created
and signed.
-
-
gpg: checking the trustdb
-
gpg:
3 marginal(s) needed,
1 complete(s) needed, PGP trust model
-
gpg: depth:
0 valid:
1 signed:
0 trust:
0-,
0q,
0n,
0m,
0f,
1u
-
pub
2048R/
6CC91C4E
2018
-
07
-
11
-
Key fingerprint =
8E3C
1083
6041
33A8
99CA DC55
1E68
4783
6CC9
1C4E
-
uid lusyoe <xxxxx@xxx
.com>
-
sub
2048R/
595B7456
2018
-
07
-
11
4. 配置pass
初始化
生成完簽名后,通過pass工具進行初始化一下,執行以下命令:pass init <gpg-key>
gpg-key就是上一步生成內容的第二行key后面的xxxxx內容。插入密鑰檢查
pass insert docker-credential-helpers/docker-pass-initialized-check
這里會提示輸入密碼,最好保持跟之前的gpg一致即可,后面還會提示輸入gpg的密碼驗證pass是否已初始化
pass show docker-credential-helpers/docker-pass-initialized-check
5. 配置docker
編輯~/.docker/config.json
文件,添加以下內容:
-
{
-
"
credsStore
":
"osxkeychain"
-
}
配置完后,就可以使用:docker login
開始登陸了。
構建
先編譯,然后再打包鏡像,當然也可以綁定maven構建周期,自動打包鏡像。 mvn compile
mvn jib:build
githhub:https://github.com/GoogleContainerTools/jib
優點
- 無需編寫Dockerfile,甚至無需安裝docker
- 無需再執行docker build、push命令了
- 增量構建鏡像,無需每次編譯項目先打包jar
缺點
- 默認拉取的基礎鏡像是gcr倉庫的,需要翻牆,並且jdk默認是openjdk
- 在拉取自定義的基礎鏡像和push構建的鏡像這塊,設計的不夠友好,依賴需要第三方的加密組件(
折騰了好一會
); - 侵入性太強,需要每個項目都添加上maven插件。如果是現有方案,只需要添加一個Dockerfile就可以了,而且定制化高
- 只支持java平台