精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Spring Boot創建docker image

開發 前端
今天我們來體驗一下Spring Boot 2.3.3 帶來的快速創建docker image的功能。

 簡介
在很久很久以前,我們是怎么創建Spring Boot的docker image呢?最最通用的辦法就是將Spring boot的應用程序打包成一個fat jar,然后寫一個docker file,將這個fat jar制作成為一個docker image然后運行。

今天我們來體驗一下Spring Boot 2.3.3 帶來的快速創建docker image的功能。

傳統做法和它的缺點
現在我們創建一個非常簡單的Spring Boot程序:

  1. @SpringBootApplication 
  2. @RestController 
  3. public class Application { 
  4.  
  5.     public static void main(String[] args) { 
  6.         SpringApplication.run(Application.class, args); 
  7.     } 
  8.  
  9.     @GetMapping("/getInfo"
  10.     public String getInfo() { 
  11.         return "www.flydean.com"
  12.     } 
  13. 復制代碼 

默認情況下,我們build出來的是一個fat jar:springboot-with-docker-0.0.1-SNAPSHOT.jar

我們解壓看一下它的內容:

Spring boot的fat jar分為三個部分,第一部分就是BOOT-INF, 里面的class目錄放的是我們自己編寫的class文件。而lib目錄存放的是項目依賴的其他jar包。

第二部分是META-INF,里面定義了jar包的屬性信息。

第三部分是Spring Boot的類加載器,fat jar包的啟動是通過Spring Boot的jarLauncher來創建LaunchedURLClassLoader,通過它來加載lib下面的jar包,最后以一個新線程啟動應用的Main函數。

這里不多講Spring Boot的啟動。

我們看一下,如果想要用這個fat jar來創建docker image應該怎么寫:

  1. FROM openjdk:8-jdk-alpine 
  2. EXPOSE 8080 
  3. ARG JAR_FILE=target/springboot-with-docker-0.0.1-SNAPSHOT.jar 
  4. ADD ${JAR_FILE} app.jar 
  5. ENTRYPOINT ["java","-jar","/app.jar"
  6. 復制代碼 

這樣寫有兩個問題。

第一個問題:我們是用的far jar,在使用far jar的過程中會有一定的性能問題,肯定要比解壓過后的性能要低,尤其是在容器環境中運行的情況下,可能會更加突出。

第二個問題:我們知道docker的image是按layer來構建的,按layer構建的好處就是可以減少image構建的時間和重用之前的layer。

但是如果使用的是fat jar包,即使我們只修改了我們自己的代碼,也會導致整個fat jar重新更新,從而影響docker image的構建速度。

使用Buildpacks
傳統的辦法除了有上面的兩個問題,還有一個就是需要自己構建docker file,有沒有一鍵構建docker image的方法呢?

答案是肯定的。

Spring Boot在2.3.0之后,引入了Cloud Native 的buildpacks,通過這個工具,我們可以非常非常方便的創建docker image。

在Maven和Gradle中,Spring Boot引入了新的phase: spring-boot:build-image

我們可以直接運行:

  1. mvn  spring-boot:build-image 
  2. 制代碼 

運行之,很不幸的是,你可能會遇到下面的錯誤:

  1. [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.3.RELEASE:build-image (default-cli) on project springboot-with-docker: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:2.3.3.RELEASE:build-image failed: Docker API call to 'localhost/v1.24/images/create?fromImage=gcr.io%2Fpaketo-buildpacks%2Fbuilder%3Abase-platform-api-0.3' failed with status code 500 "Internal Server Error" and message "Get https://gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)" -> [Help 1] 
  2. 復制代碼 

這是因為我們無法從gcr.io中拉取鏡像!

沒關系,如果你會正確的上網方式的話,那么我估計你已經找到了一個代理。

將你的代理配置到Docker的代理項里面,我使用的是Docker desktop,下面是我的配置:

重新運行 mvn spring-boot:build-image

等待執行結果:

  1. [INFO] --- spring-boot-maven-plugin:2.3.3.RELEASE:build-image (default-cli) @ springboot-with-docker --- 
  2. [INFO] Building image 'docker.io/library/springboot-with-docker:0.0.1-SNAPSHOT' 
  3. [INFO]  
  4. [INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0% 
  5. [INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0% 
  6. [INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0% 
  7. [INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0% 
  8. [INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0% 
  9. [INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base-platform-api-0.3' 0% 
  10. 復制代碼 

你可以看到,我們的確是需要從gcr.io拉取image。

Layered Jars
如果你不想使用Cloud Native Buildpacks,還是想使用傳統的Dockerfile。 沒關系,SpringBoot為我們提供了獨特的分層jar包系統。

怎么開啟呢? 我們需要在POM文件中加上下面的配置:

  1. <build> 
  2.        <plugins> 
  3.            <plugin> 
  4.                <groupId>org.springframework.boot</groupId> 
  5.                <artifactId>spring-boot-maven-plugin</artifactId> 
  6.                <configuration> 
  7.                    <layers> 
  8.                        <enabled>true</enabled> 
  9.                    </layers> 
  10.                </configuration> 
  11.            </plugin> 
  12.        </plugins> 
  13.    </build> 
  14. 制代碼 

再次打包,看下jar包的內容:

看起來和之前的jar包沒什么不同,只不過多了一個layers.idx 這個index文件:

  1. "dependencies"
  2.   - "BOOT-INF/lib/" 
  3. "spring-boot-loader"
  4.   - "org/" 
  5. "snapshot-dependencies"
  6. "application"
  7.   - "BOOT-INF/classes/" 
  8.   - "BOOT-INF/classpath.idx" 
  9.   - "BOOT-INF/layers.idx" 
  10.   - "META-INF/" 
  11. 復制代碼 

index文件主要分為4個部分:

  • dependencies - 非SNAPSHOT的依賴jar包
  • snapshot-dependencies - SNAPSHOT的依賴jar包
  • spring-boot-loader - Spring boot的class loader文件
  • application - 應用程序的class和resources文件

注意,這里的index文件是有順序的,它和我們將要添加到docker image中的layer順序是一致的。

最少變化的將會最先添加到layer中,變動最大的放在最后面的layer。

我們可以使用layertools jarmode來對生成的fat jar進行校驗或者解壓縮:

  1. java -Djarmode=layertools -jar springboot-with-docker-0.0.1-SNAPSHOT.jar  
  2. Usage: 
  3.   java -Djarmode=layertools -jar springboot-with-docker-0.0.1-SNAPSHOT.jar 
  4.  
  5. Available commands: 
  6.   list     List layers from the jar that can be extracted 
  7.   extract  Extracts layers from the jar for image creation 
  8.   help     Help about any command 
  9. 復制代碼 

使用list命令,我們可列出jar包中的layer信息。使用extract我們可以解壓出不同的layer。

我們執行下extract命令,看下結果:

可以看到,我們根據layers.idx解壓出了不同的文件夾。

我們看一下使用layer的dockerFile應該怎么寫:

  1. FROM adoptopenjdk:11-jre-hotspot as builder 
  2. WORKDIR application 
  3. ARG JAR_FILE=target/*.jar 
  4. COPY ${JAR_FILE} application.jar 
  5. RUN java -Djarmode=layertools -jar application.jar extract 
  6.  
  7. FROM adoptopenjdk:11-jre-hotspot 
  8. WORKDIR application 
  9. COPY --from=builder application/dependencies/ ./ 
  10. COPY --from=builder application/spring-boot-loader/ ./ 
  11. COPY --from=builder application/snapshot-dependencies/ ./ 
  12. COPY --from=builder application/application/ ./ 
  13. ENTRYPOINT ["java""org.springframework.boot.loader.JarLauncher"
  14. 復制代碼 

這樣我們的一個分層的DockerImage就創建完成了。

自定義Layer
如果我們需要自定義Layer該怎么做呢?

我們可以創建一個獨立的layers.xml文件:

  1. <layers xmlns="http://www.springframework.org/schema/boot/layers" 
  2.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.         xsi:schemaLocation="http://www.springframework.org/schema/boot/layers 
  4.               https://www.springframework.org/schema/boot/layers/layers-2.3.xsd"> 
  5.     <application> 
  6.         <into layer="spring-boot-loader"
  7.             <include>org/springframework/boot/loader/**</include> 
  8.         </into
  9.         <into layer="application" /> 
  10.     </application> 
  11.     <dependencies> 
  12.         <into layer="snapshot-dependencies"
  13.             <include>*:*:*SNAPSHOT</include> 
  14.         </into
  15.         <into layer="company-dependencies"
  16.             <include>com.flydean:*</include> 
  17.         </into
  18.         <into layer="dependencies"/> 
  19.     </dependencies> 
  20.     <layerOrder> 
  21.         <layer>dependencies</layer> 
  22.         <layer>spring-boot-loader</layer> 
  23.         <layer>snapshot-dependencies</layer> 
  24.         <layer>company-dependencies</layer> 
  25.         <layer>application</layer> 
  26.     </layerOrder> 
  27. </layers> 
  28. 復制代碼 

怎么使用這個layer.xml呢?

添加到build plugin中就可以了:

  1. <build> 
  2.        <plugins> 
  3.            <plugin> 
  4.                <groupId>org.springframework.boot</groupId> 
  5.                <artifactId>spring-boot-maven-plugin</artifactId> 
  6.                <configuration> 
  7.                    <layers> 
  8.                        <enabled>true</enabled> 
  9.                        <configuration>${project.basedir}/src/main/resources/layers.xml</configuration> 
  10.                    </layers> 
  11.                </configuration> 
  12.            </plugin> 
  13.        </plugins> 
  14.    </build> 

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-05-11 12:40:00

Spring控制器HTTP

2022-10-10 08:00:00

微服務Spring Boo容器

2023-10-25 18:08:13

應用容器化Docker

2024-01-18 07:53:37

2013-01-14 11:33:00

IBMdW

2024-02-22 18:12:18

微服務架構設計模式

2023-12-02 18:32:32

SpringDocker鏡像

2022-06-28 15:04:32

容器Docker

2022-06-28 15:06:35

容器Spring

2023-10-06 23:40:49

Spring開發

2021-03-01 23:26:41

日志Spring BootAOP

2024-08-14 17:02:22

Docker容器

2021-11-04 09:00:00

JavaSpring BootURL

2021-05-07 07:03:33

Spring打包工具

2020-11-12 07:51:05

DockerSpring Boot應用

2017-03-23 09:29:06

2024-04-18 09:34:28

Reactor項目異步編程

2022-02-09 20:39:52

Actuator應用監控

2021-09-15 16:20:02

Spring BootFilterJava

2023-02-27 08:09:42

SpringAOP代理
點贊
收藏

51CTO技術棧公眾號

国产精品久久久乱弄| 亚洲高清黄色| 成人精品国产一区二区4080| 91av国产在线| 国产精品久久免费观看| 精品国产18久久久久久二百| 亚洲午夜免费电影| 日本精品一区二区| 国产激情视频在线播放| 久久高清一区| 色中色综合影院手机版在线观看| a视频免费观看| 国产精品久久久久久久久久辛辛| 精品福利一区二区| 中文字幕精品—区二区日日骚| 国产 日韩 欧美 精品| 免费av成人在线| 91国产在线精品| 潘金莲一级黄色片| 久久最新网址| 精品国产髙清在线看国产毛片| 蜜臀av午夜一区二区三区| 中文字幕免费高清电视剧网站在线观看| 99久久精品国产观看| 国产一区二区色| 狠狠人妻久久久久久综合| 欧美午夜不卡影院在线观看完整版免费 | 欧美激情一区二区三区在线视频 | 国产激情91久久精品导航| 日韩av黄色在线观看| 久久综合亚洲色hezyo国产| 日韩免费av| 亚洲欧洲av一区二区| 97人妻精品一区二区三区免费 | 春色成人在线视频| 亚洲怡红院av| 日本亚洲一区二区| 欧美影院久久久| 国产精彩视频在线| 欧美欧美全黄| 粗暴蹂躏中文一区二区三区| 无码人中文字幕| 国产精品美女久久久久久不卡 | 麻豆网站在线免费观看| 国产亚洲精品福利| 日本在线播放不卡| 久久电影中文字幕| 久久看人人爽人人| 鲁丝片一区二区三区| 亚洲日本中文字幕在线| av在线播放不卡| 国产精品我不卡| 亚洲精品久久久久久久久久 | av电影网站在线观看| 色狼人综合干| 亚洲精品自产拍| 成人性生交大免费看| 免费看av成人| 在线播放国产精品| 97在线观看免费视频| 欧美欧美黄在线二区| 亚洲一二三在线| 性爱在线免费视频| 久久综合国产| 欧美人成在线视频| 国产一级片久久| 亚洲久久一区| 日本aⅴ大伊香蕉精品视频| 精品人妻无码一区二区性色| 肉肉av福利一精品导航| 国产精品美女久久| 国产麻豆91视频| 国产xxx精品视频大全| 国产亚洲精品美女久久久m| 天天躁日日躁狠狠躁伊人| 久久综合色天天久久综合图片| 欧洲精品亚洲精品| 免费黄色网页在线观看| 亚洲一区二区视频在线| 国产肥臀一区二区福利视频| 午夜欧美巨大性欧美巨大| 欧美日韩和欧美的一区二区| 久久出品必属精品| 麻豆一区一区三区四区| 亚洲一品av免费观看| 国产女片a归国片aa| 99精品国产福利在线观看免费| 日本成人黄色片| 一级片免费网站| 成人成人成人在线视频| 日韩视频在线观看国产| 亚洲欧美成人影院| 日韩欧美在线观看| 国产一级片中文字幕| 亚洲成人一品| 久久伊人色综合| 国产成人在线视频观看| 久久电影国产免费久久电影 | 第一区免费在线观看| www.久久东京| 中文字幕亚洲欧美在线| 国产午夜精品无码| 精品一二三四区| 久久波多野结衣| 国产黄色小视频在线| 日韩欧美aaa| 国产黄色一区二区三区| 欧美午夜精品一区二区三区电影| 欧美国产在线视频| 中文字幕视频一区二区| 99这里都是精品| 公共露出暴露狂另类av| 在线一区av| 欧美va亚洲va| 女人18毛片毛片毛片毛片区二 | 伊人av在线播放| 经典一区二区| 69**夜色精品国产69乱| 国产免费久久久| 国产精品午夜久久| 久在线观看视频| 在这里有精品| 久久久精品国产亚洲| 午夜精品免费观看| 91女厕偷拍女厕偷拍高清| 久久国产精品免费观看| 免费在线观看一区| 亚洲欧美国产精品| 亚洲欧美在线视频免费| 懂色av中文一区二区三区| 超碰在线免费观看97| 97精品国产99久久久久久免费| 亚洲国产精品电影在线观看| 毛片a片免费观看| 国产一区二区不卡在线| 在线不卡日本| 亚洲精品一区av| 色妞在线综合亚洲欧美| 国产99久久久久久免费看| 久久综合九色综合欧美98| 全黄性性激高免费视频| www.亚洲一二| 久久久久久亚洲精品中文字幕| 国产浮力第一页| 伊人性伊人情综合网| 两女双腿交缠激烈磨豆腐| 性xxxx欧美老肥妇牲乱| 国产主播喷水一区二区| 成人福利在线观看视频| 这里只有精品视频在线观看| 三级黄色在线观看| 韩日av一区二区| 国内自拍中文字幕| 99国产精品免费网站| 久久久久久久电影一区| 天天干天天色天天| 色综合久久综合网| 久久午夜精品视频| 九色综合国产一区二区三区| 青春草在线视频免费观看| 日韩高清二区| 久久久久久久久久av| 天天操天天干天天爱| 欧美色另类天堂2015| 日本少妇高潮喷水xxxxxxx| 免费在线成人网| 尤物一区二区三区| 国产成人精品福利| 欧美亚洲激情在线| www黄在线观看| 51久久夜色精品国产麻豆| 九九热精彩视频| 91在线观看高清| 我要看一级黄色大片| 亚洲国产成人精品女人| 不卡视频一区二区三区| 竹内纱里奈兽皇系列在线观看| 亚洲欧美综合区自拍另类| 国产一区二区麻豆| 亚洲韩国一区二区三区| 女~淫辱の触手3d动漫| 久久国产乱子精品免费女| 国产专区在线视频| 日韩在线黄色| 成人黄色av播放免费| www成人免费观看| 有码中文亚洲精品| 亚洲精品18p| 日本韩国精品一区二区在线观看| 国产探花在线视频| 91网站在线观看视频| 欧美一级xxxx| 亚洲一区国产一区| 秋霞在线一区二区| 欧美**字幕| 99re视频在线| 免费在线观看一区| 91a在线视频| 国产黄色在线免费观看| 亚洲新声在线观看| 日韩永久免费视频| 51精品国自产在线| 波多野结衣一区二区三区在线 | 中文字幕乱码人妻二区三区| 一二三四区精品视频| 五月天精品视频| 国产成人亚洲综合a∨婷婷图片| 人妻熟女一二三区夜夜爱| 欧美a级片一区| 日韩激情视频| 亚洲区小说区| 99超碰麻豆| 亚洲精品成a人ⅴ香蕉片| 国产69久久精品成人| 污片视频在线免费观看| 丝袜亚洲另类欧美重口| 精华区一区二区三区| 亚洲成年人在线播放| 国产欧美日韩成人| 欧美在线你懂得| 国产成人在线视频观看| 亚洲国产日韩a在线播放性色| 日韩av手机在线免费观看| 国产欧美一区二区在线| 精品无码在线视频| aaa欧美色吧激情视频| 麻豆tv在线观看| 国产成人精品免费一区二区| 一级黄色片国产| 美女一区二区三区| 日本www.色| 久久午夜激情| 成年人黄色片视频| 久热re这里精品视频在线6| 欧美 丝袜 自拍 制服 另类| 精品成人在线| 日韩伦理在线免费观看| 在线播放亚洲| 精品人妻少妇一区二区| 在线观看的日韩av| 青青草国产免费| 亚洲国产激情| 亚洲熟妇无码一区二区三区导航| 国产精品av一区二区| 大胆欧美熟妇xx| 好吊视频一区二区三区四区| 欧美乱做爰xxxⅹ久久久| 欧美午夜电影在线观看| 欧美一级片免费播放| 日韩一级大片| 黄色一级一级片| 蜜桃精品在线观看| 国产女同无遮挡互慰高潮91| 国产曰批免费观看久久久| 久久无码人妻一区二区三区| 国产不卡免费视频| 波多野结衣影院| 久久人人97超碰com| 亚洲日本精品视频| 亚洲欧洲一区二区在线播放| 国产午夜手机精彩视频| 亚洲精品高清在线观看| 国产网站在线看| 欧美日韩在线影院| а中文在线天堂| 欧美丰满一区二区免费视频| 国产成人精品av在线观| 亚洲第一偷拍网| 久久久资源网| 久久婷婷国产麻豆91天堂| 日本一级理论片在线大全| 98精品在线视频| 91福利精品在线观看| 亚洲一区中文字幕| 欧美绝顶高潮抽搐喷水合集| 日本精品一区二区三区视频| 亚洲精品tv久久久久久久久久| 国产又粗又猛又爽又黄的网站| 亚洲综合国产| 在线观看岛国av| 99国产精品国产精品毛片| 9.1片黄在线观看| 一区二区三区成人在线视频| 国产精品va无码一区二区三区| 欧美日韩不卡在线| 涩涩视频免费看| 日韩在线免费高清视频| 91av久久| 成人黄色免费片| 亚洲ab电影| 国产 国语对白 露脸| 久久久久中文| 日韩大尺度视频| 国产精品素人视频| 国产精品theporn动漫| 欧美日韩一区高清| 日韩中文字幕观看| 色噜噜久久综合伊人一本| 免费毛片b在线观看| 国产日韩欧美日韩大片| 日韩av系列| 黄色成人在线免费观看| 奇米色777欧美一区二区| av电影在线播放| 中文字幕一区二区三区不卡| 999这里只有精品| 日韩一区二区三区观看| www日韩tube| 欧美一区第一页| 国产精品乱战久久久| 中文字幕日韩一区二区三区| 久久激情一区| 日韩少妇一区二区| 亚洲美女淫视频| 中文字幕理论片| 亚洲色图在线观看| 欧美13videosex性极品| 91在线短视频| 国产国产精品| 三上悠亚在线一区| 久久久影视传媒| 国产成人无码一区二区三区在线| 91精品国产综合久久精品麻豆| 成人精品一区二区三区免费| 2019中文在线观看| 韩国女主播一区二区三区| www国产无套内射com| 精品亚洲国产成人av制服丝袜| 亚洲黄色免费视频| 欧美午夜片欧美片在线观看| 色哟哟中文字幕| 欧美激情视频一区| 日韩激情综合| 日韩精品久久一区二区| 国产一区二区三区蝌蚪| 国产大片免费看| 制服丝袜亚洲色图| 成人日韩欧美| 亚洲最大成人免费视频| 综合视频在线| 国产老头和老头xxxx×| 《视频一区视频二区| 91午夜交换视频| 精品国产一区二区三区久久久| 久久久精品一区二区毛片免费看| 日日骚一区二区网站| 麻豆精品在线视频| 后入内射无码人妻一区| 欧美日韩视频在线一区二区| 亚洲成人三级| 成人精品一区二区三区电影免费| 亚洲天堂免费| 日本美女久久久| 亚洲444eee在线观看| 欧洲av在线播放| 日产日韩在线亚洲欧美| 国模精品一区| 色91精品久久久久久久久| 亚洲视频免费在线观看| 精品国产乱码久久久久久蜜臀网站| 免费97视频在线精品国自产拍| 一区二区三区欧洲区| 国产综合中文字幕| 久久久亚洲综合| 一区二区久久精品66国产精品| 久久久精品在线观看| 99久久免费精品国产72精品九九| 日韩av高清在线看片| 国产色综合一区| 国产一区二区三区三州| 欧美放荡办公室videos4k| 欧美自拍视频| 日本熟妇人妻中出| 日韩美女久久久| 人妻一区二区三区免费| 国产精品久久久久不卡| 欧美二区不卡| 六月婷婷七月丁香| 欧美精品99久久久**| 爱福利在线视频| 特级西西444www大精品视频| 国模大尺度一区二区三区| 久久夜色精品亚洲| 日韩中文字幕在线观看| 国产suv精品一区二区四区视频| 欧洲黄色一级视频| 最新成人av在线| 性插视频在线观看| 成人国产精品色哟哟| 日韩一区二区免费看| 国产精品1区2区3区4区| 日韩成人在线网站| 亚洲欧美在线人成swag| 六月丁香婷婷在线| 亚洲精品视频免费看| 免费在线国产| 97人人澡人人爽| 日本不卡免费在线视频| 日产精品久久久久| 久久综合久久美利坚合众国|