做爲一個Java開發你用過Jib嗎

1. 前言

Jib,容器化你的Java應用

JibGoogle開發的能夠直接構建 Java應用的DockerOCI鏡像的類庫,以MavenGradle插件形式提供。它最騷操做的是能夠在沒有Docker守護程序的狀況下構建,也就是說,您沒必要在計算機上安裝docker守護程序!儘管Spring Boot 2.3.0.RELEASE已經推出了構建鏡像的功能,胖哥仍是忍不住要試試Jibgit

其實最騷的仍是名字。github

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

沒有對比就沒有傷害。咱們仍是要對比一下這二者的構建流程。docker

Docker構建流程須要咱們先把項目打成Jar而後編寫Dockerfile,而後使用Docker構建功能進行構建鏡像、運行容器。流程以下:編程

docker構建流程

而Jib是這樣構建的:bash

Jib構建流程

做爲一個Java開發者,不用再關心各類無關的命令和操做,只須要專一於Java,並且高效穩定以及可複用的增量構建。爲何Jib能這麼快而高效?maven

傳統上,將Java應用程序與應用程序Jar一塊兒構建爲單個圖像層,而Jib的構建策略將Java應用程序分爲多層,以進行更細化的增量構建。更改代碼時,僅重建更改,而不重建整個應用程序。ui

3. Jib構建Spring Boot應用

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

Maven工程爲例,咱們只須要在pom.xml中引入Jib Maven 插件。默認狀況下Jib會把咱們打好的鏡像上傳到Googlegcr.io倉庫,實際中咱們會把打好的鏡像上傳到私有倉庫,因此咱們要加一些個性化配置。這裏我以dockerhub倉庫爲例添加一些個性化配置:spa

<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
複製代碼

更多的定製命令可參考官方文檔:

github.com/GoogleConta…

4. 總結

Jib使用起來很是簡單,讓開發人員以Java的風格來完成Docker鏡像的構建,可以大大改善編程的體驗。多多關注:碼農小胖哥 獲取更多有用的編程乾貨教程。

關注公衆號:Felordcn獲取更多資訊

我的博客:https://felord.cn

相關文章
相關標籤/搜索