SpringBoot打包成Docker鏡像的項目實踐
dockerFile編寫
普通dockerFile
FROM java:8 #此處的*為正則表達式,表示以.jar結(jié)尾的同步錄下的文件(這里的jar是maven打包好的) COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
這種方法有缺點:
- 鏡像中的jar包是壓縮文件,在容器環(huán)境中運行需要解壓,造成比較大的開銷
- 將依賴和程序都放在一個層中,更新程序后編譯新的鏡像效率低。一般來說,依賴是基本不變的,只需要更新程序代碼。
spring
官方推薦,構(gòu)建鏡像時,不要直接使用壓縮的jar,而應該解壓后構(gòu)建鏡像。
解壓方式打包的dockerFile的編寫有版本分界線:springboot-2.3
,在2.3
以后的版本中,可以使用spring-boot-jarmode-layertools
來幫助解壓構(gòu)建。
將spring-boot項目打成jar包
將jar解壓到target/dependency
dockerFile
文件
FROM openjdk:8-jdk-alpine VOLUME /tmp ARG DEPENDENCY=target/dependency # jar包解壓位置 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"]
2.3以后
使用spring-boot-jarmode-layertools
,更加方便
# 指定基礎(chǔ)鏡像,這是分階段構(gòu)建的前期階段 FROM openjdk:8 as builder # 執(zhí)行工作目錄 WORKDIR application # 配置參數(shù) ARG JAR_FILE=target/*.jar # 將編譯構(gòu)建得到的jar文件復制到鏡像空間中 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:8 WORKDIR application # 前一階段從jar中提取除了多個文件,這里分別執(zhí)行COPY命令將他們復制到鏡像空間中,每次COPY都是一個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","-Duser.timezone=GMT+8","org.springframework.boot.loader.JarLauncher"]
使用dockerFile打包鏡像
# '-t' 設(shè)置打包鏡像tag, '-f' 設(shè)置DockerFile文件, '.'選擇當前目錄 docker build -t test:1.0 -f .\DockerFile .
到此這篇關(guān)于SpringBoot打包成Docker鏡像的項目實踐的文章就介紹到這了,更多相關(guān)SpringBoot打包成Docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker構(gòu)建簡單的個人主頁網(wǎng)站實戰(zhàn)教程
Docker是一種開源容器化技術(shù),可以打包、發(fā)布和運行應用程序,本教程介紹了如何使用Docker構(gòu)建一個簡單的個人主頁網(wǎng)站,通過編寫Dockerfile來自定義鏡像,并展示了如何通過傳入環(huán)境變量來動態(tài)更改網(wǎng)頁內(nèi)容,項目使用的技術(shù)包括Docker、Alpine、Nginx、HTML、CSS和JavaScript2024-10-10Docker Compose快速部署多容器服務實戰(zhàn)的實例詳解
使用 Docker Compose 可以輕松、高效的管理容器,它是一個用于定義和運行多容器 Docker 的應用程序工具,本文給大家介紹Docker Compose快速部署多容器服務實戰(zhàn),感興趣的朋友一起看看吧2022-02-02Docker安裝阿里云服務器和在虛擬機安裝遇到的坑(問題小結(jié))
這篇文章主要介紹了Docker安裝阿里云服務器和在虛擬機安裝遇到的坑,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03解決docker網(wǎng)絡(luò)錯誤(network bridge not found)
這篇文章主要介紹了解決docker網(wǎng)絡(luò)錯誤(network bridge not found)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08