您好,登錄后才能下訂單哦!
SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
本次實(shí)戰(zhàn)用的是普通的SpringBoot工程,如果您不想寫代碼,源碼可在GitHub下載到,地址和鏈接信息如下表所示:
名稱 | 鏈接 | 備注 |
---|---|---|
項(xiàng)目主頁 | https://github.com/zq2599/blog_demos | 該項(xiàng)目在GitHub上的主頁 |
git倉庫地址(https) | https://github.com/zq2599/blog_demos.git | 該項(xiàng)目源碼的倉庫地址,https協(xié)議 |
git倉庫地址(ssh) | git@github.com:zq2599/blog_demos.git | 該項(xiàng)目源碼的倉庫地址,ssh協(xié)議 |
這個(gè)git項(xiàng)目中有多個(gè)文件夾,本章的應(yīng)用在<font color="blue">dockerlayerdemo</font>文件夾下,如下圖紅框所示:
SpringBoot:2.3.0.RELEASE
JDK:1.8.0_121
Maven:3.3.9
Docker:19.03.8
操作系統(tǒng):MacBook pro 13寸,macOS Catalina 10.15.4
修改pom.xml,給<font color="blue">spring-boot-maven-plugin</font>插件的配置增加子節(jié)點(diǎn),<font color="blue">enabled</font>的值為<font color="red">true</font>,如下圖紅框所示:
在pom.xml文件所在目錄新增<font color="blue">Dockerfile</font>文件,內(nèi)容如下:
# 指定基礎(chǔ)鏡像,這是分階段構(gòu)建的前期階段 FROM openjdk:8u212-jdk-stretch as builder # 執(zhí)行工作目錄 WORKDIR application # 配置參數(shù) ARG JAR_FILE=target/*.jar # 將編譯構(gòu)建得到的jar文件復(fù)制到鏡像空間中 COPY ${JAR_FILE} application.jar # 通過工具spring-boot-jarmode-layertools從application.jar中提取拆分后的構(gòu)建結(jié)果 RUN java -Djarmode=layertools -jar application.jar extract # 正式構(gòu)建鏡像 FROM openjdk:8u212-jdk-stretch 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", "org.springframework.boot.loader.JarLauncher"]
執(zhí)行以下命令編譯構(gòu)建工程:
mvn clean package -U -DskipTests
編譯構(gòu)建完成后確保target目錄有<font color="red">jar</font>文件生成;
在Dockerfile所在目錄執(zhí)行以下命令構(gòu)建鏡像(請(qǐng)按照您的實(shí)際情況調(diào)整鏡像名):
docker build -t dockerlayerdemo:0.0.1 .
鏡像構(gòu)建成功的提示如下:
執(zhí)行以下命令創(chuàng)建并啟動(dòng)容器:
docker run --rm -p 8080:8080 dockerlayerdemo:0.0.1
啟動(dòng)成功的控制臺(tái)信息:
3. 瀏覽器訪問:http://localhost:8080/hello ,如下圖,一切正常:
4. 看看鏡像的分層信息,執(zhí)行命令:
docker history dockerlayerdemo:0.0.1
如下圖,整個(gè)jar的內(nèi)容,例如class、依賴庫、依賴資源等,分多次COPY到鏡像空間中,所以今后如果只改了class,在更新鏡像的時(shí)候,只需要下載class的layer即可(其他layer可以直接用之前緩存到本地的):
至此,SpringBoot-2.3.0.RELEASE官方推薦的鏡像構(gòu)建方式就實(shí)踐完成了,但是也留下了一些疑問:
2.3版本推薦的鏡像構(gòu)建方案,和舊版本比有什么不同?
pom.xml中spring-boot-maven-plugin插件新增的參數(shù),到底做了什么?
Dockerfile中,<font color="blue">java -Djarmode=layertools -jar application.jar extract</font>這個(gè)操作啥意思?
看完上述內(nèi)容,你們掌握SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。