最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析(推薦)

 更新時(shí)間:2021年12月10日 10:48:33   作者:C_BC  
這篇文章主要介紹了Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析,本文通過圖文并茂的形式實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下

1. 準(zhǔn)備 spring boot 項(xiàng)目

簡(jiǎn)單,略過
spring boot 版本 > 2.3.x 即可
簡(jiǎn)單寫了一個(gè) hello world

2. 進(jìn)行相關(guān)配置

這里網(wǎng)上很多 blog 都強(qiáng)調(diào)了要去 pom.xml 里手動(dòng)配置啟用分層打包:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!--開啟分層編譯支持-->
                <layers>
                    <enabled>true</enabled>
                </layers>
            </configuration>
        </plugin>
    </plugins>
</build>

2.3.x版本的時(shí)候因?yàn)槭切鹿δ苄枰謩?dòng)配置開啟。但是目前 spring boot 版本(使用版本2.6.1)實(shí)測(cè)不需要手動(dòng)配置,默認(rèn)支持該特性。(根據(jù)一些 blog 的說法是 2.4.x 版本之后就默認(rèn)開啟了)

目前的官方文檔(2.6.0版本)的說法也是默認(rèn)支持,反而不需要該特性時(shí)才需要手動(dòng)配置:

The repackaged archive includes the layers.idx file by default. To disable this feature, you can do so in the following manner:

<project>
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
               <configuration>
                   <layers>
                       <enabled>false</enabled>
                   </layers>
               </configuration>
           </plugin>
       </plugins>
   </build>
</project>

3. package

執(zhí)行 mvn package 進(jìn)行打包,得到 jar 包文件。

其實(shí)實(shí)際上本質(zhì)是使用了 spring-boot-maven 插件的 repackage,得到了完整的包含依賴的 jar 包和原始的 jar 包(自動(dòng)添加后綴 .original)
打開 jar 包,會(huì)發(fā)現(xiàn)在 BOOT-INF 文件夾下有 classpath.idxlayers.idx 文件,打開看下:

classpath.idx

- "BOOT-INF/lib/logback-classic-1.2.7.jar"

- "BOOT-INF/lib/logback-core-1.2.7.jar"

- "BOOT-INF/lib/log4j-to-slf4j-2.14.1.jar"

- "BOOT-INF/lib/log4j-api-2.14.1.jar"

- "BOOT-INF/lib/jul-to-slf4j-1.7.32.jar"

- "BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar"

- "BOOT-INF/lib/snakeyaml-1.29.jar"

- "BOOT-INF/lib/jackson-databind-2.13.0.jar"

- "BOOT-INF/lib/jackson-annotations-2.13.0.jar"

- "BOOT-INF/lib/jackson-core-2.13.0.jar"

- "BOOT-INF/lib/jackson-datatype-jdk8-2.13.0.jar"

- "BOOT-INF/lib/jackson-datatype-jsr310-2.13.0.jar"

- "BOOT-INF/lib/jackson-module-parameter-names-2.13.0.jar"

- "BOOT-INF/lib/tomcat-embed-core-9.0.55.jar"

- "BOOT-INF/lib/tomcat-embed-el-9.0.55.jar"

- "BOOT-INF/lib/tomcat-embed-websocket-9.0.55.jar"

- "BOOT-INF/lib/spring-web-5.3.13.jar"

- "BOOT-INF/lib/spring-beans-5.3.13.jar"

- "BOOT-INF/lib/spring-webmvc-5.3.13.jar"

- "BOOT-INF/lib/spring-aop-5.3.13.jar"

- "BOOT-INF/lib/spring-context-5.3.13.jar"

- "BOOT-INF/lib/spring-expression-5.3.13.jar"

- "BOOT-INF/lib/spring-boot-2.6.1.jar"

- "BOOT-INF/lib/spring-boot-autoconfigure-2.6.1.jar"

- "BOOT-INF/lib/slf4j-api-1.7.32.jar"

- "BOOT-INF/lib/spring-core-5.3.13.jar"

- "BOOT-INF/lib/spring-jcl-5.3.13.jar"

- "BOOT-INF/lib/spring-boot-jarmode-layertools-2.6.1.jar"

layers.idx

- "dependencies":

? - "BOOT-INF/lib/"

- "spring-boot-loader":

? - "org/"

- "snapshot-dependencies":

- "application":

? - "BOOT-INF/classes/"

? - "BOOT-INF/classpath.idx"

? - "BOOT-INF/layers.idx"

? - "META-INF/"

再驗(yàn)證一下:

分層信息 ok

4. Dockerfile

Dockerfile 文件也相對(duì)常規(guī),只是在打包鏡像之前使用 jarmode 命令把 jar 包解壓了,然后在打包鏡像過程中將不同層依次 COPY,將改動(dòng)可能性最大的應(yīng)用層放在最后,這樣前面的沒有變化就可以直接使用 Docker 的緩存以提高打包效率。

FROM eclipse-temurin:8-jre-focal as builder??

WORKDIR application??

