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

詳解如何用SpringBoot 2.3.0.M1創(chuàng)建Docker映像

 更新時(shí)間:2020年05月18日 11:10:33   作者:簡(jiǎn)簡(jiǎn)單單OnlineZuozuo  
這篇文章主要介紹了詳解如何用SpringBoot 2.3.0.M1創(chuàng)建Docker映像,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1、發(fā)布

SpringBoot2.3.0.M1剛剛發(fā)布,它帶來(lái)了一些有趣的新特性,可以幫助您將SpringBoot應(yīng)用程序打包到Docker映像中。在這篇博客文章中,我們將查看創(chuàng)建Docker映像的典型方式,并展示如何通過(guò)使用這些新特性來(lái)改進(jìn)這些鏡像

2、說(shuō)明

SpringBoot 2.3.0.M1 暫時(shí)不支持Windows, 很雞肋
暫時(shí)在Mac 和Linux 上運(yùn)行良好

3、常見(jiàn)的Docker 運(yùn)行方式

一般情況下,通過(guò)docker 運(yùn)行springboot 是這樣的

FROM openjdk:8-jdk-alpine
EXPOSE 8080
ARG JAR_FILE=target/my-application.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

4、常規(guī)方式通過(guò)docker 運(yùn)行springboot 存在的問(wèn)題
不是說(shuō)常規(guī)方式不行,是他有一些可以改進(jìn)的地方

1、在運(yùn)行jar 的時(shí)候,沒(méi)把jar 給解壓縮,而是直接運(yùn)行了,這會(huì)導(dǎo)致一些額外的開(kāi)銷,所以呢,最好能以沒(méi)壓縮的形式去運(yùn)行
2、因?yàn)樾枰鲜歉拇a,然后重新運(yùn)行,上面那個(gè)代碼就不那么的好用。因?yàn)槟阋话悴粫?huì)去修改依賴或者進(jìn)行依賴升級(jí)這些操作,就是改改代碼,適應(yīng)業(yè)務(wù)變化,所以呢,最好能分個(gè)層,這樣構(gòu)建速度就快起來(lái)了

5、如何解決常規(guī)方式的不足呢

spring 提供了兩項(xiàng)技術(shù)

1、buildpack
2、分層jar

如果您曾經(jīng)使用過(guò)像CloudFoundry或Heroku這樣的應(yīng)用程序平臺(tái),那么你可能使用了一個(gè)buildpack,可能甚至沒(méi)有意識(shí)到它是BuildPack平臺(tái)的一部分,它將應(yīng)用程序轉(zhuǎn)換為平臺(tái)實(shí)際可以運(yùn)行的東西。例如,CloudFoundry的Javabuildpack會(huì)注意到您正在搞一個(gè).jar文件并自動(dòng)添加相關(guān)的JRE

最近呢,spring 擺脫了云本地構(gòu)建包的一些束縛,讓不能獨(dú)立使用的這個(gè)東西呢,現(xiàn)在可以隨時(shí)隨地的構(gòu)建與docker 兼容的docker 鏡像了。

6、到底怎么構(gòu)建

Maven 方式

1、先下載一個(gè)包,然后解壓出來(lái)

$ curl https://start.spring.io/starter.zip -d bootVersion=2.3.0.M1 -d dependencies=web -o demo.zip
$ unzip demo.zip

2、然后呢構(gòu)建鏡像就行,但是要確保本地已經(jīng)安裝了docker 才行

./mvnw spring-boot:build-image

3、你會(huì)看到這么一些日志

