基于Maven+Docker的WebApp打包与部署全过程

 更新时间:2026年02月02日 08:56:46   作者:那年一路北  
这篇文章主要介绍了基于Maven+Docker的WebApp打包与部署的相关资料,文中通过代码讲解了如何找到正确的JAR包、覆盖Docker使用的JAR、构建Docker镜像、解决Docker构建失败的问题以及在服务器上部署,需要的朋友可以参考下

一、背景说明:为什么要这么折腾一套 Maven + Docker 流程?

在实际项目开发中,代码写完 ≠ 可以上线。尤其是 Java Web 项目,往往涉及:

  • 多模块 Maven 工程

  • WebApp 主模块

  • Docker 镜像封装

  • 离线/内网服务器部署

很多同学在这个阶段会遇到几个典型问题:

  1. IDEA 里代码改好了,但 Docker 里跑的还是旧代码

  2. Maven 打包出来的 JAR 不知道该用哪个

  3. Docker build 一直卡在 openjdk 镜像拉取

  4. 服务器上更新一次代码,要手动搞半天

本文将严格按照你当前 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安装rocketMQ和安装过程中出现问题的解决

    docker安装rocketMQ和安装过程中出现问题的解决

    本文主要介绍了docker安装rocketMQ和安装过程中出现问题的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 教你在docker 中搭建 PHP8 + Apache 环境的过程

    教你在docker 中搭建 PHP8 + Apache 环境的过程

    这篇文章主要介绍了docker中搭建 PHP8 + Apache 环境,文章以安装 pdo-mysql 扩展为例介绍php安装扩展的详细过程,需要的朋友可以参考下
    2022-03-03
  • docker安装redis 5.0.7并挂载外部配置和数据问题

    docker安装redis 5.0.7并挂载外部配置和数据问题

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。这篇文章主要介绍了docker安装redis 5.0.7并挂载外部配置和数据,需要的朋友可以参考下
    2019-12-12
  • ubuntu17.10安装docker-ce的方法

    ubuntu17.10安装docker-ce的方法

    本篇文章主要介绍了ubuntu 17.10 安装docker-ce的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Docker + jenkins项目打包镜像部署详细步骤(亲测有效)

    Docker + jenkins项目打包镜像部署详细步骤(亲测有效)

    这篇文章主要介绍了Docker + jenkins项目打包镜像部署的相关资料,包括Jenkins的安装、项目搭建、Dockerfile的设置以及遇到的一些问题和解决方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • docker仓库数据传输加密的问题小结

    docker仓库数据传输加密的问题小结

    这篇文章主要介绍了docker仓库数据传输加密的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-12-12
  • Docker一键将运行中的容器打包成镜像并导出操作

    Docker一键将运行中的容器打包成镜像并导出操作

    在Docker中,将运行中的容器保存为镜像并导出是一个常见的操作,特别是在你需要迁移或备份容器配置和数据时,这篇文章主要介绍了Docker一键将运行中的容器打包成镜像并导出操作的相关资料,需要的朋友可以参考下
    2025-11-11
  • MacBookPro下docker的安装与使用教程

    MacBookPro下docker的安装与使用教程

    Windows与Linux下关于docker的安装使用方法有很多,今天小编这里给大家分享的是MacOS下docker的安装与简单使用案例,非常简单,给有需要的小伙伴参考下
    2017-03-03
  • Docker构建文件Dockerfile简单入门

    Docker构建文件Dockerfile简单入门

    这篇文章主要介绍了Docker构建文件Dockerfile简单入门,需要的朋友可以参考下
    2022-04-04
  • 编写Dockerfile和构建自定义镜像的步骤与技巧

    编写Dockerfile和构建自定义镜像的步骤与技巧

    Docker已经成为现代应用程序开发和部署的重要工具之一,在Docker中,Dockerfile是定义和构建自定义镜像的键文件,本文将深入解读Dockerfile的编写和自定义镜像的构建过程,并分享一些实用的技巧和最佳实践,需要的朋友可以参考下
    2023-07-07

最新评论