欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

普通打包

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

所以一定要在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>

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

FROM openjdk:8-jdk-alpine

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

完事之后運(yùn)行命令打成鏡像測(cè)試

docker build . -t test:0.0.1

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

docker inspect test:0.0.1

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

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

分層打包

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

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

首先在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

這里就分別對(duì)應(yīng)了上述那四個(gè)部分代碼,所以如果只更改部分代碼的話并不需要再將依賴相關(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
# 復(fù)制第三方依賴、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"]

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

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

相關(guān)文章

  • docker搭建nginx的實(shí)現(xiàn)步驟

    docker搭建nginx的實(shí)現(xiàn)步驟

    本文主要介紹了docker搭建nginx的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • docker啟動(dòng)rabbitmq以及使用方式詳解

    docker啟動(dòng)rabbitmq以及使用方式詳解

    RabbitMQ是一個(gè)由erlang開發(fā)的消息隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于docker啟動(dòng)rabbitmq以及使用的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • docker 多個(gè)-e參數(shù)的具體使用

    docker 多個(gè)-e參數(shù)的具體使用

    在使用Docker鏡像運(yùn)行容器時(shí),我們可以通過使用-e參數(shù)來設(shè)置環(huán)境變量,有時(shí)我們需要設(shè)置多個(gè)環(huán)境變量,這就涉及到如何實(shí)現(xiàn)多個(gè)-e參數(shù)的問題,本文就來詳細(xì)的介紹一下
    2024-01-01
  • 詳解Docker基于已有的鏡像制新的鏡像

    詳解Docker基于已有的鏡像制新的鏡像

    本篇文章主要介紹了Docker基于已有的鏡像制新的鏡像,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Docker v1.13 新功能介紹

    Docker v1.13 新功能介紹

    本篇文章主要介紹了Docker v1.13 新功能介紹,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Docker資源限制Cgroup的深入理解

    Docker資源限制Cgroup的深入理解

    _cgroups,是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他可以限制被namespace隔離起來的資源,本文主要介紹了Docker資源限制Cgroup的深入理解。具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-07-07
  • docker容器中登陸并操作postgresql的實(shí)現(xiàn)

    docker容器中登陸并操作postgresql的實(shí)現(xiàn)

    本文主要介紹了docker容器中登陸并操作postgresql的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Docker 實(shí)現(xiàn)容器端口綁定本地端口

    Docker 實(shí)現(xiàn)容器端口綁定本地端口

    這篇文章主要介紹了Docker 實(shí)現(xiàn)容器端口綁定本地端口的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker安裝Elasticsearch7.6集群并設(shè)置密碼

    docker安裝Elasticsearch7.6集群并設(shè)置密碼

    這篇文章主要介紹了docker安裝Elasticsearch7.6集群并設(shè)置密碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Docker Registry搭建私有鏡像倉(cāng)庫的實(shí)現(xiàn)方法

    Docker Registry搭建私有鏡像倉(cāng)庫的實(shí)現(xiàn)方法

    這篇文章主要介紹了Docker Registry搭建私有鏡像倉(cāng)庫的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評(píng)論