溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的

發(fā)布時(shí)間:2021-10-12 14:06:46 來源:億速云 閱讀:153 作者:柒染 欄目:云計(jì)算

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

SpringBoot應(yīng)用源碼

本次實(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)應(yīng)用制作Docker鏡像的方法是怎樣的

版本信息

  1. SpringBoot:2.3.0.RELEASE

  2. JDK:1.8.0_121

  3. Maven:3.3.9

  4. Docker:19.03.8

  5. 操作系統(tǒng):MacBook pro 13寸,macOS Catalina 10.15.4

構(gòu)建鏡像實(shí)戰(zhàn)

  1. 修改pom.xml,給<font color="blue">spring-boot-maven-plugin</font>插件的配置增加子節(jié)點(diǎn),<font color="blue">enabled</font>的值為<font color="red">true</font>,如下圖紅框所示:

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的

  1. 在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"]
  1. 執(zhí)行以下命令編譯構(gòu)建工程:

mvn clean package -U -DskipTests
  1. 編譯構(gòu)建完成后確保target目錄有<font color="red">jar</font>文件生成;

  2. 在Dockerfile所在目錄執(zhí)行以下命令構(gòu)建鏡像(請(qǐng)按照您的實(shí)際情況調(diào)整鏡像名):

docker build -t dockerlayerdemo:0.0.1 .
  1. 鏡像構(gòu)建成功的提示如下:

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的

驗(yàn)證

  1. 執(zhí)行以下命令創(chuàng)建并啟動(dòng)容器:

docker run --rm -p 8080:8080 dockerlayerdemo:0.0.1
  1. 啟動(dòng)成功的控制臺(tái)信息:

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的 3. 瀏覽器訪問:http://localhost:8080/hello ,如下圖,一切正常:

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的 4. 看看鏡像的分層信息,執(zhí)行命令:

docker history dockerlayerdemo:0.0.1
  1. 如下圖,整個(gè)jar的內(nèi)容,例如class、依賴庫、依賴資源等,分多次COPY到鏡像空間中,所以今后如果只改了class,在更新鏡像的時(shí)候,只需要下載class的layer即可(其他layer可以直接用之前緩存到本地的):

SpringBoot(2.3)應(yīng)用制作Docker鏡像的方法是怎樣的

至此,SpringBoot-2.3.0.RELEASE官方推薦的鏡像構(gòu)建方式就實(shí)踐完成了,但是也留下了一些疑問:

  1. 2.3版本推薦的鏡像構(gòu)建方案,和舊版本比有什么不同?

  2. pom.xml中spring-boot-maven-plugin插件新增的參數(shù),到底做了什么?

  3. 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è)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI