作為一個Java開發你用過Jib嗎

碼農小胖哥發表於2020-06-28

1. 前言

Jib,容器化你的Java應用

JibGoogle開發的可以直接構建 Java應用的DockerOCI映象的類庫,以MavenGradle外掛形式提供。它最騷操作的是可以在沒有Docker守護程式的情況下構建,也就是說,您不必在計算機上安裝docker守護程式!儘管Spring Boot 2.3.0.RELEASE已經推出了構建映象的功能,胖哥還是忍不住要試試Jib

其實最騷的還是名字。

2. Docker構建流程和Jib的構建流程

沒有對比就沒有傷害。我們還是要對比一下這兩者的構建流程。

Docker構建流程需要我們先把專案打成Jar然後編寫Dockerfile,然後使用Docker構建功能進行構建映象、執行容器。流程如下:

docker構建流程

而Jib是這樣構建的:

Jib構建流程

作為一個Java開發者,不用再關心各種無關的命令和操作,只需要專注於Java,而且高效穩定以及可複用的增量構建。為什麼Jib能這麼快而高效?

傳統上,將Java應用程式與應用程式Jar一起構建為單個影像層,而Jib的構建策略將Java應用程式分為多層,以進行更細化的增量構建。更改程式碼時,僅重建更改,而不重建整個應用程式。

3. Jib構建Spring Boot應用

接下來我將演示如何將Spring Boot 應用打成映象並上傳到Dockerhub倉庫。

Maven工程為例,我們只需要在pom.xml中引入Jib Maven 外掛。預設情況下Jib會把我們打好的映象上傳到Googlegcr.io倉庫,實際中我們會把打好的映象上傳到私有倉庫,所以我們要加一些個性化配置。這裡我以dockerhub倉庫為例新增一些個性化配置:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.4.0</version>
    <configuration>
        <!-- 相當於 Dockerfile 中的 FROM -->
        <from>
            <image>amazoncorretto:8</image>
        </from>
        <to>
            <!--構建映象名稱,這裡我使用maven中定義的專案名稱-->
            <image>daxus/${project.name}</image>
            <!--私有倉庫的賬號密碼-->
            <auth>
                <username>felordcn</username>
                <password>yourpassword</password>
            </auth>
            <!--Docker 映象的 tag 這裡使用maven定義的版本號-->
            <tags>
                <tag>
                    ${project.version}
                </tag>
            </tags>
        </to>
    </configuration>
</plugin>

然後在專案根目錄執行mvn clean compile jib:build就可以了。

上傳到dockerhub中的映象

其實也可以簡單引入Jib外掛:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.4.0</version>
</plugin>

只不過我們的命令會更復雜一些,需要指定一些必要的引數,例如:

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

相關文章