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

springboot服務(wù)docker打包分層的實現(xiàn)

 更新時間:2025年09月16日 10:32:14   作者:在下uptown  
SpringBoot2.3.0支持分層打包,通過Maven分層僅重建業(yè)務(wù)代碼層,可以避免重復打包依賴,大幅提升容器構(gòu)建效率,具有一定的參考價值,感興趣的可以了解一下

前言

隨著云原生技術(shù)的發(fā)展,現(xiàn)在大部分企業(yè)項目都通過容器化來部署項目,不管是docker部署還是k8s都離不開打鏡像的環(huán)節(jié),傳統(tǒng)打鏡像的方式通常時間上會比較漫長,有時候改動少量代碼就需要全部打包。今天來體驗一下Springboot2.3.0后的分層打包功能。

普通打包

我們先新建一個添加了springboot依賴的maven測試項目,對于諸位老Javaboy來說屬于閉著眼操作了,默認的maven項目里一般不會自動添加上打包插件。最開始接觸springboot的時候使用maven package打出來jar包啟動會發(fā)現(xiàn)報錯找不到入口類。

所以一定要在pom中加上

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.uptown.sign.SignApplication</mainClass>
                <layout>ZIP</layout>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

隨便寫一個hello world的控制器入口,然后直接編寫Dockerfile文件

FROM openjdk:8-jdk-alpine

