SpringBoot打包成Docker鏡像的項(xiàng)目實(shí)踐
dockerFile編寫
普通dockerFile
FROM java:8 #此處的*為正則表達(dá)式,表示以.jar結(jié)尾的同步錄下的文件(這里的jar是maven打包好的) COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
這種方法有缺點(diǎn):
- 鏡像中的jar包是壓縮文件,在容器環(huán)境中運(yùn)行需要解壓,造成比較大的開銷
- 將依賴和程序都放在一個(gè)層中,更新程序后編譯新的鏡像效率低。一般來(lái)說(shuō),依賴是基本不變的,只需要更新程序代碼。
spring官方推薦,構(gòu)建鏡像時(shí),不要直接使用壓縮的jar,而應(yīng)該解壓后構(gòu)建鏡像。
解壓方式打包的dockerFile的編寫有版本分界線:springboot-2.3,在2.3以后的版本中,可以使用spring-boot-jarmode-layertools來(lái)幫助解壓構(gòu)建。
將spring-boot項(xiàng)目打成jar包
將jar解壓到target/dependency
dockerFile文件
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency # jar包解壓位置
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.MyApplication"]
2.3以后
使用spring-boot-jarmode-layertools,更加方便
# 指定基礎(chǔ)鏡像,這是分階段構(gòu)建的前期階段
FROM openjdk:8 as builder
# 執(zhí)行工作目錄
WORKDIR application
# 配置參數(shù)
ARG JAR_FILE=target/*.jar
# 將編譯構(gòu)建得到的jar文件復(fù)制到鏡像空間中
COPY ${JAR_FILE} application.jar
# 通過(guò)工具spring-boot-jarmode-layertools 從application.jar 中提取拆分后的構(gòu)建結(jié)果
RUN java -Djarmode=layertools -jar application.jar extract
# 正式構(gòu)建鏡像
FROM openjdk:8
WORKDIR application
# 前一階段從jar中提取除了多個(gè)文件,這里分別執(zhí)行COPY命令將他們復(fù)制到鏡像空間中,每次COPY都是一個(gè)layer
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java","-Duser.timezone=GMT+8","org.springframework.boot.loader.JarLauncher"]
使用dockerFile打包鏡像
# '-t' 設(shè)置打包鏡像tag, '-f' 設(shè)置DockerFile文件, '.'選擇當(dāng)前目錄 docker build -t test:1.0 -f .\DockerFile .
到此這篇關(guān)于SpringBoot打包成Docker鏡像的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)SpringBoot打包成Docker鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式
- SpringBoot打包成Docker鏡像的幾種實(shí)現(xiàn)方式
- SpringBoot多模塊打包部署Docker的項(xiàng)目實(shí)戰(zhàn)
- 一步步教你把SpringBoot項(xiàng)目打包成Docker鏡像
- SpringBoot打包docker鏡像發(fā)布的詳細(xì)步驟
- SpringBoot3.x打包Docker容器的實(shí)現(xiàn)
- Springboot微服務(wù)打包Docker鏡像流程解析
- springboot服務(wù)docker打包分層的實(shí)現(xiàn)
相關(guān)文章
K8s集群重啟與恢復(fù)-Node節(jié)點(diǎn)啟停方式
這篇文章主要介紹了K8s集群重啟與恢復(fù)-Node節(jié)點(diǎn)啟停方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Docker運(yùn)行模式之-d和-it的區(qū)別與選擇詳細(xì)對(duì)比
這篇文章主要介紹了Docker運(yùn)行模式之-d和-it的區(qū)別與選擇詳細(xì)對(duì)比的相關(guān)資料,Docker中-d用于后臺(tái)運(yùn)行服務(wù),不阻塞終端;-it提供交互終端,支持用戶操作,需要的朋友可以參考下2025-05-05
docker安裝并持久化postgresql數(shù)據(jù)庫(kù)的操作步驟
這篇文章主要介紹了docker安裝并持久化postgresql數(shù)據(jù)庫(kù)的操作步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
如何解決docker-compose網(wǎng)段路由沖突,docker-compose自定義網(wǎng)絡(luò)
這篇文章主要介紹了如何解決docker-compose網(wǎng)段路由沖突,docker-compose自定義網(wǎng)絡(luò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
使用docker compose搭建一個(gè)elk系統(tǒng)的方法
這篇文章主要介紹了使用docker-compose搭建一個(gè)elk系統(tǒng)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

