<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在使用第三方Docker插件?SpringBoot官方插件真香!

          共 31357字,需瀏覽 63分鐘

           ·

          2021-03-14 12:43

          為了方便為SpringBoot應(yīng)用構(gòu)建Docker鏡像,我們經(jīng)常會(huì)使用Maven插件來打包鏡像。之前一直使用的是第三方插件,有spotifyfabric8出品的兩種docker-maven-plugin。最近SpringBoot 2.4.0發(fā)布了,官方插件也增加了對(duì)Docker的支持,體驗(yàn)了一把發(fā)現(xiàn)也很好用,推薦給大家!

          第三方插件使用

          我們先了解下第三方插件的使用,方便和官方插件做對(duì)比,fabric8插件使用具體可以參考《還在手動(dòng)部署SpringBoot應(yīng)用?試試這個(gè)自動(dòng)化插件!》。

          • 值得注意的是,在我們使用插件時(shí),需要自己定義鏡像構(gòu)建過程,比如在pom.xml中使用如下配置,<images>標(biāo)簽下的配置為鏡像構(gòu)建過程的配置;
          <build>
              <plugins>
                  <plugin>
                      <groupId>io.fabric8</groupId>
                      <artifactId>docker-maven-plugin</artifactId>
                      <version>0.33.0</version>
                      <configuration>
                          <!-- Docker 遠(yuǎn)程管理地址-->
                          <dockerHost>http://192.168.3.101:2375</dockerHost>
                          <!-- Docker 推送鏡像倉(cāng)庫(kù)地址-->
                          <pushRegistry>http://192.168.3.101:5000</pushRegistry>
                          <images>
                              <image>
                                  <!--由于推送到私有鏡像倉(cāng)庫(kù),鏡像名需要添加倉(cāng)庫(kù)地址-->
                                  <name>192.168.3.101:5000/mall-tiny/${project.name}:${project.version}</name>
                                  <!--定義鏡像構(gòu)建行為-->
                                  <build>
                                      <!--定義基礎(chǔ)鏡像-->
                                      <from>java:8</from>
                                      <args>
                                          <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                                      </args>
                                      <!--定義哪些文件拷貝到容器中-->
                                      <assembly>
                                          <!--定義拷貝到容器的目錄-->
                                          <targetDir>/</targetDir>
                                          <!--只拷貝生成的jar包-->
                                          <descriptorRef>artifact</descriptorRef>
                                      </assembly>
                                      <!--定義容器啟動(dòng)命令-->
                                      <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                                      <!--定義維護(hù)者-->
                                      <maintainer>macrozheng</maintainer>
                                  </build>
                              </image>
                          </images>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
          • 或者先在Dockerfile文件中定義好鏡像構(gòu)建過程;
          # 該鏡像需要依賴的基礎(chǔ)鏡像
          FROM java:8
          # 將當(dāng)前maven目錄生成的文件復(fù)制到docker容器的/目錄下
          COPY maven /
          # 聲明服務(wù)運(yùn)行在8080端口
          EXPOSE 8080
          # 指定docker容器啟動(dòng)時(shí)運(yùn)行jar包
          ENTRYPOINT ["java""-jar","/mall-tiny-fabric-0.0.1-SNAPSHOT.jar"]
          # 指定維護(hù)者的名字
          MAINTAINER macrozheng
          • 然后在插件中引用Dockerfile文件,用于構(gòu)建鏡像;
          <build>
               <dockerFileDir>${project.basedir}</dockerFileDir>
          </build>
          • 其實(shí)對(duì)于SpringBoot應(yīng)用來說,如何從應(yīng)用Jar包構(gòu)建Docker鏡像,做法基本是差不多的,為什么非要自己定義鏡像的構(gòu)建過程呢?

          官方插件使用

          SpringBoot官方插件解決了上面的問題,無需自己編寫Docker鏡像構(gòu)建過程,直接自動(dòng)構(gòu)建,是不是很方便!接下來我們來體驗(yàn)下它的強(qiáng)大之處!

          [root@linux-local ~]# docker ps
          CONTAINER ID        IMAGE                                                                COMMAND                  CREATED             STATUS              PORTS                                            NAMES
          9ffec08467ac        joxit/docker-registry-ui:static                                      "/bin/sh -c entrypoi…"   2 hours ago         Up 2 hours          0.0.0.0:8280->80/tcp                             registry-ui
          a809535ee2a2        registry:2                                                           "/entrypoint.sh /etc…"   3 months ago        Up 7 hours          0.0.0.0:5000->5000/tcp                           registry2
          • 然后我們需要把應(yīng)用的版本升級(jí)到SpringBoot 2.4.0,之前的版本Docker支持沒有這個(gè)完善;
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.4.0</version>
              <relativePath/> <!-- lookup parent from repository -->
          </parent>
          • 然后修改pom.xml文件,對(duì)官方Maven插件進(jìn)行配置,主要是對(duì)Docker相關(guān)功能進(jìn)行配置;
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <configuration>
                  <image>
                      <!--配置鏡像名稱-->
                      <name>192.168.3.101:5000/mall-tiny/${project.name}:${project.version}</name>
                      <!--鏡像打包完成后自動(dòng)推送到鏡像倉(cāng)庫(kù)-->
                      <publish>true</publish>
                  </image>
                  <docker>
                      <!--Docker遠(yuǎn)程管理地址-->
                      <host>http://192.168.3.101:2375</host>
                      <!--不使用TLS訪問-->
                      <tlsVerify>false</tlsVerify>
                      <!--Docker推送鏡像倉(cāng)庫(kù)配置-->
                      <publishRegistry>
                          <!--推送鏡像倉(cāng)庫(kù)用戶名-->
                          <username>test</username>
                          <!--推送鏡像倉(cāng)庫(kù)密碼-->
                          <password>test</password>
                          <!--推送鏡像倉(cāng)庫(kù)地址-->
                          <url>http://192.168.3.101:5000</url>
                      </publishRegistry>
                  </docker>
              </configuration>
          </plugin>
          • 如果你使用的是IDEA的話,直接雙擊SpringBoot插件的build-image命令即可一鍵打包并推送到鏡像倉(cāng)庫(kù);
          • 也可以在命令行使用如下Maven命令來打包構(gòu)建鏡像;
          mvn spring-boot:build-image
          • 鏡像構(gòu)建過程中會(huì)輸出如下信息,由于很多依賴會(huì)從Github上下載,網(wǎng)絡(luò)不好的情況下會(huì)下載失敗,多試幾次就好:
          [INFO]  > Pulling builder image 'docker.io/paketobuildpacks/builder:base' 100%
          [INFO]  > Pulled builder image 'paketobuildpacks/builder@sha256:9d377230ba8ee74d8619178fd318b1b87a7da1a88bdb198afd14dd7de9e8ea6a'
          [INFO]  > Pulling run image 'docker.io/paketobuildpacks/run:base-cnb' 100%
          [INFO]  > Pulled run image 'paketobuildpacks/run@sha256:33d37fc9ba16e220f071805eaeed881a508ceee5c8909db5710aaed7e97e4fc2'
          [INFO]  > Executing lifecycle version v0.9.3
          [INFO]  > Using build cache volume 'pack-cache-5641f846df6.build'
          [INFO] 
          [INFO]  > Running creator
          [INFO]     [creator]     ===> DETECTING
          [INFO]     [creator]     5 of 18 buildpacks participating
          [INFO]     [creator]     paketo-buildpacks/ca-certificates   1.0.1
          [INFO]     [creator]     paketo-buildpacks/bellsoft-liberica 5.2.1
          [INFO]     [creator]     paketo-buildpacks/executable-jar    3.1.3
          [INFO]     [creator]     paketo-buildpacks/dist-zip          2.2.2
          [INFO]     [creator]     paketo-buildpacks/spring-boot       3.5.0
          [INFO]     [creator]     ===> ANALYZING
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/ca-certificates:helper" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:helper" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:java-security-properties" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jre" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jvmkill" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/executable-jar:class-path" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:helper" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from app image
          [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:web-application-type" from app image
          [INFO]     [creator]     ===> RESTORING
          [INFO]     [creator]     ===> BUILDING
          [INFO]     [creator]     
          [INFO]     [creator]     Paketo CA Certificates Buildpack 1.0.1
          [INFO]     [creator]       https://github.com/paketo-buildpacks/ca-certificates
          [INFO]     [creator]       Launch Helper: Reusing cached layer
          [INFO]     [creator]     
          [INFO]     [creator]     Paketo BellSoft Liberica Buildpack 5.2.1
          [INFO]     [creator]       https://github.com/paketo-buildpacks/bellsoft-liberica
          [INFO]     [creator]       Build Configuration:
          [INFO]     [creator]         $BP_JVM_VERSION              8.*             the Java version
          [INFO]     [creator]       Launch Configuration:
          [INFO]     [creator]         $BPL_JVM_HEAD_ROOM           0               the headroom in memory calculation
          [INFO]     [creator]         $BPL_JVM_LOADED_CLASS_COUNT  35% of classes  the number of loaded classes in memory calculation
          [INFO]     [creator]         $BPL_JVM_THREAD_COUNT        250             the number of threads in memory calculation
          [INFO]     [creator]         $JAVA_TOOL_OPTIONS                           the JVM launch flags
          [INFO]     [creator]       BellSoft Liberica JRE 8.0.275: Reusing cached layer
          [INFO]     [creator]       Launch Helper: Reusing cached layer
          [INFO]     [creator]       JVMKill Agent 1.16.0: Reusing cached layer
          [INFO]     [creator]       Java Security Properties: Reusing cached layer
          [INFO]     [creator]     
          [INFO]     [creator]     Paketo Executable JAR Buildpack 3.1.3
          [INFO]     [creator]       https://github.com/paketo-buildpacks/executable-jar
          [INFO]     [creator]       Process types:
          [INFO]     [creator]         executable-jar: java org.springframework.boot.loader.JarLauncher
          [INFO]     [creator]         task:           java org.springframework.boot.loader.JarLauncher
          [INFO]     [creator]         web:            java org.springframework.boot.loader.JarLauncher
          [INFO]     [creator]     
          [INFO]     [creator]     Paketo Spring Boot Buildpack 3.5.0
          [INFO]     [creator]       https://github.com/paketo-buildpacks/spring-boot
          [INFO]     [creator]       Creating slices from layers index
          [INFO]     [creator]         dependencies
          [INFO]     [creator]         spring-boot-loader
          [INFO]     [creator]         snapshot-dependencies
          [INFO]     [creator]         application
          [INFO]     [creator]       Launch Helper: Reusing cached layer
          [INFO]     [creator]       Web Application Type: Contributing to layer
          [INFO]     [creator]         Servlet web application detected
          [INFO]     [creator]         Writing env.launch/BPL_JVM_THREAD_COUNT.default
          [INFO]     [creator]       Spring Cloud Bindings 1.7.0: Reusing cached layer
          [INFO]     [creator]       4 application slices
          [INFO]     [creator]       Image labels:
          [INFO]     [creator]         org.opencontainers.image.title
          [INFO]     [creator]         org.opencontainers.image.version
          [INFO]     [creator]         org.springframework.boot.spring-configuration-metadata.json
          [INFO]     [creator]         org.springframework.boot.version
          [INFO]     [creator]     ===> EXPORTING
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/ca-certificates:helper'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:helper'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:jre'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:jvmkill'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/executable-jar:class-path'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:helper'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
          [INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:web-application-type'
          [INFO]     [creator]     Reusing 4/5 app layer(s)
          [INFO]     [creator]     Adding 1/5 app layer(s)
          [INFO]     [creator]     Reusing layer 'launcher'
          [INFO]     [creator]     Reusing layer 'config'
          [INFO]     [creator]     Reusing layer 'process-types'
          [INFO]     [creator]     Adding label 'io.buildpacks.lifecycle.metadata'
          [INFO]     [creator]     Adding label 'io.buildpacks.build.metadata'
          [INFO]     [creator]     Adding label 'io.buildpacks.project.metadata'
          [INFO]     [creator]     Adding label 'org.opencontainers.image.title'
          [INFO]     [creator]     Adding label 'org.opencontainers.image.version'
          [INFO]     [creator]     Adding label 'org.springframework.boot.spring-configuration-metadata.json'
          [INFO]     [creator]     Adding label 'org.springframework.boot.version'
          [INFO]     [creator]     Setting default process type 'web'
          [INFO]     [creator]     *** Images (d5e1771dac7b):
          [INFO]     [creator]           192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT
          [INFO] 
          [INFO] Successfully built image '192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT'
          [INFO] 
          [INFO]  > Pushed image '192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT'
          [INFO] ------------------------------------------------------------------------
          [INFO] BUILD SUCCESS
          [INFO] ------------------------------------------------------------------------
          [INFO] Total time: 01:06 min
          [INFO] Finished at: 2020-11-27T15:07:46+08:00
          [INFO] Final Memory: 37M/359M
          [INFO] ------------------------------------------------------------------------
          • 鏡像構(gòu)建成功后,可以從鏡像倉(cāng)庫(kù)查看到我們的鏡像:
          [root@linux-local ~]# docker images
          REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
          paketobuildpacks/run                                  base-cnb            a717358311fc        9 days ago          87.2MB
          java                                                  8                   d23bdf5b1b1b        3 years ago         643MB
          192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin   0.0.1-SNAPSHOT      d5e1771dac7b        40 years ago        244MB
          pack.local/builder/fewqajyqsc                         latest              f15fad05a5ba        40 years ago        558MB
          pack.local/builder/kirivtcqtu                         latest              f15fad05a5ba        40 years ago        558MB
          paketobuildpacks/builder                              base                511452064e06        40 years ago        558MB
          • 我們可以從Docker Registry UI中查看鏡像倉(cāng)庫(kù)中的鏡像,訪問地址:http://192.168.3.101:8280/
          • 接著使用如下命令啟動(dòng)我們的SpringBoot應(yīng)用:
          docker run -p 8080:8080 --name mall-tiny-docker-plugin \
          --link mysql:db \
          -v /etc/localtime:/etc/localtime \
          -v /mydata/app/mall-tiny-docker-plugin/logs:/var/logs \
          -d 192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT
          • 啟動(dòng)成功后,可以成功訪問到SpringBoot應(yīng)用的Swagger頁(yè)面,訪問地址:http://192.168.3.101:8080/swagger-ui.html

          總結(jié)

          SpringBoot官方Maven插件避免了編寫Docker鏡像構(gòu)建過程,同時(shí)充分利用了SpringBoot 2.3以后的Jar分層技術(shù),但對(duì)于需要自定義構(gòu)建鏡像的場(chǎng)景造成了一定的麻煩。

          參考資料

          官方文檔:https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/htmlsingle/#build-image

          項(xiàng)目源碼地址

          https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-docker-plugin


          --  end  --


          喜歡就三連




          關(guān)注 Stephen,一起學(xué)習(xí),一起成長(zhǎng)。


          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美一级片在线视频 | 中文字幕 欧美 日韩 | 免费播放一级A片 | 日韩V在线观看 | 自拍影音先锋 |