基于Maven+Docker的WebApp打包與部署全過程
一、背景說明:為什么要這么折騰一套 Maven + Docker 流程?
在實際項目開發(fā)中,代碼寫完 ≠ 可以上線。尤其是 Java Web 項目,往往涉及:
多模塊 Maven 工程
WebApp 主模塊
Docker 鏡像封裝
離線/內(nèi)網(wǎng)服務(wù)器部署
很多同學(xué)在這個階段會遇到幾個典型問題:
IDEA 里代碼改好了,但 Docker 里跑的還是舊代碼
Maven 打包出來的 JAR 不知道該用哪個
Docker build 一直卡在 openjdk 鏡像拉取
服務(wù)器上更新一次代碼,要手動搞半天
本文將嚴(yán)格按照你當(dāng)前 powergrid 項目的真實流程,從 IDEA 打包開始,一步一步,完整講清楚:
如何把最新 Java Web 代碼,穩(wěn)定、可控地打包成 Docker 鏡像,并部署到服務(wù)器運行。
二、項目整體結(jié)構(gòu)說明(先搞清楚你在操作什么)
在開始之前,我們先明確幾個關(guān)鍵目錄(非常重要,比如我的項目):
com.powergrid ├── powergrid-admin # Web 主程序(真正運行的模塊) ├── powergrid-common # 公共模塊 ├── powergrid-framework # 框架模塊 ├── ... powergrid-docker ├── webapp │ ├── Dockerfile │ ├── powergrid-admin.jar # Docker 實際使用的 JAR │ └── ... ├── exported_images │ └── powergrid-docker-webapp.tar
一句話記憶法:
?? Maven 在
powergrid-admin/target里產(chǎn)出 JAR
?? Docker 只認(rèn)powergrid-docker/webapp里的 JAR
中間這一步「搬運 + 覆蓋」,就是 90% 人出問題的地方。
三、第一階段:使用 IDEA + Maven 正確打包項目
3.1 為什么一定要用 Maven Lifecycle?
你的項目是一個 多模塊 Maven 工程,如果你只單獨對某個模塊打包:
很可能依賴沒編全
很可能版本不一致
正確做法:從根模塊統(tǒng)一打包。
3.2 IDEA 中的具體操作步驟(圖形化)
第一步:打開 Maven 面板
在 IDEA 右側(cè),點擊 Maven 面板,你會看到類似:
powergrid ├── Lifecycle │ ├── clean │ ├── package │ ├── install
?? 注意:
請選擇最頂層的 powergrid(不是 admin)
第二步:執(zhí)行 clean
雙擊
Lifecycle → clean作用:清空歷史編譯產(chǎn)物
這是一個好習(xí)慣,避免舊代碼污染新包。
第三步:執(zhí)行 package
clean 完成后
雙擊
Lifecycle → package
如果你擔(dān)心測試失敗:
?? 點擊 Maven 面板上的 ? Skip Tests
第四步:確認(rèn)打包成功
控制臺看到以下內(nèi)容,說明成功:
[INFO] BUILD SUCCESS [INFO] Finished at: xxxx
并且所有模塊都是 SUCCESS。
四、第二階段:找到真正要用的 JAR 包
4.1 JAR 在哪里?(重點)
Maven 打包完成后:
真正要運行的 JAR 一定在:
powergrid-admin/target/
你會看到類似:
powergrid-admin.jar
4.2 為什么是 admin 模塊?
因為:
admin 是 Spring Boot 啟動模塊
其他模塊只是被依賴
Docker 運行的就是它。
五、第三階段:覆蓋 Docker 使用的 JAR(最關(guān)鍵)
5.1 Docker 只認(rèn)一個名字
查看 webapp/Dockerfile,你會看到類似:
COPY powergrid-admin.jar /app/app.jar
?? 這意味著:
Docker 只會找 powergrid-admin.jar
5.2 正確覆蓋步驟(一步都不能錯)
1?? 復(fù)制新生成的 JAR
powergrid-admin/target/powergrid-admin-3.8.9.jar
2?? 粘貼到 Docker 目錄
powergrid-docker/webapp/
3?? 刪除舊文件
4?? 重命名為:
powergrid-admin.jar
5.3 常見錯誤(踩坑警告)
? 沒改名
? 放錯目錄
? 覆蓋失敗
結(jié)果:Docker 跑的還是舊代碼。
六、第四階段:Docker 構(gòu)建鏡像
進(jìn)入 webapp 目錄:
cd D:\com.powergrid\java\powergrid-docker\webapp\
執(zhí)行構(gòu)建:
docker build -t powergrid-docker-webapp .
七、Docker 構(gòu)建失?。簅penjdk:8-jdk 拉不下來怎么辦?
這是你這個環(huán)境非常典型的問題。
7.1 問題本質(zhì)
本地沒有 openjdk:8-jdk
鏡像源 403
Dockerfile 又強依賴
7.2 解決思路:移花接木(非常實用)
第一步:加載舊鏡像
docker load -i ..\exported_images\powergrid-docker-webapp.tar
第二步:查看鏡像
docker images
第三步:改名偽裝
docker tag powergrid-docker-webapp:latest openjdk:8-jdk
第四步:重新 build
docker build -t powergrid-docker-webapp .
Dockerfile 會“以為”自己找到了基礎(chǔ)鏡像。
八、第五階段:服務(wù)器部署(三板斧)
8.1 傳輸鏡像
把新的 powergrid-docker-webapp.tar 傳到服務(wù)器。
8.2 加載鏡像
docker load -i exported_images/powergrid-docker-webapp.tar
8.3 重啟服務(wù)
docker compose up -d
8.4 查看日志
docker logs -f --tail=100 powergrid-docker-webapp
九、完整流程總結(jié)(必背)
IDEA ↓ Maven clean ↓ Maven package ↓ powergrid-admin/target/*.jar ↓(復(fù)制 + 重命名) powergrid-docker/webapp/powergrid-admin.jar ↓ docker build ↓ docker load ↓ docker compose up -d
十、結(jié)語
這套流程的核心不是 Docker,也不是 Maven,而是:
你是否清楚每一步“產(chǎn)物在哪里、被誰用、什么時候更新”。
只要你理解了這一點:
換服務(wù)器
換項目
換鏡像源
你都能舉一反三。
到此這篇關(guān)于基于Maven+Docker的WebApp打包與部署的文章就介紹到這了,更多相關(guān)Maven Docker的WebApp打包部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows下Docker部署Flask的詳細(xì)教程
這篇文章主要介紹了windows下Docker部署Flask的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01
如何使用Docker部署Go Web應(yīng)用的實現(xiàn)
這篇文章主要介紹了如何使用Docker部署Go Web應(yīng)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
使用Docker方式啟動tomcat,訪問首頁出現(xiàn)404的解決方案
這篇文章主要介紹了使用Docker方式啟動tomcat,訪問首頁出現(xiàn)404的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

