基于Maven+Docker的WebApp打包与部署全过程
一、背景说明:为什么要这么折腾一套 Maven + Docker 流程?
在实际项目开发中,代码写完 ≠ 可以上线。尤其是 Java Web 项目,往往涉及:
多模块 Maven 工程
WebApp 主模块
Docker 镜像封装
离线/内网服务器部署
很多同学在这个阶段会遇到几个典型问题:
IDEA 里代码改好了,但 Docker 里跑的还是旧代码
Maven 打包出来的 JAR 不知道该用哪个
Docker build 一直卡在 openjdk 镜像拉取
服务器上更新一次代码,要手动搞半天
本文将严格按照你当前 powergrid 项目的真实流程,从 IDEA 打包开始,一步一步,完整讲清楚:
如何把最新 Java Web 代码,稳定、可控地打包成 Docker 镜像,并部署到服务器运行。
二、项目整体结构说明(先搞清楚你在操作什么)
在开始之前,我们先明确几个关键目录(非常重要,比如我的项目):
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里产出 JAR
👉 Docker 只认powergrid-docker/webapp里的 JAR
中间这一步「搬运 + 覆盖」,就是 90% 人出问题的地方。
三、第一阶段:使用 IDEA + Maven 正确打包项目
3.1 为什么一定要用 Maven Lifecycle?
你的项目是一个 多模块 Maven 工程,如果你只单独对某个模块打包:
很可能依赖没编全
很可能版本不一致
正确做法:从根模块统一打包。
3.2 IDEA 中的具体操作步骤(图形化)
第一步:打开 Maven 面板
在 IDEA 右侧,点击 Maven 面板,你会看到类似:
powergrid ├── Lifecycle │ ├── clean │ ├── package │ ├── install
⚠️ 注意:
请选择最顶层的 powergrid(不是 admin)
第二步:执行 clean
双击
Lifecycle → clean作用:清空历史编译产物
这是一个好习惯,避免旧代码污染新包。
第三步:执行 package
clean 完成后
双击
Lifecycle → package
如果你担心测试失败:
👉 点击 Maven 面板上的 ⚡ Skip Tests
第四步:确认打包成功
控制台看到以下内容,说明成功:
[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(最关键)
5.1 Docker 只认一个名字
查看 webapp/Dockerfile,你会看到类似:
COPY powergrid-admin.jar /app/app.jar
⚠️ 这意味着:
Docker 只会找 powergrid-admin.jar
5.2 正确覆盖步骤(一步都不能错)
1️⃣ 复制新生成的 JAR
powergrid-admin/target/powergrid-admin-3.8.9.jar
2️⃣ 粘贴到 Docker 目录
powergrid-docker/webapp/
3️⃣ 删除旧文件
4️⃣ 重命名为:
powergrid-admin.jar
5.3 常见错误(踩坑警告)
❌ 没改名
❌ 放错目录
❌ 覆盖失败
结果:Docker 跑的还是旧代码。
六、第四阶段:Docker 构建镜像
进入 webapp 目录:
cd D:\com.powergrid\java\powergrid-docker\webapp\
执行构建:
docker build -t powergrid-docker-webapp .
七、Docker 构建失败:openjdk:8-jdk 拉不下来怎么办?
这是你这个环境非常典型的问题。
7.1 问题本质
本地没有 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 会“以为”自己找到了基础镜像。
八、第五阶段:服务器部署(三板斧)
8.1 传输镜像
把新的 powergrid-docker-webapp.tar 传到服务器。
8.2 加载镜像
docker load -i exported_images/powergrid-docker-webapp.tar
8.3 重启服务
docker compose up -d
8.4 查看日志
docker logs -f --tail=100 powergrid-docker-webapp
九、完整流程总结(必背)
IDEA ↓ Maven clean ↓ Maven package ↓ powergrid-admin/target/*.jar ↓(复制 + 重命名) powergrid-docker/webapp/powergrid-admin.jar ↓ docker build ↓ docker load ↓ docker compose up -d
十、结语
这套流程的核心不是 Docker,也不是 Maven,而是:
你是否清楚每一步“产物在哪里、被谁用、什么时候更新”。
只要你理解了这一点:
换服务器
换项目
换镜像源
你都能举一反三。
到此这篇关于基于Maven+Docker的WebApp打包与部署的文章就介绍到这了,更多相关Maven Docker的WebApp打包部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
教你在docker 中搭建 PHP8 + Apache 环境的过程
这篇文章主要介绍了docker中搭建 PHP8 + Apache 环境,文章以安装 pdo-mysql 扩展为例介绍php安装扩展的详细过程,需要的朋友可以参考下2022-03-03
docker安装redis 5.0.7并挂载外部配置和数据问题
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。这篇文章主要介绍了docker安装redis 5.0.7并挂载外部配置和数据,需要的朋友可以参考下2019-12-12
Docker + jenkins项目打包镜像部署详细步骤(亲测有效)
这篇文章主要介绍了Docker + jenkins项目打包镜像部署的相关资料,包括Jenkins的安装、项目搭建、Dockerfile的设置以及遇到的一些问题和解决方法,文中通过代码介绍的非常详细,需要的朋友可以参考下2025-04-04


最新评论