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

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot創(chuàng)建Docker鏡像的方法步驟

瀏覽:189日期:2023-04-08 10:40:44

隨著越來越多的組織轉(zhuǎn)向容器和虛擬服務(wù)器,Docker正成為軟件開發(fā)工作流程中一個更重要的部分。為此,Spring Boot 2.3中最新的功能之中,提供了為Spring Boot應(yīng)用程序創(chuàng)建 Docker 鏡像的能力。

這篇文章的目的,就是為了給大家介紹如何為 Spring Boot 應(yīng)用程序創(chuàng)建 Docker 鏡像。

1. 傳統(tǒng)Docker構(gòu)建

使用Spring Boot 構(gòu)建 Docker 鏡像的傳統(tǒng)方法是使用 Dockerfile 。下面是一個簡單的例子:

FROM openjdk:8-jdk-alpineEXPOSE 8080ARG JAR_FILE=target/demo-app-1.0.0.jarADD ${JAR_FILE} app.jarENTRYPOINT ['java','-jar','/app.jar']

然后我們可以使用 docker build 命令來創(chuàng)建 Docker 映像。這對大多數(shù)應(yīng)用程序都很好,但也有一些缺點。

首先,我們使用的是 Spring Boot 創(chuàng)建的 fat jar。這會影響啟動時間,尤其是在集裝箱環(huán)境中。我們可以通過添加jar文件的分解內(nèi)容來節(jié)省啟動時間。

其次,Docker鏡像是分層構(gòu)建的。Spring Boot fat jar 的特性使得所有的應(yīng)用程序代碼和第三方庫都放在一個層中。這意味著即使只有一行代碼更改,也必須重新構(gòu)建整個層。

通過在構(gòu)建之前分解 jar ,應(yīng)用程序代碼和第三方庫各自獲得自己的層。這樣,我們便可以利用Docker的緩存機(jī)制。現(xiàn)在,當(dāng)某一行代碼被更改時,只需要重新構(gòu)建相應(yīng)的層。

考慮到這一點,讓我們看看Spring Boot 如何改進(jìn)創(chuàng)建Docker鏡像的過程。

2. Buildpacks

BuildPacks 是一種提供框架和應(yīng)用程序依賴性的工具。

例如,給定一個Spring Boot fat jar,一個buildpack將為我們提供Java運行時。這使我們可以跳過 Dockerfile 并自動獲得一個合理的docker 鏡像。

Spring Boot 包括對 bulidpacks 的Maven和Gradle支持。例如,使用Maven構(gòu)建時,我們將運行以下命令:

./mvnw spring-boot:build-image

我們觀察下一些相關(guān)的輸出,看看發(fā)生了什么:

[INFO] Building jar: target/demo-0.0.1-SNAPSHOT.jar...[INFO] Building image ’docker.io/library/demo:0.0.1-SNAPSHOT’...[INFO] > Pulling builder image ’gcr.io/paketo-buildpacks/builder:base-platform-api-0.3’ 100%...[INFO] [creator] ===> DETECTING[INFO] [creator] 5 of 15 buildpacks participating[INFO] [creator] paketo-buildpacks/bellsoft-liberica 2.8.1[INFO] [creator] paketo-buildpacks/executable-jar 1.2.8[INFO] [creator] paketo-buildpacks/apache-tomcat 1.3.1[INFO] [creator] paketo-buildpacks/dist-zip 1.3.6[INFO] [creator] paketo-buildpacks/spring-boot 1.9.1...[INFO] Successfully built image ’docker.io/library/demo:0.0.1-SNAPSHOT’[INFO] Total time: 44.796 s

第一行顯示我們構(gòu)建了標(biāo)準(zhǔn)的 fat jar,與其他典型的maven包一樣。

下一行開始Docker映像構(gòu)建。然后,看到這個 bulid 拉取了 packeto 構(gòu)建器。

packeto 是基于云原生 bulidpacks 的實現(xiàn)。它負(fù)責(zé)分析我們的項目并確定所需的框架和庫。在我們的例子中,它確定我們有一個Spring Boot項目并添加所需的構(gòu)建包。

最后,我們看到生成的Docker映像和總構(gòu)建時間。注意,在第一次構(gòu)建時,花了相當(dāng)多的時間下載構(gòu)建包并創(chuàng)建不同的層。

buildpacks 的一大特點是Docker映像是多層的。因此,如果我們只更改應(yīng)用程序代碼,后續(xù)構(gòu)建將更快:

...[INFO] [creator] Reusing layer ’paketo-buildpacks/executable-jar:class-path’[INFO] [creator] Reusing layer ’paketo-buildpacks/spring-boot:web-application-type’...[INFO] Successfully built image ’docker.io/library/demo:0.0.1-SNAPSHOT’...[INFO] Total time: 10.591 s

3. 層級jar包

在某些情況下,我們可能不喜歡使用 bulidpacks ——也許我們的基礎(chǔ)架構(gòu)已經(jīng)綁定到另一個工具上,或者我們已經(jīng)有了我們想要重新使用的自定義 Dockerfiles 。

