日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot2.3 新特性分層JAR的使用

瀏覽:19日期:2023-09-03 11:39:29

背景

在我們實際生產容器化部署過程中,往往會遇到 Docker 鏡像很大,部署發布很慢的情況

影響 docker 鏡像大小的因素,主要有以下三個方面:

基礎鏡像的大小 。盡量選擇 alpine 作為基礎鏡像 減少操作系統內置軟件 Dockerfile 指令層數。 這就要求我們優化 Dockerfile 能合并在一行的盡量合并等 應用 jar 的大小。這是今天要分享的重點內容

helloworld 鏡像

我們先來基于 spring boot 2.3.0 構建一個最簡單的 web helloworld,然后構建鏡像。

FROM adoptopenjdk:11-jre-hotspot as builderWORKDIR applicationARG JAR_FILE=target/*.jarCOPY ${JAR_FILE} application.jarENTRYPOINT ['java', '-jar application.jar']

docker build --build-arg JAR_FILE=./demo-layer-0.0.1-SNAPSHOT.jar . -t demo:v1.0

查看鏡像分層信息

我們通過 docker inspect demo:v1.0 來看下此鏡像的每層的散列值

// demo:v1.0 版本鏡像分層信息摘要'Layers': [ 'sha256:b7f7d2967507ba709dbd1dd0426a5b0cdbe1ff936c131f8958c8d0f910eea19e', 'sha256:a6ebef4a95c345c844c2bf43ffda8e36dd6e053887dd6e283ad616dcc2376be6', 'sha256:838a37a24627f72df512926fc846dd97c93781cf145690516e23335cc0c27794', 'sha256:28ba7458d04b8551ff45d2e17dc2abb768bf6ed1a46bb262f26a24d21d8d7233', 'sha256:55c91231ac46fdd63c3cf84b88b11f8a04c1870482dcff033029a601bc50e1ab', 'sha256:9816c2d488754509f6024a267738b1e5fe33a7cd33bd25c5a9cdf6d4d7bfed1d', 'sha256:f5fb3f91797d57a92f3f7e033398b8edd094df664db849a4950eabf2f5474535', 'sha256:b87d2ff74819f83038ea2f89736a19cfcf99bfa080b8017d191c900a09a7524f']

helloworld 升級重新構建

我們對 helloworld 程序進行部分修改(模擬開發過程),然后重新構建鏡像

docker build --build-arg JAR_FILE=./demo-layer-0.0.1-SNAPSHOT.jar . -t demo:v1.1

此時鏡像分層信息如下 docker inspect demo:v1.1

// demo:v1.1 版本鏡像分層信息摘要'Layers': [ 'sha256:b7f7d2967507ba709dbd1dd0426a5b0cdbe1ff936c131f8958c8d0f910eea19e', 'sha256:a6ebef4a95c345c844c2bf43ffda8e36dd6e053887dd6e283ad616dcc2376be6', 'sha256:838a37a24627f72df512926fc846dd97c93781cf145690516e23335cc0c27794', 'sha256:28ba7458d04b8551ff45d2e17dc2abb768bf6ed1a46bb262f26a24d21d8d7233', 'sha256:55c91231ac46fdd63c3cf84b88b11f8a04c1870482dcff033029a601bc50e1ab', 'sha256:9816c2d488754509f6024a267738b1e5fe33a7cd33bd25c5a9cdf6d4d7bfed1d', 'sha256:f5fb3f91797d57a92f3f7e033398b8edd094df664db849a4950eabf2f5474535', 'sha256:c1b6350d545fea605e0605c4bfd7f4529cfeee3f6759750d6a5ddeb9c882fc8f']

比較 v1.0、v1.1 鏡像

通過比較 v1.0 和 v1.1 版本的鏡像摘要信息,我們會發現只有最后的一層發生了變化,我們通過 Dive 是一個用 Go 語言編寫的 Docker 鏡像分析工具 來確定一下 最后一層是做了哪些事情dive demo:v1.0,「大家會看到是最后的 jar 不一樣 導致 16M 的內容需要重新構建,當你的業務 jar 很大時,這塊就是性能瓶頸」

Spring Boot2.3 新特性分層JAR的使用

spring boot 默認打包解密

默認情況下,spring boot 構建出來的 jar ,解壓后可以看到如下目錄結構。默認會當做一個整體 ,在構建鏡像時作為一個單獨層,「沒有區分業務 classes 和 引用的第三方 jar」

META-INF/ MANIFEST.MForg/ springframework/ boot/ loader/BOOT-INF/ classes/ lib/

layer jar

通過上文大家就可以知道分層 jar 的思想就是把,jar 再根據規則細分,業務 class 和 三方 jar 分別對應鏡像的不同層,這樣改動業務代碼,只需變動很少的內容 提高構建速度。

Spring Boot2.3 新特性分層JAR的使用

開啟分層打包

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layers> <enabled>true</enabled> </layers> </configuration> </plugin>

編寫支持分層 Dockerfile

核心是通過 spring boot 提供的 layertools 工具,將 jar 進行拆分 然后通過 COPY 指令去分別加載

FROM adoptopenjdk:11-jre-hotspot as builderWORKDIR applicationARG JAR_FILE=target/*.jarCOPY ${JAR_FILE} application.jarRUN java -Djarmode=layertools -jar application.jar extractFROM adoptopenjdk:11-jre-hotspotWORKDIR applicationCOPY --from=builder application/dependencies/ ./COPY --from=builder application/spring-boot-loader/ ./COPY --from=builder application/snapshot-dependencies/ ./COPY --from=builder application/application/ ./ENTRYPOINT ['java', 'org.springframework.boot.loader.JarLauncher']

構建新鏡像并查看分層信息

docker build --build-arg JAR_FILE=./demo-layer-0.0.1-SNAPSHOT.jar . -t demo:v2.0

'Layers': [ 'sha256:b7f7d2967507ba709dbd1dd0426a5b0cdbe1ff936c131f8958c8d0f910eea19e', 'sha256:a6ebef4a95c345c844c2bf43ffda8e36dd6e053887dd6e283ad616dcc2376be6', 'sha256:838a37a24627f72df512926fc846dd97c93781cf145690516e23335cc0c27794', 'sha256:28ba7458d04b8551ff45d2e17dc2abb768bf6ed1a46bb262f26a24d21d8d7233', 'sha256:55c91231ac46fdd63c3cf84b88b11f8a04c1870482dcff033029a601bc50e1ab', 'sha256:9816c2d488754509f6024a267738b1e5fe33a7cd33bd25c5a9cdf6d4d7bfed1d', 'sha256:f5fb3f91797d57a92f3f7e033398b8edd094df664db849a4950eabf2f5474535', 'sha256:06fe18cf8ae7384f120f2c6a3a33b31999dd0460cf1edae45e8f13adeab35942', 'sha256:16cf814564b8a667fcc9f07314b6084cbef8dc8c0a6565c7a2d91d74faf7e7de', 'sha256:94be40f716016b68cdd6b99d2cb8154acf8475c3a170a898a22f95a8ef40ffd3', 'sha256:427d87d6a5fe6da13cb4233939c3a1ff920bc6b4d2f14b5d78af7aef98fda7de']

修改代碼部分業務代碼,重新構建

docker build --build-arg JAR_FILE=./demo-layer-0.0.1-SNAPSHOT.jar . -t demo:v2.1

'Layers': [ 'sha256:b7f7d2967507ba709dbd1dd0426a5b0cdbe1ff936c131f8958c8d0f910eea19e', 'sha256:a6ebef4a95c345c844c2bf43ffda8e36dd6e053887dd6e283ad616dcc2376be6', 'sha256:838a37a24627f72df512926fc846dd97c93781cf145690516e23335cc0c27794', 'sha256:28ba7458d04b8551ff45d2e17dc2abb768bf6ed1a46bb262f26a24d21d8d7233', 'sha256:55c91231ac46fdd63c3cf84b88b11f8a04c1870482dcff033029a601bc50e1ab', 'sha256:9816c2d488754509f6024a267738b1e5fe33a7cd33bd25c5a9cdf6d4d7bfed1d', 'sha256:f5fb3f91797d57a92f3f7e033398b8edd094df664db849a4950eabf2f5474535', 'sha256:06fe18cf8ae7384f120f2c6a3a33b31999dd0460cf1edae45e8f13adeab35942', 'sha256:16cf814564b8a667fcc9f07314b6084cbef8dc8c0a6565c7a2d91d74faf7e7de', 'sha256:94be40f716016b68cdd6b99d2cb8154acf8475c3a170a898a22f95a8ef40ffd3', 'sha256:8a20c60d361696a4e480fb6fbe1daf8b88bc54c579a98e209da1fb76e25de5aa']

查看區別層鏡像

最后一層變動大小為 5KB

Spring Boot2.3 新特性分層JAR的使用

總結

16MB -> 5KB 變動,在實際開發過程中 效果會更加明顯可以通過 spring boot maven plugin 指定分層邏輯,具體可以參考官方文檔官方文檔: https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/maven-plugin/reference/html/

到此這篇關于Spring Boot2.3 新特性分層JAR的使用的文章就介紹到這了,更多相關Spring Boot2.3 分層JAR內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

作者:冷冷zz鏈接:https://lltx.github.io

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久亚洲不卡| 日韩国产欧美在线播放| 国产传媒在线观看| 国产不卡av一区二区| 国产福利91精品一区二区| 夜鲁夜鲁夜鲁视频在线播放| 欧美激情一区| 水蜜桃久久夜色精品一区| 久久久亚洲一区| 免费视频一区二区| 国产精品一区二区三区av | 日韩精品网站| 99pao成人国产永久免费视频| 国产偷自视频区视频一区二区| 91午夜精品| 久久精品青草| 青草综合视频| 激情综合网站| 国产精品s色| 91高清一区| 色综合视频一区二区三区日韩 | 欧美精品影院| 五月激情久久| 国产精品4hu.www| 欧美在线网站| 久久精品国产福利| 亚洲精品在线二区| 久久免费国产| 国产日本精品| 视频一区中文字幕精品| 亚洲伦乱视频| 国产无遮挡裸体免费久久| 不卡av一区二区| 国产精品国产一区| 国产乱论精品| 国产精品免费99久久久| 91成人精品观看| 日韩欧美高清一区二区三区| 亚洲日韩中文字幕一区| 天堂俺去俺来也www久久婷婷| 国产精品毛片一区二区三区| 国产欧美日韩一级| 天堂va在线高清一区| 国产亚洲精品精品国产亚洲综合| 麻豆成人av在线| 国产精品xx| 久久久男人天堂| 亚洲va中文在线播放免费| 九色porny丨国产首页在线| 国产精品一区二区三区av| 成人精品天堂一区二区三区| 91精品视频一区二区| 国产欧美久久一区二区三区| 日韩国产成人精品| 国产精品亚洲一区二区在线观看| 国产精品videosex极品| 亚洲国产福利| 国产韩日影视精品| 视频精品一区二区| 国产麻豆一区二区三区精品视频| 麻豆精品在线播放| 日韩久久视频| 美女网站视频一区| 蜜桃久久精品一区二区| 久久久久久亚洲精品美女| 久久精品国产大片免费观看| 影音先锋久久精品| 欧美国产免费| 国产一区二区中文| 911亚洲精品| 国产99久久久国产精品成人免费| 免费精品视频| 免费亚洲一区| 久久国产精品久久久久久电车 | 国产精品一区二区免费福利视频| 亚洲日本国产| 蜜桃免费网站一区二区三区| 中文字幕乱码亚洲无线精品一区| 亚洲国产成人精品女人| 欧美亚洲激情| 午夜在线视频一区二区区别| 日韩影院在线观看| 国产精品入口久久| 亚洲播播91| 在线观看视频免费一区二区三区| 国产精品欧美三级在线观看 | 日韩视频1区| 成人美女视频| 亚洲精品人人| 国产精品一区二区中文字幕| 国产精品久久久免费| 欧美日韩视频免费观看| 日韩精品一二三区| 国内精品麻豆美女在线播放视频| 91精品一区二区三区综合| 蜜臀国产一区二区三区在线播放| 国产精品免费大片| 不卡av一区二区| 欧美国产另类| 亚洲不卡系列| 日韩一区二区三区精品| 久久蜜桃精品| 精品不卡一区| 青青草国产精品亚洲专区无| 亚洲电影有码| 麻豆视频一区二区| 亚洲免费毛片| 99久久视频| 国产va在线视频| 日本中文字幕视频一区| 久久影视一区| 国产一区二区三区探花| 亚洲va久久| 热久久国产精品| 一区久久精品| 国内精品福利| 久久精品高清| 亚洲成人av观看| 天堂8中文在线最新版在线| 日日夜夜免费精品视频| 亚洲欧美高清| 在线综合亚洲| 亚洲作爱视频| 爽好多水快深点欧美视频| 夜久久久久久| 国产一区二区高清| 日韩精品一二三| 日韩一二三区在线观看| 日韩精品一区二区三区中文字幕| 蜜桃视频免费观看一区| 日韩激情一二三区| 国产精品v日韩精品v欧美精品网站| 日韩成人一级| 久久久国产精品入口麻豆| 国产精品一线天粉嫩av| 国产精品片aa在线观看| 91亚洲国产成人久久精品| 99久久久国产精品美女| 丝袜美腿一区二区三区| 亚洲免费网址| 国产视频网站一区二区三区| 国产精品一区二区三区av麻| 精品一区二区三区中文字幕| 韩国久久久久久| 乱人伦精品视频在线观看| 四虎精品一区二区免费| 麻豆国产91在线播放| 久久精品国产大片免费观看| 爽好久久久欧美精品| 国产美女久久| 日韩欧美一区免费| 亚洲一区欧美| 精品国产一级| 日韩中文字幕不卡| 精品三级在线| 亚洲欧美久久久| 高清av一区| 综合激情婷婷| 群体交乱之放荡娇妻一区二区| 老色鬼久久亚洲一区二区| 欧美精品成人| 中文精品电影| 日韩天堂在线| 国产精品一区二区三区av| 日本高清不卡一区二区三区视频| 西西人体一区二区| 国产一区二区三区探花| 亚洲精品乱码日韩| 久久人人精品| 精品久久91| 日本免费一区二区视频| 狠狠爱成人网| 欧美三区四区| 日韩av在线中文字幕| 日韩欧美另类中文字幕| 日韩一区二区久久| 久久麻豆精品| 婷婷综合六月| 国产毛片精品| 国产一区 二区| 99riav国产精品| 99精品在线| 91精品国产91久久久久久黑人| 麻豆成人av在线| 精品一区二区三区四区五区| 7777精品| 久久国内精品视频| 婷婷综合一区| 国产日韩欧美三区| 久久国产精品免费一区二区三区| 日韩欧美美女在线观看| 日本欧美韩国一区三区| 日韩精品欧美精品| 日韩av一区二区三区| 免费成人在线视频观看| 99国产精品自拍| 亚洲资源在线| 欧美成人aaa| 高清不卡亚洲| 亚洲深爱激情|