基于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ù)器上更新一次代碼,要手動搞半天
本文將嚴格按照你當前 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 只認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)心測試失?。?/p>
?? 點擊 Maven 面板上的 ? Skip Tests
第四步:確認打包成功
控制臺看到以下內(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 只認一個名字
查看 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)建鏡像
進入 webapp 目錄:
cd D:\com.powergrid\java\powergrid-docker\webapp\
執(zhí)行構(gòu)建:
docker build -t powergrid-docker-webapp .
七、Docker 構(gòu)建失敗:openjdk: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)文章
docker安裝rocketMQ和安裝過程中出現(xiàn)問題的解決
本文主要介紹了docker安裝rocketMQ和安裝過程中出現(xiàn)問題的解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
教你在docker?中搭建?PHP8?+?Apache?環(huán)境的過程
這篇文章主要介紹了docker中搭建?PHP8?+?Apache?環(huán)境,文章以安裝?pdo-mysql?擴展為例介紹php安裝擴展的詳細過程,需要的朋友可以參考下2022-03-03
docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù)問題
Redis 是一個開源的使用 ANSI C 語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value 的 NoSQL 數(shù)據(jù)庫,并提供多種語言的 API。這篇文章主要介紹了docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù),需要的朋友可以參考下2019-12-12
Docker?+?jenkins項目打包鏡像部署詳細步驟(親測有效)
這篇文章主要介紹了Docker?+?jenkins項目打包鏡像部署的相關(guān)資料,包括Jenkins的安裝、項目搭建、Dockerfile的設(shè)置以及遇到的一些問題和解決方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-04-04
docker倉庫數(shù)據(jù)傳輸加密的問題小結(jié)
這篇文章主要介紹了docker倉庫數(shù)據(jù)傳輸加密的問題小結(jié),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-12-12
Docker一鍵將運行中的容器打包成鏡像并導(dǎo)出操作
在Docker中,將運行中的容器保存為鏡像并導(dǎo)出是一個常見的操作,特別是在你需要遷移或備份容器配置和數(shù)據(jù)時,這篇文章主要介紹了Docker一鍵將運行中的容器打包成鏡像并導(dǎo)出操作的相關(guān)資料,需要的朋友可以參考下2025-11-11
編寫Dockerfile和構(gòu)建自定義鏡像的步驟與技巧
Docker已經(jīng)成為現(xiàn)代應(yīng)用程序開發(fā)和部署的重要工具之一,在Docker中,Dockerfile是定義和構(gòu)建自定義鏡像的鍵文件,本文將深入解讀Dockerfile的編寫和自定義鏡像的構(gòu)建過程,并分享一些實用的技巧和最佳實踐,需要的朋友可以參考下2023-07-07

