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

          「Spring Boot 新特性」一鍵構(gòu)建Docker鏡像

          共 2994字,需瀏覽 6分鐘

           ·

          2020-11-17 09:22

          背景

          在我們開發(fā)過(guò)程中為了支持 Docker 容器化,一般使用 Maven 編譯打包然后生成鏡像,能夠大大提供上線效率,同時(shí)能夠快速動(dòng)態(tài)擴(kuò)容,快速回滾,著實(shí)很方便。docker-maven-plugin 插件就是為了幫助我們?cè)?Maven 工程中,通過(guò)簡(jiǎn)單的配置,自動(dòng)生成鏡像并推送到倉(cāng)庫(kù)中。

          spotify 、fabric8

          • 這里主要使用的主要是如下兩種插件 spotifyfabric8 , ... -配置通過(guò) xml 定義出 Dockerfile 或者掛載外部 Dockerfile 通過(guò)調(diào)用 Docker remote api 構(gòu)建出鏡像

          • pig 微服務(wù)平臺(tái)[1]所有的容器化都是基于此構(gòu)建


          <plugin>
          ??<groupId>com.spotifygroupId>
          ??<artifactId>docker-maven-pluginartifactId>
          ??...??-配置通過(guò)?xml?定義出?Dockerfile?或者掛載外部?Dockerfile
          plugin>


          <plugin>
          ??<groupId>io.fabric8groupId>
          ??<artifactId>docker-maven-pluginartifactId>
          ???...??-配置通過(guò)?xml?定義出?Dockerfile?或者掛載外部?Dockerfile
          plugin>

          • 執(zhí)行相應(yīng)的插件周期即可 mvn docker:build && mvn docker:push

          jib

          • 項(xiàng)目每次發(fā)布實(shí)際上變更的代碼量不大,尤其依賴的 jar 變動(dòng)的可能性較小,如果使用前兩種插件構(gòu)建鏡像,會(huì)導(dǎo)致每次都全量構(gòu)建,會(huì)導(dǎo)致存儲(chǔ)和帶寬資源浪費(fèi)。

          • jib 是 Google 于 18 年 7 月發(fā)布的一個(gè)針對(duì) Java 應(yīng)用的構(gòu)建鏡像的工具(支持 Maven 和 Gradle) ,好處是能夠復(fù)用構(gòu)建緩存,能夠加快構(gòu)建,減小傳輸體積



          ????com.google.cloud.tools
          ????jib-maven-plugin


          mvn?jib:dockerBuild

          以上三種方案的問(wèn)題

          • 在實(shí)際開發(fā)過(guò)程中,大部分的 spring boot 項(xiàng)目構(gòu)建 Dockerfile 都是相同,不需要通過(guò)的 XML 或者通過(guò)外掛 Dockerfile 來(lái)重新定義

          • 以上插件需要對(duì) Dockerfile 的定義知識(shí)有相對(duì)的了 對(duì)開發(fā)并不友好

          • 沒(méi)充分理由 Spring Boot 2.3 以后的 Jar 分層技術(shù)。

          解決方案

          • Spring Boot 2.4[2] 推出了自己的 docker 構(gòu)建工具 整合在原有的 spring-boot-maven-plugin 中,只需要配置對(duì)應(yīng)目標(biāo)倉(cāng)庫(kù)和主機(jī)信息即可完成鏡像構(gòu)建。
          5f9d9730b6a6a09c97b574d147612365.webp
          • 如下配置即可完成上圖中 通過(guò)開發(fā)機(jī)器在不安裝 Docker 的同時(shí),通過(guò) 192.168.0.10 的 Docker Remote API 完成鏡像構(gòu)建并發(fā)布到 192.168.0.20 的鏡像倉(cāng)庫(kù)
          ?<plugin>
          ????<groupId>org.springframework.bootgroupId>
          ????<artifactId>spring-boot-maven-pluginartifactId>
          ????<configuration>
          ????????<image>
          ????????????<name>192.168.0.20/pig4cloud/${project.artifactId}name>
          ????????????
          ????????????<publish>truepublish>
          ????????image>
          ????????
          ????????<docker>
          ???<host>http://192.168.0.10:2375host>
          ????????????<tlsVerify>falsetlsVerify>
          ????????????<publishRegistry>
          ????????????????<username>usernameusername>
          ????????????????<password>passwordpassword>
          ????????????????<url>192.168.0.20url>
          ????????????publishRegistry>
          ????????docker>
          ????configuration>
          plugin>
          • 執(zhí)行以下命令即可完成 鏡像的構(gòu)建和自動(dòng)發(fā)布
          mvn?spring-boot:build-image

          其他說(shuō)明

          docker host 配置不生效

          • 如下圖 ① 處配置節(jié)點(diǎn),但是 ② 報(bào)錯(cuò)提示 host 不一致
          43f375dc2d7a50aaf2abe3616f95746b.webp
          • 檢查本地是否配置 $DOCKER_HOST 環(huán)境變量,經(jīng)過(guò)閱讀源碼后發(fā)現(xiàn)優(yōu)先讀取此變量。
          ?>?~?echo?$DOCKER_HOST??????????????????????????????????????????????????11:07:51
          tcp://172.17.0.111:2375

          網(wǎng)絡(luò)支持

          • 截取部分構(gòu)建過(guò)程中的日志,如下需要從 github 下載相關(guān)的依賴 約 100M ,這個(gè)過(guò)程大概率會(huì)失敗。建議通過(guò)配置代理或者使用國(guó)外 ECS 來(lái)解決。
          ?::?Spring?Boot?::????????????????(v2.4.0)
          [INFO]??>?Running?creator
          [INFO]?????[creator]?????????Downloading?from?https://github.com/bell-sw/Liberica/releases/download/8u275+1/bellsoft-jre8u275+1-linux-amd64.tar.gz
          [INFO]?????[creator]???????JVMKill?Agent?1.16.0:?Contributing?to?layer
          [INFO]?????[creator]?????????Downloading?from?https://github.com/cloudfoundry/jvmkill/releases/download/v1.16.0.RELEASE/jvmkill-1.16.0-RELEASE.so
          [INFO]?????[creator]?????????Downloading?from?https://repo.spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.6.0/spring-cloud-bindings-1.6.0.jar
          [INFO]?????[creator]?????????Verifying?checksum
          [INFO]?????[creator]???????????192.168.0.20/pig4cloud/demo:latest
          [INFO]
          [INFO]?Successfully?built?image?'192.168.0.20/pig4cloud/demo:latest'
          [INFO]??>?Pushing?image?'192.168.0.20/pig4cloud/demo:latest'?100%
          [INFO]??>?Pushed?image?'192.168.0.20/pig4cloud/demo:latest'
          [INFO]?BUILD?SUCCESS

          參考資料

          [1]

          pig 微服務(wù)平臺(tái): https://gitee.com/log4j/pig

          [2]

          Spring Boot 2.4 Docker: https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/htmlsingle/#build-image-example-publish

          Spring Boot 2.4.0 正式發(fā)布,全面擁抱云原生
          Spring Boot 2.4 全新Cron表達(dá)式處理機(jī)制

          點(diǎn)擊原文查看 spring boot 2.4 新特性系列文章


          瀏覽 65
          點(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>
                  大香蕉伊人影院 | 99爱免费观看 | 天天日日天天爱人人爱人人爽 | 天天躁天天操 | 翔田千里视频在线观看 |