[INFO] Building image 'docker.io/library/demo:0.0.1-SNAPSHOT'
[INFO]
[INFO] > Pulling builder image 'docker.io/cloudfoundry/cnb:0.0.43-bionic' 100%
[INFO] > Pulled builder image 'cloudfoundry/cnb@sha256:c983fb9602a7fb95b07d35ef432c04ad61ae8458263e7fb4ce62ca10de367c3b'
[INFO] > Pulling run image 'docker.io/cloudfoundry/run:base-cnb' 100%
[INFO] > Pulled run image 'cloudfoundry/run@sha256:ba9998ae4bb32ab43a7966c537aa1be153092ab0c7536eeef63bcd6336cbd0db'
[INFO] > Executing lifecycle version v0.5.0
[INFO] > Using build cache volume 'pack-cache-5cbe5692dbc4.build'
[INFO]
[INFO] > Running detector
[INFO]   [detector]  6 of 13 buildpacks participating
...
[INFO]
[INFO] > Running restorer
[INFO]   [restorer]  Restoring cached layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b'
...
[INFO]
[INFO] > Running cacher
[INFO]   [cacher]   Reusing layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b'
[INFO]   [cacher]   Reusing layer 'org.cloudfoundry.jvmapplication:executable-jar'
[INFO]   [cacher]   Caching layer 'org.cloudfoundry.springboot:spring-boot'
[INFO]   [cacher]   Reusing layer 'org.cloudfoundry.springautoreconfiguration:46ab131165317d91fd4ad3186abf755222744e2d277dc413def06f3ad45ab150'
[INFO]
[INFO] Successfully built image 'docker.io/library/demo:0.0.1-SNAPSHOT'

4、用docker 運(yùn)行這個(gè)鏡像

docker run -it -p8080:8080 demo:0.0.1-SNAPSHOT

7、分層

SpringBoot提供的內(nèi)置支持為開(kāi)始使用內(nèi)置包提供了一種很好的方式。因?yàn)樗莃uildpack平臺(tái)規(guī)范的實(shí)現(xiàn),所以很容易遷移到更強(qiáng)大的buildpack工具

最基本的springboot 的jar 文件內(nèi)部格式

META-INF/
 MANIFEST.MF
org/
 springframework/
  boot/
   loader/
    ...
BOOT-INF/
 classes/
  ...
 lib/
  ...

分成了三層,一個(gè)是引導(dǎo)加載文件,一個(gè)是class 運(yùn)行文件,一個(gè)是依賴關(guān)系

但是分層結(jié)構(gòu)的jar 呢,會(huì)是這樣的結(jié)構(gòu)

META-INF/
 MANIFEST.MF
org/
 springframework/
  boot/
   loader/
    ...
BOOT-INF/
 layers/
  <name>/
   classes/
    ...
   lib/
    ...
  <name>/
   classes/
    ...
   lib/
    ...
 layers.idx

他不再把lib 放到分開(kāi)的獨(dú)立的層里面,而是放到一起去了,然后分了幾層。

并且多了一個(gè) idx 文件,這個(gè)文件里面是添加層的順序

最開(kāi)始呢,分了這么些層,一共四個(gè)

1、dependencies(用于定期發(fā)布的依賴項(xiàng))

2、snapshot-dependencies(用于快照依賴項(xiàng))

3、resources(用于靜態(tài)資源)

4、application(適用于應(yīng)用程序類和資源)

這種分層是依據(jù)呢,是根據(jù)代碼可能的更改來(lái)分離代碼,一般呢,依賴項(xiàng)不太可能更改,因此他放在了獨(dú)立的層里面

8、寫分層形式的dockerfile

首先呢,需要在項(xiàng)目的POM 文件中增加一個(gè)支持

<build>
 <plugins>
 <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
  <layout>LAYERED_JAR</layout>
  </configuration>
 </plugin>
 </plugins>
</build>

jarmode是一個(gè)特殊的系統(tǒng)屬性,您可以在啟動(dòng)JAR時(shí)設(shè)置它。它允許引導(dǎo)代碼運(yùn)行與應(yīng)用程序完全不同的東西。例如,提取層的東西

這樣就可以運(yùn)行l(wèi)ayertools 模式

java -Djarmode=layertools -jar my-app.jar

項(xiàng)目搞好了呢,就重新編譯打包

mvn clean package

打包好了呢,我們就測(cè)試一下

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

可以看到他輸出了幾個(gè)層

dependencies
snapshot-dependencies
resources
application

我們現(xiàn)在寫一個(gè)dockerfile 來(lái)提取并復(fù)制這幾個(gè)層來(lái)構(gòu)建鏡像

FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM adoptopenjdk:11-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/resources/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

這是一個(gè)多階段的docker 文件,他builder 提取了需要的文件,就是前面我們拆掉的四個(gè)層。全給他弄進(jìn)去

然后我們開(kāi)始構(gòu)建

docker build . --tag demo

構(gòu)建完了,我們就跑他一下

docker run -it -p8080:8080 demo:latest

到此這篇關(guān)于詳解如何用SpringBoot 2.3.0.M1創(chuàng)建Docker映像的文章就介紹到這了,更多相關(guān)SpringBoot 2.3.0.M1創(chuàng)建Docker映像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題

    解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • java基于odbc連接oracle的實(shí)現(xiàn)方法

    java基于odbc連接oracle的實(shí)現(xiàn)方法

    這篇文章主要介紹了java基于odbc連接oracle的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了連接操作的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-09-09
  • 通過(guò)java生成讀取二維碼詳解

    通過(guò)java生成讀取二維碼詳解

    這篇文章主要介紹了java二維碼生成讀取詳解,二維碼再生活在無(wú)處不在,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面和小編一起來(lái)學(xué)習(xí)一下吧
    2019-05-05
  • BaseMapper接口的使用方法

    BaseMapper接口的使用方法

    這篇文章主要介紹了BaseMapper接口的使用方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • Java:泛型知識(shí)知多少

    Java:泛型知識(shí)知多少

    這篇文章主要介紹了java泛型基礎(chǔ)知識(shí)及通用方法,從以下幾個(gè)方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2021-08-08
  • Spring加載properties文件的方法

    Spring加載properties文件的方法

    這篇文章主要為大家詳細(xì)介紹了Spring加載properties文件的兩種方法,一是通過(guò)xml方式,另一種方式是通過(guò)注解方式,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 淺談Spring中如何使用設(shè)計(jì)模式

    淺談Spring中如何使用設(shè)計(jì)模式

    這篇文章主要介紹了淺談Spring中如何使用設(shè)計(jì)模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Spring?Boot?啟動(dòng)參數(shù)之如何優(yōu)雅地控制你的應(yīng)用(最新推薦)

    Spring?Boot?啟動(dòng)參數(shù)之如何優(yōu)雅地控制你的應(yīng)用(最新推薦)

    Spring Boot 提供了哪些方式來(lái)配置這些啟動(dòng)參數(shù),今天我們就來(lái)詳細(xì)解析 Spring Boot 啟動(dòng)參數(shù)的各種用法,并附帶代碼示例,讓你可以靈活掌控應(yīng)用的啟動(dòng)過(guò)程,需要的朋友可以參考下
    2025-04-04
  • idea指定啟動(dòng)參數(shù)、環(huán)境變量的過(guò)程

    idea指定啟動(dòng)參數(shù)、環(huán)境變量的過(guò)程

    這篇文章主要介紹了idea指定啟動(dòng)參數(shù)、環(huán)境變量的操作過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java中jdk1.8和jdk17相互切換實(shí)戰(zhàn)步驟

    Java中jdk1.8和jdk17相互切換實(shí)戰(zhàn)步驟

    之前做Java項(xiàng)目時(shí)一直用的是jdk1.8,現(xiàn)在想下載另一個(gè)jdk版本17,并且在之后的使用中可以進(jìn)行相互切換,下面這篇文章主要給大家介紹了關(guān)于Java中jdk1.8和jdk17相互切換的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

天全县| 民勤县| 阳山县| 邳州市| 兴业县| 浦县| 车致| 青龙| 黑河市| 高要市| 广元市| 镇康县| 仁怀市| 宽城| 孝义市| 尼玛县| 乐山市| 南召县| 资兴市| 永川市| 永顺县| 偏关县| 宜君县| 剑河县| 仙居县| 景谷| 咸丰县| 嵊泗县| 霍城县| 临武县| 晋中市| 甘南县| 阳高县| 延寿县| 都江堰市| 肥城市| 关岭| 壤塘县| 石柱| 乐安县| 武平县|