亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用SpringBoot 2.3.0.M1創建Docker映像的方法

發布時間:2020-07-23 16:02:21 來源:億速云 閱讀:340 作者:小豬 欄目:編程語言

這篇文章主要講解了用SpringBoot 2.3.0.M1創建Docker映像的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

1、發布

SpringBoot2.3.0.M1剛剛發布,它帶來了一些有趣的新特性,可以幫助您將SpringBoot應用程序打包到Docker映像中。在這篇博客文章中,我們將查看創建Docker映像的典型方式,并展示如何通過使用這些新特性來改進這些鏡像

2、說明

SpringBoot 2.3.0.M1 暫時不支持Windows, 很雞肋
暫時在Mac 和Linux 上運行良好

3、常見的Docker 運行方式

一般情況下,通過docker 運行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、常規方式通過docker 運行springboot 存在的問題
不是說常規方式不行,是他有一些可以改進的地方

1、在運行jar 的時候,沒把jar 給解壓縮,而是直接運行了,這會導致一些額外的開銷,所以呢,最好能以沒壓縮的形式去運行
2、因為需要老是改代碼,然后重新運行,上面那個代碼就不那么的好用。因為你一般不會去修改依賴或者進行依賴升級這些操作,就是改改代碼,適應業務變化,所以呢,最好能分個層,這樣構建速度就快起來了

5、如何解決常規方式的不足呢

spring 提供了兩項技術

1、buildpack
2、分層jar

如果您曾經使用過像CloudFoundry或Heroku這樣的應用程序平臺,那么你可能使用了一個buildpack,可能甚至沒有意識到它是BuildPack平臺的一部分,它將應用程序轉換為平臺實際可以運行的東西。例如,CloudFoundry的Javabuildpack會注意到您正在搞一個.jar文件并自動添加相關的JRE

最近呢,spring 擺脫了云本地構建包的一些束縛,讓不能獨立使用的這個東西呢,現在可以隨時隨地的構建與docker 兼容的docker 鏡像了。

6、到底怎么構建

Maven 方式

1、先下載一個包,然后解壓出來

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

2、然后呢構建鏡像就行,但是要確保本地已經安裝了docker 才行

./mvnw spring-boot:build-image

3、你會看到這么一些日志

[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 運行這個鏡像

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

7、分層

SpringBoot提供的內置支持為開始使用內置包提供了一種很好的方式。因為它是buildpack平臺規范的實現,所以很容易遷移到更強大的buildpack工具

最基本的springboot 的jar 文件內部格式

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

分成了三層,一個是引導加載文件,一個是class 運行文件,一個是依賴關系

但是分層結構的jar 呢,會是這樣的結構

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

他不再把lib 放到分開的獨立的層里面,而是放到一起去了,然后分了幾層。

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

最開始呢,分了這么些層,一共四個

1、dependencies(用于定期發布的依賴項)

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

3、resources(用于靜態資源)

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

這種分層是依據呢,是根據代碼可能的更改來分離代碼,一般呢,依賴項不太可能更改,因此他放在了獨立的層里面

8、寫分層形式的dockerfile

首先呢,需要在項目的POM 文件中增加一個支持

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

jarmode是一個特殊的系統屬性,您可以在啟動JAR時設置它。它允許引導代碼運行與應用程序完全不同的東西。例如,提取層的東西

這樣就可以運行layertools 模式

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

項目搞好了呢,就重新編譯打包

mvn clean package

打包好了呢,我們就測試一下

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

可以看到他輸出了幾個層

dependencies
snapshot-dependencies
resources
application

我們現在寫一個dockerfile 來提取并復制這幾個層來構建鏡像

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"]

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

然后我們開始構建

docker build . --tag demo

構建完了,我們就跑他一下

docker run -it -p8080:8080 demo:latest

看完上述內容,是不是對用SpringBoot 2.3.0.M1創建Docker映像的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

松潘县| 绥中县| 扶余县| 承德县| 洛川县| 亚东县| 长白| 镇坪县| 陇川县| 江津市| 太和县| 秦皇岛市| 泸州市| 明光市| 轮台县| 田阳县| 周口市| 青龙| 凤山县| 祁连县| 平度市| 岑巩县| 芦溪县| 郁南县| 托克托县| 当涂县| 桓台县| 稻城县| 裕民县| 连城县| 抚顺市| 高碑店市| 江西省| 阜城县| 土默特右旗| 崇州市| 绥宁县| 建德市| 托克逊县| 瓮安县| 长乐市|