基于這些原因,Spring Boot 還支持使用分層jars 構(gòu)建Docker映像。為了了解它的工作原理,讓我們看看一個典型的Spring Boot fat jar 布局:

org/ springframework/ boot/ loader/...BOOT-INF/ classes/...lib/...

fat jar 由3個主要區(qū)域組成:

啟動Spring應(yīng)用程序所需的引導(dǎo)類 應(yīng)用程序代碼 第三方庫

使用分層jar,結(jié)構(gòu)看起來很相似,但是我們得到了一個新的 layers.idx 將 fat jar 中的每個目錄映射到一個層的文件:

- 'dependencies': - 'BOOT-INF/lib/'- 'spring-boot-loader': - 'org/'- 'snapshot-dependencies':- 'application': - 'BOOT-INF/classes/' - 'BOOT-INF/classpath.idx' - 'BOOT-INF/layers.idx' - 'META-INF/'

Out-of-the-box, Spring Boot provides four layers:

開箱即用,Spring Boot 提供4層:

dependencies: 來自第三方的依賴 snapshot-dependencies: 來自第三方的 snapshot 依賴 resources: 靜態(tài)資源 application: 應(yīng)用程序代碼和資源(resources)

我們的目標(biāo)是將應(yīng)用程序代碼和第三方庫放置到層中,以反映它們更改的頻率。

例如,應(yīng)用程序代碼可能是更改最頻繁的代碼,因此它有自己的層。此外,每一層都可以獨立演化,只有當(dāng)一層發(fā)生變化時,才會為它重建 Docker 鏡像。

現(xiàn)在我們了解了分層 jar 結(jié)構(gòu),接下來看看如何利用它來制作 Docker 映像。

3.1.創(chuàng)建分層 jar

首先,我們必須建立一個項目來創(chuàng)建一個分層的jar。對于Maven,則需要在POM的 Spring Boot plugin 部分添加一個新的配置:

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

有了這個配置,Maven package 命令(包括它的其他依賴命令)將使用前面提到的四個默認(rèn)層生成一個新的分層jar。

3.2. 查看和提取分層

下一步,我們需要從 jar 中提取層,這樣Docker鏡像才能擁有正確的層。要檢查分層jar的任何層,可以運行以下命令:

java -Djarmode=layertools -jar demo-0.0.1.jar list

然后提取它們,運行命令:

java -Djarmode=layertools -jar demo-0.0.1.jar extract

3.3. 創(chuàng)建Docker映像

將這些層合并到 Docker 映像中的最簡單方法是使用 Dockerfile :

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

這個 Dockerfile 從fat jar中提取層,然后將每個層復(fù)制到Docker映像中。

每個COPY指令最終都會在Docker映像中生成一個新層。

如果我們構(gòu)建這個Dockerfile,我們可以看到分層jar中的每個層都作為自己的層添加到Docker鏡像中:

...Step 6/10 : COPY --from=builder dependencies/ ./ ---> 2c631b8f9993Step 7/10 : COPY --from=builder snapshot-dependencies/ ./ ---> 26e8ceb86b7dStep 8/10 : COPY --from=builder spring-boot-loader/ ./ ---> 6dd9eaddad7fStep 9/10 : COPY --from=builder application/ ./ ---> dc80cc00a655...

4.總結(jié)

在本文中,我們學(xué)習(xí)了使用 Spring Boot 構(gòu)建 Docker 映像的各種方法。

使用 buildpacks,我們可以獲得合適的Docker鏡像,而無需模板或自定義配置。

或者,再多花點功夫,我們就可以使用分層 jar 來獲得一個更加定制的Docker鏡像。

