本文將介紹3種技術,透過 Maven 把 SpringBoot 應用程式建置成 Docker 映像。
(1)使用 spring-boot-maven-plugin 內建的 build-image.
(2)使用 Google 的 jib-maven-plugin。
(3)使用 dockerfle-maven-plugin。
Spring Boot 應用程式
為了方便實作,需要一個 Spring Boot 專案。
Demo 專案位址:
https://github.com/davelms/me...
專案環境:
Java 11
Maven 3.6.3
使用 mvn package 可以正常建置 jar 套件。
也可以正常執行:
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
測試頁面:
http://localhost:8080/hello

Demo 專案 OK 了,下面就開始實踐建置映像檔的3個方法。
一、Spring Boot maven 外掛程式 的 build-image
Spring Boot 預裝了自己的用於建置 Docker 映像檔的外掛,我們無需進行任何變更,因為它就在 pom.xml 中的 spring-boot-starter-parent。
你不需要寫 Dockerfile,也不用操別的心,外掛都幫你處理了,例如 Spring 建議的安全、記憶體、效能等問題。
只需要簡單地執行:
mvn spring-boot:build-image
執行完成後會看到成功提示訊息:

執行容器測試:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
注意:這裡對映的本機連接埠是9090。

二、jib-maven-plugin
Jib 是一個 Maven 和 Gradle 外掛,用來建立 Docker 映像檔。
這個外掛有一個非常明顯的特點:不需要在本機安裝 Docker,這對持續整合是非常方便的,Jib 可以直接推送到指定的 Docker 儲存庫。
Jib 同樣也不需要寫 Dockerfile。
使用起來也非常方便,不需要改程式碼,也可以不改動 pom.xml。
只需要執行:
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
mvn compile
是我們很熟悉的 maven 編譯指令。
com.google.cloud.tools:jib-maven-plugin:2.3.0
指定了使用 Jib 外掛
dockerBuild
是 Jib 外掛的執行目標,dockerBuild 指定了 Jib 使用我們本機安裝的 Docker。
執行完成後會看到成功提示訊息:

啟動容器測試:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
注意:這裡對映的本機連接埠是9091。

三、dockerfile-maven-plugin
這個外掛就需要我們寫 Dockerfile 了,Domo 專案中已經準備好了。
Dockerfile 需要放在專案的根目錄下,和 pom.xml 在一起。

然後,需要在 pom.xml 中新增一些設定,以便指定儲存庫、tag 標籤,還有上面 Dockerfile 中定義的 JAR_FILE。

執行 mvn package 時就會自動建置映像檔了,執行完成後就會看到提示訊息:

執行容器:
docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT
注意:對應的本機連接埠是 9092。

小結

這3個裡面最方便的是 SpringBoot 原生的方式,什麼都不需要自己做,直接就能用。
最有特色的是 Jib,不需要你在本機安裝 Docker,可以直接推送到指定的儲存庫,而且使用起來也很簡單。
看起來最麻煩的就是 dockerfile-maven-plugin 這個外掛了,需要寫 Dockerfile,還得新增設定,但是,實際上它是最好用的,因為前2個與網路環境有關係(你懂的),即使你設定了 Docker 映像檔,也會報錯,你可以試一下。
