這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)SpringBoot(2.3)應(yīng)用制作Docker鏡像的過(guò)程,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)專注于坡頭網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供坡頭營(yíng)銷型網(wǎng)站建設(shè),坡頭網(wǎng)站制作、坡頭網(wǎng)頁(yè)設(shè)計(jì)、坡頭網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造坡頭網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供坡頭網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
以<font color="blue">SpringBoot-2.2.0.RELEASE</font>版本為例,官方文檔( https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/pdf/spring-boot-reference.pdf)給出的做法如下:
將SpringBoot工程編譯構(gòu)建,在target目錄得到j(luò)ar;
在target目錄新建dependency文件夾;
將jar解壓到dependency文件夾;
編寫Dockerfile文件,內(nèi)容如下:
FROM openjdk:8-jdk-alpine VOLUME /tmp ARG DEPENDENCY=target/dependency 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"]
可見,官方推薦的做法是將整個(gè)jar文件解壓,在Dockerfile中多次用COPY命令分別復(fù)制,這樣做的好處顯而易見:多個(gè)layer,如果鏡像的新版本中只修改了應(yīng)用代碼,那么下載鏡像時(shí)只會(huì)下載/app這個(gè)layer,其他部分直接使用本地緩存,這是docker鏡像的常規(guī)優(yōu)化手段;
上述方案有個(gè)小問(wèn)題:<font color="red">麻煩!??!</font>
于是2.3.0.RELEASE版本做了些優(yōu)化,讓事情變得簡(jiǎn)單些;
2.3.0.RELEASE版本構(gòu)建Docker的步驟如下:
pom.xml中的spring-boot-maven-plugin插件增加一個(gè)配置項(xiàng); 2.編譯構(gòu)建生成jar;
編寫Dockerfile,里面用到了多階段構(gòu)建(multi-stage builds),用工具從jar中提取拆分后,再多次執(zhí)行COPY命令將拆分后的內(nèi)容放入鏡像,達(dá)到多個(gè)layer的目的;
因此,2.3.0.RELEASE版本和舊版本相比有如下變化:
<font color="blue">pom.xml</font>中多了個(gè)參數(shù);
構(gòu)建好jar后,無(wú)需自己解壓jar;
Dockefile內(nèi)容不一樣,舊版是手動(dòng)解壓jar,再在Dockerfile分別復(fù)制,2.3.0.RELEASE是通過(guò)<font color="red">java命令從jar中提取出各部分內(nèi)容</font>;
搞清楚了新舊版本的區(qū)別,咱們繼續(xù)研究下一個(gè)問(wèn)題吧;
pring-boot-maven-plugin插件新增參數(shù)如下圖所示:
2. 上述參數(shù)有啥用?我這邊編譯構(gòu)建了兩次jar,第一次有上述參數(shù),第二次沒(méi)有,將兩次生成的jar解壓后對(duì)比,發(fā)現(xiàn)用了上述參數(shù)后,生成的jar會(huì)多出下圖紅框中的兩個(gè)文件:
看看<font color="blue">layers.idx</font>文件的內(nèi)容,如下圖:
上圖中的內(nèi)容分別是什么意思呢?官方已給出了詳細(xì)解釋,如下圖紅框:
綜上所述,layers.idx文件是個(gè)清單,里面記錄了所有要被復(fù)制到鏡像中的信息,接下來(lái)看看如何使用layers.idx文件,這就涉及到j(luò)ar包中新增的另一個(gè)文件:<font color="blue">spring-boot-jarmode-layertools-2.3.0.RELEASE.jar</font>
前面已經(jīng)介紹過(guò)jar中除了layers.idx,還多了個(gè)文件:<font color="blue">spring-boot-jarmode-layertools-2.3.0.RELEASE.jar</font> ,來(lái)看看這個(gè)文件的用處;
進(jìn)入工程的<font color="blue">target</font>目錄,這里面是編譯后的jar文件(我這里文件名為dockerlayerdemo-0.0.1-SNAPSHOT.jar),注意此時(shí)的<font color="blue">spring-boot-maven-plugin</font>插件是帶上了下圖紅框中的參數(shù)的:
執(zhí)行以下命令:
java -Djarmode=layertools -jar dockerlayerdemo-0.0.1-SNAPSHOT.jar list
得到結(jié)果如下圖所示,是layers.idx文件的內(nèi)容:
來(lái)看看官方對(duì)這個(gè)<font color="blue">layertools</font>的解釋,list參數(shù)的作用上面我們已經(jīng)體驗(yàn)過(guò)了,重點(diǎn)是紅框中的<font color="red">extract</font>參數(shù),它的作用是從jar中提取構(gòu)建鏡像所需的內(nèi)容:
看到這里,您是否想到了《體驗(yàn)SpringBoot(2.3)應(yīng)用制作Docker鏡像(官方方案)》中Dockerfile的內(nèi)容,請(qǐng)看下圖的紅框和紅字,是否有種恍然大悟的感覺:jar構(gòu)建生成清單layers.idx,Dockerfile中根據(jù)清單從jar提取文件放入鏡像:
至此,三個(gè)問(wèn)題都已經(jīng)找到了答案,小結(jié)一下:
pom.xml中的spring-boot-maven-plugin插件增加一個(gè)配置項(xiàng);
構(gòu)建好jar后,舊版本要自己解壓jar,新版不需要;
新版本的jar中,多了個(gè)文件清單<font color="blue">layers.idx</font>和鏡像文件處理工具<font color="blue">spring-boot-jarmode-layertools-2.3.0.RELEASE.jar</font>;
舊版的Dockefile內(nèi)容:因?yàn)榍懊娼鈮汉昧?,所有在Dockerfile里直接復(fù)制前面解壓的內(nèi)容,這里就有個(gè)風(fēng)險(xiǎn):前一步解壓和當(dāng)前復(fù)制的文件位置要保證一致;
新版的Dockerfile內(nèi)容:使用工具spring-boot-jarmode-layertools-2.3.0.RELEASE.jar,根據(jù)的layers.idx內(nèi)容從jar中提取文件,復(fù)制到鏡像中;
新版的Dockerfile中,由于使用了分階段構(gòu)建,因此從jar提取文件的操作不會(huì)保存到鏡像的layer中;
spring-boot-maven-plugin插件新增的參數(shù),使得編譯構(gòu)建得到j(luò)ar中多了兩個(gè)文件,如下圖所示:
<font color="blue">java -Djarmode=layertools -jar application.jar extract</font>的作用是從jar中提取文件,這些文件是docker鏡像的一部分;
上述操作的參數(shù)是<font color="blue">extract</font>,另外還有兩個(gè)參數(shù),官方解釋它們的作用如下:
至此,問(wèn)題已全部澄清,相信您對(duì)SpringBoot-2.3.0.RELEASE官方的鏡像構(gòu)建方案也足夠了解了,最后是我根據(jù)自己的認(rèn)識(shí)畫的流程圖,幫助您快速理解整個(gè)構(gòu)建流程:
上述就是小編為大家分享的SpringBoot(2.3)應(yīng)用制作Docker鏡像的過(guò)程了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:SpringBoot(2.3)應(yīng)用制作Docker鏡像的過(guò)程
文章鏈接:http://jinyejixie.com/article40/gcejho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、全網(wǎng)營(yíng)銷推廣、外貿(mào)建站、、品牌網(wǎng)站建設(shè)、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)