ARG JAR_FILE=target/*.jar??

COPY ${JAR_FILE} application.jar??

RUN java -Djarmode=layertools -jar application.jar extract??

FROM eclipse-temurin:8-jre-focal??

WORKDIR application??

COPY --from=builder application/dependencies/ ./??

COPY --from=builder application/spring-boot-loader/ ./??

COPY --from=builder application/snapshot-dependencies/ ./??

COPY --from=builder application/application/ ./??

ENV TZ="Asia/Shanghai"??

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone??

ENV JVM_OPTS=""??

ENV JAVA_OPTS=""??

ENTRYPOINT ["sh","-c","java $JVM_OPTS $JAVA_OPTS org.springframework.boot.loader.JarLauncher"]

5. 應(yīng)用程序修改&dive分析

其實(shí)如果只打包一次鏡像是沒有體現(xiàn)分層的優(yōu)勢(shì)的,所以需要修改部分內(nèi)容后再打包一次(或者多次,但是本質(zhì)是一樣的所以這里只修改了一次)
修改部分應(yīng)用代碼:

重新打 jar 包&重新打鏡像,這樣得到了兩個(gè)鏡像:

使用 dive 對(duì)兩個(gè)鏡像進(jìn)行分析:

可以發(fā)現(xiàn):直到發(fā)生改變的應(yīng)用層(application/application/)之前,兩邊的分層的 Id、Digest 都是完全一致的,所以這些層是可以復(fù)用的,相同的層只會(huì)在 docker 的目錄下存儲(chǔ)單個(gè),如此可以大大減少容器編譯、推送的時(shí)長(zhǎng)。
(具體 docker 鏡像的分層的了解還有限,后續(xù)再進(jìn)一步了解)

到此這篇關(guān)于Spring Boot 分層打包 Docker 鏡像實(shí)踐及分析的文章就介紹到這了,更多相關(guān)Spring Boot 分層打包 Docker 鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • win10家庭版安裝Docker的方法步驟

    win10家庭版安裝Docker的方法步驟

    這篇文章主要介紹了win10家庭版安裝Docker的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • docker?mysql關(guān)于配置文件、連接客戶端、/docker-entrypoint-initdb.d/目錄的使用

    docker?mysql關(guān)于配置文件、連接客戶端、/docker-entrypoint-initdb.d/目錄的使用

    這篇文章主要介紹了docker?mysql關(guān)于配置文件、連接客戶端、/docker-entrypoint-initdb.d/目錄的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Docker 鏡像國(guó)內(nèi)加速的方法匯總(收藏版)

    Docker 鏡像國(guó)內(nèi)加速的方法匯總(收藏版)

    本文介紹了在國(guó)內(nèi)使用Docker時(shí)遇到的加速和優(yōu)化方法,針對(duì)國(guó)內(nèi)下載速度慢和斷線問題,可以使用國(guó)內(nèi)可用的DockerRegistryMirrors或自建DockerRegistryMirror/Proxy,針對(duì)沒有公共鏡像庫賬號(hào)導(dǎo)致的限流問題,可以注冊(cè)各個(gè)鏡像庫賬號(hào)并登錄,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • docker system命令集合的使用

    docker system命令集合的使用

    本文主要介紹了docker system命令集合的使用,主要包括清理沒有使用的數(shù)據(jù),包括鏡像數(shù)據(jù),已經(jīng)停止的容器等等,具有一定的參考價(jià)值,感興趣的可以了解下
    2021-10-10
  • 使用docker-compose實(shí)現(xiàn)不停機(jī)部署/灰度發(fā)布的四種方法

    使用docker-compose實(shí)現(xiàn)不停機(jī)部署/灰度發(fā)布的四種方法

    灰度發(fā)布是一種軟件部署策略,它允許將新版本的部分功能或服務(wù)逐步推送給用戶,而不是一次性對(duì)所有用戶進(jìn)行大規(guī)模更新,本文主要給大家介紹了使用docker-compose實(shí)現(xiàn)不停機(jī)部署/灰度發(fā)布的四種方法,需要的朋友可以參考下
    2024-11-11
  • 詳解Docker 端口映射與容器互聯(lián)

    詳解Docker 端口映射與容器互聯(lián)

    這篇文章主要介紹了詳解Docker 端口映射與容器互聯(lián) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • docker運(yùn)行異構(gòu)鏡像詳解

    docker運(yùn)行異構(gòu)鏡像詳解

    介紹了在不同CPU架構(gòu)下運(yùn)行Docker鏡像時(shí)遇到的問題及解決方法,作者分享了由于銀行使用鯤鵬系統(tǒng)(ARM架構(gòu))導(dǎo)致Docker容器運(yùn)行失敗的經(jīng)歷,解決方法包括啟用`--platform`參數(shù)、安裝`qemu-user-static`及`binfmt_misc`
    2024-12-12
  • skywalking容器化部署docker鏡像構(gòu)建k8s從測(cè)試到可用

    skywalking容器化部署docker鏡像構(gòu)建k8s從測(cè)試到可用

    這篇文章主要為大家介紹了skywalking容器化部署docker鏡像構(gòu)建k8s從測(cè)試到可用的構(gòu)建部署過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 在Docker上安裝配置Oracle教程

    在Docker上安裝配置Oracle教程

    本篇文章主要介紹了在 Docker 上配置 Oracle教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)

    docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)

    本文主要介紹了docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論

石楼县| 陕西省| 天等县| 雷波县| 顺昌县| 凭祥市| 称多县| 襄垣县| 南康市| 景洪市| 夏河县| 互助| 敦化市| 广元市| 普兰县| 陕西省| 德令哈市| 黎平县| 商洛市| 德昌县| 江西省| 蓝山县| 湖北省| 崇义县| 温宿县| 金昌市| 汝阳县| 铁岭市| 资讯 | 大丰市| 高淳县| 五台县| 金昌市| 福建省| 健康| 福贡县| 孝感市| 中超| 布尔津县| 青冈县| 安新县|