詳解SpringBoot構(gòu)建Docker鏡像的3種方式
本文將介紹3種技術(shù),通過 Maven 把 SpringBoot 應(yīng)用構(gòu)建成 Docker 鏡像。
(1)使用 spring-boot-maven-plugin 內(nèi)置的 build-image.
(2)使用 Google 的 jib-maven-plugin。
(3)使用 dockerfle-maven-plugin。
Spring Boot 應(yīng)用
為了方便實踐,需要一個 Spring Boot 項目。
Demo 項目地址:
https://github.com/davelms/medium-articles/tree/master/spring-maven-docker
項目環(huán)境:
- Java 11
- Maven 3.6.3
使用 mvn package 可以正常構(gòu)建 jar 包。
也可以正常運行:
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
測試頁面:
http://localhost:8080/hello

Demo 項目 OK 了,下面就開始實踐構(gòu)建鏡像的3個方法。
1 Spring Boot maven 插件 的 build-image
Spring Boot 預(yù)裝了自己的用于構(gòu)建 Docker 鏡像的插件,我們無需進行任何更改,因為它就在 pom.xml 中的 spring-boot-starter-parent。
你不需要寫 Dockerfile,也不用操別的心,plugin 都幫你做了,例如 Spring 建議的安全、內(nèi)存、性能等問題。
只需要簡單的執(zhí)行:
mvn spring-boot:build-image
執(zhí)行完成后會看到成功提示信息:

運行容器測試:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
注意:這里映射的本機端口是9090。

2 jib-maven-plugin
Jib 是一個 Maven 和 Gradle 插件,用來創(chuàng)建 Docker 鏡像。
這個插件有一個非常明顯的特點:不需要本地安裝 Docker,這對持續(xù)集成是非常方便的,Jib 可以直接推送到指定的 Docker 倉庫。
Jib 同樣也不需要寫 Dockerfile。
使用起來也非常方便,不需要改代碼,也可以不改動 pom.xml。
只需要執(zhí)行:
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 插件的執(zhí)行目標,dockerBuild 指定了 Jib 使用我們本地安裝的 Docker。
執(zhí)行完成后會看到成功提示信息:

啟動容器測試:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
注意:這里映射的本機端口是9091。

3 dockerfile-maven-plugin
這個插件就需要我們寫 Dockerfile 了,Domo 項目中已經(jīng)準備好了。
Dockerfile 需要放在項目的根目錄下,和 pom.xml 在一起。

然后,需要在 pom.xml 中添加一些配置,以便指定倉庫、tag 標簽,還有上面 Dockerfile 中定義的 JAR_FILE。

執(zhí)行 mvn package 時就會自動構(gòu)建鏡像了,執(zhí)行完成后就會看到提示信息:

運行容器:
docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT
注意:映射的本機端口是 9092。

小結(jié)

這3個里面最方便的是 SpringBoot 原生的方式,什么都不需要自己做,直接就能用。
最有特點的是 Jib,不需要你本地安裝 Docker,可以直接推送到指定的倉庫,而且使用起來也很簡單。
看起來最麻煩的就是 dockerfile-maven-plugin 這個插件了,需要寫 Dockerfile,還得添加配置,但是,實際上他是最好用的,因為前2個與網(wǎng)絡(luò)環(huán)境有關(guān)系(你懂的),即使你配置了 Docker 鏡像,也會報錯,你可以試一下。
參考資料:
jib-maven-plugin
https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin
dockerfile-maven plugin
https://github.com/spotify/dockerfile-maven
本文翻譯整理自:
https://medium.com/swlh/build-a-docker-image-using-maven-and-spring-boot-58147045a400
到此這篇關(guān)于SpringBoot構(gòu)建Docker鏡像的3種方式的文章就介紹到這了,更多相關(guān)SpringBoot構(gòu)建Docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot微服務(wù)打包Docker鏡像流程解析
- SpringBoot創(chuàng)建Docker鏡像的方法步驟
- Springboot打包為Docker鏡像并部署的實現(xiàn)
- docker-compose鏡像發(fā)布springboot項目的流程分析
- idea快速實現(xiàn)將SpringBoot項目打包Docker鏡像并部署
- SpringBoot打包docker鏡像發(fā)布的詳細步驟
- 一步步教你把SpringBoot項目打包成Docker鏡像
- Java(SpringBoot)項目打包(構(gòu)建)成Docker鏡像的幾種常見方式
- 使用idea生成springboot程序的docker鏡像的操作指南
- SpringBoot打包成Docker鏡像的幾種實現(xiàn)方式
- SpringBoot打包成Docker鏡像的項目實踐
- Docker打包SpringBoot鏡像的實現(xiàn)方式
- springboot項目打docker鏡像實例(入門級)
相關(guān)文章
關(guān)于Java單個TCP(Socket)連接發(fā)送多個文件的問題
這篇文章主要介紹了關(guān)于Java單個TCP(Socket)連接發(fā)送多個文件的問題,每次我只能使用一個 Socket 發(fā)送一個文件,沒有辦法做到連續(xù)發(fā)送文件,本文來解決這個問題,需要的朋友可以參考下2023-04-04
SpringBoot最常用的50個注解總結(jié)(全是干貨!)
SpringBoot提供多種注解簡化配置與啟動流程,如@SpringBootAppication、@RestController、@RequestMapping等,這篇文章主要介紹了SpringBoot最常用的50個注解的相關(guān)資料,需要的朋友可以參考下2024-09-09
詳解SpringBoot中的參數(shù)校驗(項目實戰(zhàn))
這篇文章主要介紹了SpringBoot中的參數(shù)校驗,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
使用TraceId在Spring Cloud中實現(xiàn)線上問題快速定位
在微服務(wù)架構(gòu)中,服務(wù)間的互相調(diào)用使得問題定位變得復雜,在此背景下,TraceId為我們提供了一個在復雜環(huán)境中追蹤請求路徑和定位問題的工具,本文不僅介紹TraceId的基本概念,還將結(jié)合真實場景,為您展示如何在Spring Cloud中應(yīng)用它2023-09-09
了解java架構(gòu)之微服務(wù)架構(gòu)—雪崩效應(yīng)
這篇文章主要介紹了了解java架構(gòu)之微服務(wù)架構(gòu)—雪崩效應(yīng),微服務(wù)化產(chǎn)品線,每一個服務(wù)專心于自己的業(yè)務(wù)邏輯,并對外提供相應(yīng)的接口,看上去似乎很明了,其實還有很多的東西需要考慮,,需要的朋友可以參考下2019-06-06
Java List的remove()方法陷阱以及性能優(yōu)化
Java List在進行remove()方法是通常容易踩坑,本文就詳細的介紹一下陷阱以及性能優(yōu)化,感興趣的可以了解一下2021-10-10
java實現(xiàn)ArrayList根據(jù)存儲對象排序功能示例
這篇文章主要介紹了java實現(xiàn)ArrayList根據(jù)存儲對象排序功能,結(jié)合實例形式分析了java針對ArrayList的相關(guān)運算、排序操作技巧,需要的朋友可以參考下2018-01-01
Spring Boot集成kubernetes客戶端實現(xiàn)API操作k8s集群的方案
Kubernetes是一個開源的容器編排平臺,可以自動化在部署、管理和擴展容器化應(yīng)用過程中涉及的許多手動操作,這篇文章主要介紹了Spring Boot集成kubernetes客戶端實現(xiàn)API操作k8s集群,需要的朋友可以參考下2024-08-08