到此這篇關(guān)于SpringBoot創(chuàng)建Docker鏡像的方法步驟的文章就介紹到這了,更多相關(guān)SpringBoot創(chuàng)建Docker鏡像內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产中文字幕第一页| 99视频一区| 日本欧美在线| 日韩国产高清在线| 亚洲18在线| 亚洲a级精品| 视频一区中文字幕精品| 最新亚洲国产| 日本天堂一区| 国产精品黄网站| 成人午夜在线| 久久男人av资源站| 麻豆精品蜜桃| 欧美日韩国产亚洲一区| 午夜久久美女| 国产精品腿扒开做爽爽爽挤奶网站| 国产一级久久| 日韩福利视频网| 欧美激情三区| 久久三级福利| 亚洲精品一区二区在线播放∴| 日韩福利视频导航| 欧美精品不卡| 日韩中文影院| 国产精品毛片一区二区三区| 亚洲日韩视频| 久久国产精品色av免费看| 欧美xxxx性| 日韩在线二区| 中文字幕一区二区av| 日韩国产欧美三级| 老司机免费视频一区二区三区| 日韩在线高清| 中文字幕免费精品| 久久久久亚洲精品中文字幕| 日本精品在线中文字幕| 天堂av在线一区| 国产日韩一区二区三免费高清 | 欧美gv在线| 久久99伊人| 久久精品国产免费| 欧美1区2区3区| 日韩一区二区三区在线看| 麻豆传媒一区二区三区| 婷婷成人基地| 鲁大师精品99久久久| 欧美特黄一级大片| 奇米狠狠一区二区三区| 999久久久91| 国产精品一站二站| 免费av一区| 麻豆精品久久久| 免费日韩av片| 成人高清一区| 日韩黄色免费网站| 99久久亚洲精品蜜臀| 日本欧美韩国一区三区| 亚洲涩涩在线| 91精品啪在线观看国产爱臀| 久久国产电影| 欧美极品中文字幕| 蜜臀a∨国产成人精品| 福利欧美精品在线| 亚洲精品一区二区在线播放∴| av日韩中文| 日韩av不卡在线观看| 亚洲午夜一级| 精品一区二区三区在线观看视频| 蜜桃视频在线观看一区二区| 日韩欧美1区| 国产精品www.| 亚洲精品美女91| 亚洲成人不卡| 国产精品高清一区二区| 免费观看在线综合| 欧美亚洲在线日韩| 国产精品videossex久久发布 | 国产精品毛片| 日韩欧美精品综合| 国产精品免费99久久久| 人人精品人人爱| 欧美大黑bbbbbbbbb在线| 国产成人精选| 国产精品日本一区二区不卡视频| 中文国产一区| 中文字幕在线视频久| 国产欧美91| 亚洲精品一级| 亚洲深爱激情| 激情婷婷久久| 中文字幕系列一区| 精品九九在线| 你懂的国产精品| 啪啪亚洲精品| 天堂va欧美ⅴa亚洲va一国产| 99国产精品| 欧美日韩激情在线一区二区三区| 天堂av在线| 成人影视亚洲图片在线| 国产日韩中文在线中文字幕| 亚洲精品福利| 国产婷婷精品| 国产高清久久| 久久麻豆精品| 日韩中文影院| 香蕉成人av| 日韩欧美一区二区三区在线观看| 精品国产午夜肉伦伦影院| 国产精品三p一区二区| 欧美日韩精品一区二区三区在线观看| 喷白浆一区二区| 男人操女人的视频在线观看欧美| 先锋影音久久久| 夜夜嗨网站十八久久| 国产亚洲精品久久久久婷婷瑜伽| 夜夜嗨av一区二区三区网站四季av| 精品成人免费一区二区在线播放| 麻豆视频在线观看免费网站黄| 成人台湾亚洲精品一区二区| 国产精品黑丝在线播放| 岛国av免费在线观看| 国产资源在线观看入口av| 国产精品国产三级国产在线观看| 国产成人精品一区二区免费看京| 精品福利久久久| 日本一二区不卡| 日韩国产一区二区三区| 久久久久久久久久久妇女| 在线视频观看日韩| 樱桃成人精品视频在线播放| 亚洲欧美日本日韩| 另类亚洲自拍| 日本在线不卡视频| 欧美一级二级三级视频| 国产精品嫩草影院在线看| 国产精品欧美在线观看| 精品国产乱码久久久| 在线中文字幕播放| 九九精品调教| 国产韩日影视精品| 石原莉奈在线亚洲二区| 日本少妇一区二区| 国产日韩视频在线| 精品国产乱码| 99精品综合| 丝袜亚洲另类欧美| 日韩三级精品| 精品一级视频| 久久精品国产亚洲夜色av网站 | 亚洲欧美日本国产| 国产精品最新| 成人自拍av| 日本欧美在线看| 国产精品v日韩精品v欧美精品网站 | 亚洲精品免费观看| 国产精品一在线观看| 欧美xxxx中国| 在线亚洲观看| 国产精品自在| 久久久久久久久99精品大| 蜜臀av国产精品久久久久| 国产欧美一区二区三区国产幕精品| 国产一区二区三区不卡av| 欧美+日本+国产+在线a∨观看| 亚洲不卡视频| sm捆绑调教国产免费网站在线观看| 久久精品亚洲人成影院| 中文字幕日韩亚洲| 成人精品国产亚洲| 中文精品视频| 国产精品3区| 欧美二区视频| 久久精品72免费观看| 日韩在线短视频| 亚洲三级网站| 中文在线资源| 日本中文字幕一区二区| 黑人精品一区| 日韩**一区毛片| 四虎4545www国产精品 | 精品美女视频 | 久久中文视频| 欧美天堂一区二区| 欧美aa在线观看| 日韩高清不卡一区二区| 日韩在线看片| 欧美亚洲专区| 国产国产精品| 精品三级在线| 热久久久久久久| 日韩精品中文字幕第1页| 日欧美一区二区| 欧美日韩精品在线一区| 国产欧美高清| 午夜精品免费| а√天堂8资源在线| 91亚洲无吗| 99国产精品99久久久久久粉嫩| 精品一区二区三区视频在线播放| 亚洲视频电影在线|