背景
在我們開發程序中為了支持 Docker 容器化,一般使用 Maven 編譯打包然后生成鏡像,能夠大大提供上線效率,同時能夠快速動態擴容,快速回滾,著實很方便,docker-maven-plugin 插件就是為了幫助我們在 Maven 工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中,
spotify 、fabric8
-
這里主要使用的主要是如下兩種插件
spotify、fabric8, ... -配置通過 xml 定義出 Dockerfile 或者掛載外部 Dockerfile 通過呼叫 Docker remote api 構建出鏡像 -
pig 微服務平臺所有的容器化都是基于此構建
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> ... -配置通過 xml 定義出 Dockerfile 或者掛載外部 Dockerfile </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> ... -配置通過 xml 定義出 Dockerfile 或者掛載外部 Dockerfile </plugin>
-
執行相應的插件周期即可
mvn docker:build && mvn docker:push
jib
-
專案每次發布實際上變更的代碼量不大,尤其依賴的 jar 變動的可能性較小,如果使用前兩種插件構建鏡像,會導致每次都全量構建,會導致存盤和帶寬資源浪費,
-
jib 是 Google 于 18 年 7 月發布的一個針對 Java 應用的構建鏡像的工具(支持 Maven 和 Gradle) ,好處是能夠復用構建快取,能夠加快構建,減小傳輸體積
<!--配置通過 xml 定義出 Dockerfile ,本質上和外掛 Dockerfile 并無區別--> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> </plugin> mvn jib:dockerBuild
以上三種方案的問題
-
在實際開發程序中,大部分的 spring boot 專案構建 Dockerfile 都是相同,不需要通過的 XML 或者通過外掛 Dockerfile 來重新定義
-
以上插件需要對 Dockerfile 的定義知識有相對的了 對開發并不友好
-
沒充分理由 Spring Boot 2.3 以后的 Jar 分層技術,
解決方案
-
Spring Boot 2.4 推出了自己的 docker 構建工具 整合在原有的
spring-boot-maven-plugin中,只需要配置對應目標倉庫和主機資訊即可完成鏡像構建,
-
如下配置即可完成上圖中 通過開發機器在不安裝 Docker 的同時,通過
192.168.0.10的 Docker Remote API 完成鏡像構建并發布到192.168.0.20的鏡像倉庫
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <name>192.168.0.20/pig4cloud/${project.artifactId}</name> <!-- 執行完build 自動push --> <publish>true</publish> </image> <!--配置構建宿主機資訊,本機不用配置--> <docker> <host>http://192.168.0.10:2375</host> <tlsVerify>false</tlsVerify> <publishRegistry> <username>username</username> <password>password</password> <url>192.168.0.20</url> </publishRegistry> </docker> </configuration> </plugin>
-
執行以下命令即可完成 鏡像的構建和自動發布
mvn spring-boot:build-image
其他說明
docker host 配置不生效
-
如下圖 ① 處配置 <host></host> 節點,但是 ② 報錯提示 host 不一致
-
檢查本地是否配置 $DOCKER_HOST 環境變數,經過閱讀原始碼后發現優先讀取此變數,
?> ~ echo $DOCKER_HOST 11:07:51 tcp://172.17.0.111:2375
網路支持
-
截取部分構建程序中的日志,如下需要從 github 下載相關的依賴 約 100M ,這個程序大概率會失敗,建議通過配置代理或者使用國外 ECS 來解決,
:: 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
看完三件事??
如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
-
點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力,
-
關注公眾號 『 java爛豬皮 』,不定期分享原創知識,
-
同時可以期待后續文章ing??
作者:冷冷zz
出處:https://my.oschina.net/giegie/blog/4720687
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/226034.html
標籤:Java
下一篇:記一次 Java 服務性能優化
