應用上K8S第三步:Maven打包
對於spring boot專案我們一般使用Maven或Gradle進行編譯打包,也可以藉助docker plugin進行映象打包並push到遠端倉庫。因此在經過《應用上K8S第一步:Dockerfile引數化構建技巧》一文,我們已經確定了Dockerfile,那麼應用上K8S第二步:maven打包就可以開始了。
現在我們就來介紹下maven打包,大家感興趣的話也可以和gradle打包對比下,並進一步掌握這兩種方式。
手動構建spring boot應用
一、helloworld應用
1.建立spring boot工程
2.建立HelloworldController
3.編譯執行
此時我們可以透過localhost:8080訪問了。
二、docker構建映象
1.Dockerfile
2.構建映象並執行容器
此時我們可以透過localhost:8080訪問了。
以上是透過手動執行jar包及透過映象的形式執行應用,其實mvn也提供相應的外掛自動構建映象。
mvn構建docker映象
一、配置mvn外掛
docker-maven-plugin作用是配合Dockerfile構建docker映象,推送到docker倉庫。還可以使用dockerfile-maven-plugin
其中:
(1)imageName 是構建映象的名稱;
(2)dockerDirectory是Dockerfile位置,最好是隻有Dockerfile,因為在mvn打包時此目錄下的所有檔案包括Dockerfile將會被copy到${project.build.directory}/docker目錄下,此目錄預設是target/docker目錄;
(3)resource作用是將${project.build.directory}目錄下的${project.build.finalName}.jar,複製到${project.build.directory}/docker目錄下;如:將target/helloworld-0.0.1-SNAPSHOT.jar 檔案複製到target/docker/下;
二、構建執行
其中:第5,6行可以看到copy過程,對應pom.xml中的<resource>配置,剩下為從Dockerfile構建映象過程。
從以上看出此映象只有預設的tag:latest,如果需要加上版本資訊,需在pom.xml中新增如下配置:
或者
以上配置或手動新增tag後,最終映象如下:
三、推送映象到遠端倉庫阿里雲映象庫
1.建立倉庫
在阿里雲容器映象服務建立倉庫
2.mvn配置映象庫認證
3.pom.xml配置
注意:
(1)<imageName>名稱一定要與與阿里雲映象倉庫對應,否則無法push到阿里雲倉庫,功能等於:
(2)<serverId>一定要與mvn映象庫的id對應
以上兩項不對,映象將預設推送至docker.io。
4.構建並push
注意:
四、繫結Docker命令到Maven各個階段
Docker 構建過程為 build、tag、push,其中build、tag對應mvn的package階段,push對應mvn的deploy。透過將docker命令繫結到mvn的各個階段,我們可以透過mvn deploy實現構建並push的過程。
補充:
maven各階段功能:
(1)package階段實現專案編譯、單元測試、打包功能,但沒有把打好的可執行jar包(war包或其它形式的包)佈署到本地maven倉庫和遠端maven私服倉庫;
(2) install階段實現專案編譯、單元測試、打包功能,同時把打好的可執行jar包(war包或其它形式的包)佈署到本地maven倉庫,但沒有佈署到遠端maven私服倉庫;
(3) deploy階段實現專案編譯、單元測試、打包功能,同時把打好的可執行jar包(war包或其它形式的包)佈署到本地maven倉庫和遠端maven私服倉庫;
1.pom.xml配置外掛
注意:一定要透過maven-deploy-plugin設定skip,透過skip跳過artifact倉庫,否則mvn deploy 推送時報錯:
2.執行命令
注意:
(1)經測試發現,實際<goal>tag</goal>階段實際並不會進行tag,而是透過<imageName>registry.cn-qingdao.aliyuncs.com/test/test</imageName>配置進行tag,如果你的imageName設定不正確,則不會推送到自定義倉庫,而是預設的官方倉庫;
(2)此方式會將映象的所有tag 版本及歷史版本,如v3和latest及所有歷史版本v2,v1都會推送到遠端倉庫;
總結
透過對比,"docker命令繫結mvn各階段"方式不太靈活,而且會將映象所有tag進行推送,但提供了一套模板用於自動化流程,可根據實際情況選擇。
docker部署springboot的過程算是親自實踐了下,但是在實際過程中還需要考慮以下問題:
1.java應用的執行時資料、日誌檔案的持久化;
2.映象命令、目錄問題、私有映象庫等的配合使用;
3.流水線操作實現測試、版本釋出等;
4.docker 執行狀態監控等;
運維從來都不滿足於實現部署的某個過程,需要綜合考慮提供一套整體的運維方案,這個還需要不斷實踐總結。
來自 “ 木訥大叔愛運維 ”, 原文作者:木訥大叔愛運維;原文連結:https://mp.weixin.qq.com/s/-1f6UmbD8RxXDqfUvX97rg,如有侵權,請聯絡管理員刪除。
相關文章
- 應用上K8S第三步:K8S整合Java應用K8SJava
- 應用上K8S第二步:Gradle 打包K8SGradle
- maven打包Maven
- 使用Maven打包你的應用——maven-jar-plugin & maven-assembly-plugin & maven-shade-pluginMavenJARPlugin
- Maven 免測試打包Maven
- maven打包oracle jdbc驅動MavenOracleJDBC
- 在idea上 maven 打包IdeaMaven
- Maven 打包釋出到nexusMaven
- 應用上K8S第一步:Dockerfile引數化構建技巧K8SDocker
- java專案打包(maven+原生)JavaMaven
- maven 打包不複製資源Maven
- 【maven】Maven打包後為何檔案大小改變了Maven
- maven 打包時將 source 和 javadoc 一起打包MavenJava
- 應用上K8S第四步:如何選擇合適的持久卷K8S
- maven打包 package install deploy區別MavenPackage
- maven模組互相依賴打包處理Maven
- maven 打包可執行 jar 檔案MavenJAR
- Maven命令列使用:mvn clean package(打包)Maven命令列Package
- 應用上雲可以有多快?
- eclipse maven打包 跳過junit測試EclipseMaven
- 普通maven專案將依賴包打包方法Maven
- Apache Maven Assembly自定義打包外掛的使用ApacheMaven
- 關於使用maven打包如何聚合資原始檔Maven
- 使用bat批處理命令打包maven專案BATMaven
- IDEA中使用maven打包且包含依賴IdeaMaven
- SpringCloud微服務實戰——搭建企業級開發框架(三十四):SpringCloud + Docker + k8s實現微服務叢集打包部署-Maven打包配置SpringGCCloud微服務框架DockerK8SMaven
- Maven多模組專案打包前的一些注意事項(打包失敗)Maven
- Maven Web 應用MavenWeb
- 使用Maven的assembly外掛實現自定義打包Maven
- maven專案打包時生成dependency-reduced-pom.xmlMavenXML
- Python AI小專案打包通關:Pyinstaller和Wix都用上了PythonAI
- 開放API時代,把心思放在應用上API
- 新應用上線又見老問題
- k8s下的jenkins如何設定mavenK8SJenkinsMaven
- Maven打包springboot框架的可執行的jarMavenSpring Boot框架JAR
- 在 NetBeans 中打包 Maven 專案的兩種方式BeanMaven
- maven打包時過濾檔案及排除依賴包Maven
- IDEA如何用maven打包(介面和命令兩種方式)IdeaMaven