# 打包命令
RUN mvn package
# 聲明一個端口但不真正運行在這個端口
EXPOSE 8080
# 把打出來的包添加到鏡像中
ADD target/*.jar ./app.jar
# 執(zhí)行命令
CMD java -jar app.jar

完事之后運行命令打成鏡像測試

docker build . -t test:0.0.1

打出鏡像后查看鏡像的分層結(jié)構(gòu)。

docker inspect test:0.0.1

圖中的Layers就是鏡像層,docker是會按命令分層,我們把hello world改成fu ck work,重新執(zhí)行下上述步驟再docker inspect分析下新鏡像的Layers會發(fā)現(xiàn)

你會發(fā)現(xiàn)這些Layers中只有最后一處與舊鏡像內(nèi)容不一樣,我們僅僅只改動了一個接口返回的文案,重新打包后會把所有動作重新都做一邊,做完后發(fā)現(xiàn)打出來的鏡像每層基本都一樣,只有最后一層有變化,那么我們能不能只重新制作有變化的包呢。

分層打包

當然是可以了,這就是springboot在230加的新特性,雖然現(xiàn)在springboot版本已經(jīng)出道3了,但是我認為越迭代越重,加了很多可有可無的東西,不如老版本中一些好用的特性值得把玩。

根本原理其實是一個springboot打出jar包中主要包含四個部分,自己寫的代碼第三方依賴、SpringBoot內(nèi)部配置、快照依賴 ,如果僅僅只是改動了自己寫的代碼的話那其他那三部分根本不用變。也就是說如果你換了依賴版本那就不行了。

首先在pom中打開分層開關(guān)

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

再用mvn package打包之后我們用命令分析下jar包內(nèi)容

java -Djarmode=layertools -jar target/dockers-demo-0.0.1-SNAPSHOT.jar list

這里就分別對應(yīng)了上述那四個部分代碼,所以如果只更改部分代碼的話并不需要再將依賴相關(guān)的代碼編譯上次編譯完的直接用唄。

FROM openjdk:8-jdk-alpine
RUN mvn package
ADD target/*.jar ./app.jar
RUN java -Djarmode=layertools -jar app.jar extract

FROM openjdk:8-jre
WORKDIR application
# 復制第三方依賴、SpringBoot內(nèi)部配置、快照依賴
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"]

改造后你再去打包會發(fā)現(xiàn)特別快,springboot好用就在于內(nèi)置了很多依賴包,跨過依賴包單獨打業(yè)務(wù)代碼快的一批,但是僅在依賴版本未發(fā)生變更的場景下生效。

到此這篇關(guān)于springboot服務(wù)docker打包分層的實現(xiàn)的文章就介紹到這了,更多相關(guān)springboot docker打包分層內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows系統(tǒng)下裝Docker至D盤/其他盤最新方法(最準確,直接裝)

    Windows系統(tǒng)下裝Docker至D盤/其他盤最新方法(最準確,直接裝)

    這篇文章主要介紹了Windows系統(tǒng)下裝Docker至D盤/其他盤的相關(guān)資料,為了避免C盤空間不足的問題,通過修改安裝路徑,可以將Docker的數(shù)據(jù)存儲在D盤的特定文件夾中,從而有效地管理磁盤空間,需要的朋友可以參考下
    2025-04-04
  • Docker部署RocketMQ超詳細步驟(圖文并茂)

    Docker部署RocketMQ超詳細步驟(圖文并茂)

    RocketMQ?是一款開源的分布式消息隊列系統(tǒng),具有低延遲、高并發(fā)、高可用等特性,這篇文章主要介紹了Docker部署RocketMQ超詳細步驟的相關(guān)資料,通過這些步驟,用戶可以成功搭建一個RocketMQ集群,并通過控制臺進行管理和監(jiān)控,需要的朋友可以參考下
    2025-04-04
  • docker desktop實現(xiàn)一分鐘部署searxng

    docker desktop實現(xiàn)一分鐘部署searxng

    這篇文章主要介紹了docker desktop實現(xiàn)一分鐘部署searxng,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 清理Docker廢棄鏡像與緩存詳細圖文教程

    清理Docker廢棄鏡像與緩存詳細圖文教程

    在使用Docker進行開發(fā)和部署過程中,我們可能會遇到需要刪除舊鏡像和容器以釋放磁盤空間或清除不再需要的緩存的情況,這篇文章主要給大家介紹了關(guān)于清理Docker廢棄鏡像與緩存的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Docker安裝部署Neo4j的保姆級教程

    Docker安裝部署Neo4j的保姆級教程

    本文主要介紹了Docker安裝部署Neo4j的保姆級教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • docker搭建minio及java sdk使用過程詳解

    docker搭建minio及java sdk使用過程詳解

    MinIO 是一款高性能、分布式的對象存儲系統(tǒng). 它是一款軟件產(chǎn)品, 可以100%的運行在標準硬件,MinIO使用也非常受歡迎,很多朋友不知道m(xù)inio如何搭建及java sdk的使用,今天借這篇文章給大家詳細介紹下,需要的朋友參考下吧
    2021-09-09
  • 簡述Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關(guān)操作

    簡述Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關(guān)操作

    influxDB是一個分布式時間序列數(shù)據(jù)庫。這篇文章主要介紹了Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關(guān)操作,需要的朋友可以參考下
    2019-10-10
  • docker pull很慢如何解決

    docker pull很慢如何解決

    這篇文章主要介紹了docker pull很慢的解決方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • docker search 搜索鏡像的實現(xiàn)示例

    docker search 搜索鏡像的實現(xiàn)示例

    本文主要介紹了docker search搜索鏡像的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • 一文系統(tǒng)梳理Docker中容器的常用命令

    一文系統(tǒng)梳理Docker中容器的常用命令

    這篇文章主要為大家詳細介紹了Docker容器中的常用命令,包括啟動流程、容器運行原理及容器日志查看方法并詳細解析DockerD架構(gòu)與鏡像原理,希望對大家有所幫助
    2026-05-05

最新評論

鹿邑县| 吉林省| 彭泽县| 安平县| 江山市| 朔州市| 来宾市| 武冈市| 开阳县| 乐安县| 兴隆县| 孟州市| 连平县| 长阳| 寿光市| 镇江市| 南阳市| 荃湾区| 延川县| 柞水县| 堆龙德庆县| 河间市| 安龙县| 辽源市| 普宁市| 板桥市| 枣庄市| 吴堡县| 延川县| 黑龙江省| 堆龙德庆县| 龙南县| 甘泉县| 公安县| 兴和县| 兖州市| 宜丰县| 西和县| 南郑县| 三都| 溧阳市|