本文將介紹3種技術,經過 Maven 把 SpringBoot 應用構建成 Docker 鏡像。java
(1)使用 spring-boot-maven-plugin 內置的 build-image.git
(2)使用 Google 的 jib-maven-plugin。github
(3)使用 dockerfle-maven-plugin。spring
爲了方便實踐,須要一個 Spring Boot 項目。docker
Demo 項目地址:shell
項目環境:bash
使用 mvn package
能夠正常構建 jar 包。網絡
也能夠正常運行:架構
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
複製代碼
測試頁面:
Demo 項目 OK 了,下面就開始實踐構建鏡像的3個方法。
Spring Boot 預裝了本身的用於構建 Docker 鏡像的插件,咱們無需進行任何更改,由於它就在 pom.xml 中的 spring-boot-starter-parent。
你不須要寫 Dockerfile,也不用操別的心,plugin 都幫你作了,例如 Spring 建議的安全、內存、性能等問題。
只須要簡單的執行:
mvn spring-boot:build-image
複製代碼
執行完成後會看到成功提示信息:
運行容器測試:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
複製代碼
注意:這裏映射的本機端口是9090
。
Jib 是一個 Maven 和 Gradle 插件,用來建立 Docker 鏡像。
這個插件有一個很是明顯的特色:不須要本地安裝 Docker,這對持續集成是很是方便的,Jib 能夠直接推送到指定的 Docker 倉庫。
Jib 一樣也不須要寫 Dockerfile。
使用起來也很是方便,不須要改代碼,也能夠不改動 pom.xml。
只須要執行:
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
複製代碼
是咱們很熟悉的 maven 編譯指令。
指定了使用 Jib 插件
是 Jib 插件的執行目標,dockerBuild
指定了 Jib 使用咱們本地安裝的 Docker。
執行完成後會看到成功提示信息:
啓動容器測試:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
複製代碼
注意:這裏映射的本機端口是9091
。
這個插件就須要咱們寫 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 鏡像,也會報錯,你能夠試一下。
參考資料:
本文翻譯整理自: