电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

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

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

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

使用Spring Boot 構建 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ù)應用程序都很好,但也有一些缺點。

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

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

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

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

2. Buildpacks

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

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

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

./mvnw spring-boot:build-image

我們觀察下一些相關的輸出,看看發(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

第一行顯示我們構建了標準的 fat jar,與其他典型的maven包一樣。

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

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

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

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

...[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 ——也許我們的基礎架構已經(jīng)綁定到另一個工具上,或者我們已經(jīng)有了我們想要重新使用的自定義 Dockerfiles 。

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

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

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

啟動Spring應用程序所需的引導類 應用程序代碼 第三方庫

使用分層jar,結構看起來很相似,但是我們得到了一個新的 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: 應用程序代碼和資源(resources)

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

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

現(xiàn)在我們了解了分層 jar 結構,接下來看看如何利用它來制作 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 命令(包括它的其他依賴命令)將使用前面提到的四個默認層生成一個新的分層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中提取層,然后將每個層復制到Docker映像中。

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

如果我們構建這個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.總結

在本文中,我們學習了使用 Spring Boot 構建 Docker 映像的各種方法。

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

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

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 设定时间记录电子秤-自动累计储存电子秤-昆山巨天仪器设备有限公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 承插管件_不锈钢承插管件_锻钢高压管件-温州科正阀门管件有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 温州富欧金属封头-不锈钢封头厂家 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | DDoS安全防护官网-领先的DDoS安全防护服务商 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 304不锈钢无缝管_不锈钢管厂家 - 隆达钢业集团有限公司 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 尾轮组_头轮组_矿用刮板_厢式刮板机_铸石刮板机厂家-双驰机械 | 山东柳店新能源科技有限公司| 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 营养师网,营养师考试时间,报名入口—网站首页 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 精密五金加工厂-CNC数控车床加工_冲压件|蜗杆|螺杆加工「新锦泰」 |