Docker(4)部署企业级前后端分离项目:Vue3 + Java 完整实战
1. 引言在真实的企业开发中将前端 Vue3 项目与后端 Java 项目通过 Docker 进行容器化部署是保障环境一致性、实现快速交付与弹性伸缩的关键环节。本文将从零开始带你完成一套贴近企业实践的部署方案涵盖镜像构建、容器编排、挂载卷、网络通信等核心内容全程使用docker run命令不使用 Docker Compose。2. 整体架构设计在动手之前我们先明确企业级部署的整体架构。一个典型的前后端分离项目通常包含以下组件前端服务Nginx 承载 Vue3 构建后的静态资源并反向代理后端 API。后端服务Java 应用Spring Boot 等提供 RESTful API。数据库MySQL 存储业务数据。缓存Redis 提供缓存与会话管理。所有容器通过自定义网络net-gym互联并通过容器名互相访问。下面是整体架构图Docker 宿主机客户端Redis 容器MySQL 容器Java 容器Nginx 容器http://backend-gym:8088HTTP浏览器 / 移动端静态资源反向代理 /apiSpring Boot 应用业务数据库缓存3. 环境准备3.1 安装 Docker首先确保你的服务器或开发机上已安装 Docker。# 验证 Docker 是否安装成功docker--version如果 Docker 尚未安装可以参考我之前写的《Docker1 Docker 安装全流程从入门到生产实践》里面有 Ubuntu、CentOS 等主流系统的详细安装步骤。建议使用 Ubuntu 24.04 LTS及以上。企业项目中我们通常将部署相关文件与代码仓库分离管理。建议的目录结构如下/usr/local/file/ ├── frontend/ │ └── GymManagementSystem/ # 前端部署目录 │ ├── dist/ # 前端编译产物 │ └── nginx/ │ └── default.conf # Nginx 配置 ├── backend/ │ └── GymManagementSystem/ # 后端部署目录 │ ├── mars-admin.jar # 后端 jar 包 │ └── application-prod.yml # 生产配置 └── mysql/ ├── data/ # MySQL 数据目录 └── conf/ # MySQL 配置目录4. 前端 Vue3 项目部署本章直接使用docker run命令启动 Nginx 容器通过挂载卷将前端编译产物和 Nginx 配置挂载到容器中无需编写 Dockerfile 和构建镜像。4.1 创建所需文件夹mkdir-p/usr/local/file/frontend/GymManagementSystemmkdir-p/usr/local/file/frontend/GymManagementSystem/nginx4.2 上传前端编译产物将前端项目npm run build生成的dist目录上传到/usr/local/file/frontend/GymManagementSystem/下。4.3 编写 Nginx 配置在/usr/local/file/frontend/GymManagementSystem/nginx/目录下创建default.confserver { listen 80; server_name _; root /usr/share/nginx/html; index index.html; # Vue/React history 路由刷新 404 解决方案 location / { try_files $uri $uri/ /index.html; } # 静态资源缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 7d; } # 前后端分离代理后端接口按需开启修改地址 location /api/ { proxy_pass http://backend-gym:8088/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }4.4 启动 Nginx 容器dockerrun-d\--namenginx-GymManagementSystem\--restartunless-stopped\--networknet-gym\-p8081:80\-v/usr/local/file/frontend/GymManagementSystem/dist:/usr/share/nginx/html:ro\-v/usr/local/file/frontend/GymManagementSystem/nginx/default.conf:/etc/nginx/conf.d/default.conf\nginx说明宿主机8081端口映射到容器80端口访问http://服务器IP:8081即可打开前端页面。5. 后端 Java 项目部署本章直接使用docker run命令启动后端容器通过挂载卷将 jar 包和配置文件挂载到容器中无需编写 Dockerfile 和构建镜像。5.1 创建所需文件夹mkdir-p/usr/local/file/backend/GymManagementSystem/logsmkdir-p/usr/local/file/mysql/data /usr/local/file/mysql/conf5.2 启动 MySQL 容器dockerrun-d\--namemysql-gym\--restartunless-stopped\--networknet-gym\-p3306:3306\-v/usr/local/file/mysql/data:/var/lib/mysql\-v/usr/local/file/mysql/conf:/etc/mysql/conf.d\-eMYSQL_ROOT_PASSWORD123456\-eMYSQL_DATABASEgym_system\mysql:8.05.3 启动 Redis 容器dockerrun-d\--nameredis-gym\--networknet-gym\-p6379:6379\redis:alpine5.4 启动后端项目容器将后端打包好的mars-admin.jar与application-prod.yml上传到/usr/local/file/backend/GymManagementSystem/目录然后启动dockerrun-d\--namebackend-gym\--networknet-gym\-p8080:8088\-eDB_HOSTmysql-gym\-eDB_PORT3306\-eDB_NAMEgym_system\-eDB_USERNAMEroot\-eDB_PASSWORD123456\-eREDIS_HOSTredis-gym\-eREDIS_PORT6379\-v/usr/local/file/backend/GymManagementSystem/mars-admin.jar:/app/app.jar\-v/usr/local/file/backend/GymManagementSystem/application-prod.yml:/app/application-prod.yml\eclipse-temurin:17-jre-alpine\sh-cjava -Xms256m -Xmx512m -Djava.security.egdfile:/dev/./urandom -jar /app/app.jar --spring.profiles.activeprod说明后端容器内部端口为8088映射到宿主机8080。Nginx 通过容器名backend-gym在net-gym网络内访问后端8088端口。7. 启动与验证7.1 启动全部服务按顺序执行以下命令启动全部容器# 1. 创建网络已创建可跳过dockernetwork create net-gym# 2. 启动 MySQLdockerstart mysql-gym# 3. 启动 Redisdockerstart redis-gym# 4. 启动后端dockerstart backend-gym# 5. 启动前端 Nginxdockerstart nginx-GymManagementSystem# 查看所有容器运行状态dockerps7.2 验证服务可用性# 验证前端页面curl-Ihttp://localhost:8081# 验证后端健康检查接口curlhttp://localhost:8080/api/health# 验证 MySQL 连接dockerexec-itmysql-gym mysql-uroot-p-eSELECT 1;# 验证 Redis 连接dockerexec-itredis-gym redis-cliping7.3 常见问题排查问题现象可能原因解决方案前端页面 404Nginx 配置错误检查default.conf的try_files配置后端接口 502服务未启动或网络不通检查docker ps与容器日志docker logs backend-gym数据库连接失败密码不匹配或未初始化检查-e MYSQL_ROOT_PASSWORD与后端DB_PASSWORD是否一致容器间无法通信未加入同一网络确认所有容器都使用--network net-gym8. 数据持久化与备份8.1 挂载卷说明本文方案中以下数据均通过挂载卷持久化到宿主机服务容器路径宿主机路径用途MySQL/var/lib/mysql/usr/local/file/mysql/data数据库文件Redis/data未挂载内存缓存缓存数据后端/app/app.jar/usr/local/file/backend/GymManagementSystem/mars-admin.jar后端 jar 包后端/app/application-prod.yml/usr/local/file/backend/GymManagementSystem/application-prod.yml生产配置Nginx/usr/share/nginx/html/usr/local/file/frontend/GymManagementSystem/dist前端静态资源Nginx/etc/nginx/conf.d/default.conf/usr/local/file/frontend/GymManagementSystem/nginx/default.confNginx 配置提示如需 Redis 持久化可在启动时增加-v /usr/local/file/redis/data:/data挂载参数。11. 滚动更新与回滚11.1 滚动更新企业发布新版本时使用以下流程实现零停机更新# 1. 构建新版本后端镜像如有代码变更dockerbuild-tmyapp-backend:1.1.0.# 2. 停止并删除旧容器dockerstop backend-gymdockerrmbackend-gym# 3. 使用新镜像重新启动容器dockerrun-d\--namebackend-gym\--networknet-gym\-p8080:8088\-eDB_HOSTmysql-gym\-eDB_PORT3306\-eDB_NAMEgym_system\-eDB_USERNAMEroot\-eDB_PASSWORD123456\-eREDIS_HOSTredis-gym\-eREDIS_PORT6379\-v/usr/local/file/backend/GymManagementSystem/mars-admin.jar:/app/app.jar\-v/usr/local/file/backend/GymManagementSystem/application-prod.yml:/app/application-prod.yml\eclipse-temurin:17-jre-alpine\sh-cjava -Xms256m -Xmx512m -Djava.security.egdfile:/dev/./urandom -jar /app/app.jar --spring.profiles.activeprod11.2 快速回滚# 回滚到上一版本重新上传旧 jar 包后重启容器dockerstop backend-gymdockerrmbackend-gym# 重新执行 11.1 中的 docker run 命令即可12. 总结通过本文的完整实践你已经掌握了使用 Docker 命令部署 Vue3 前端与 Java 后端企业级项目的方法。核心要点总结如下自定义网络通过docker network create net-gym实现容器间通过容器名通信。挂载卷持久化保障数据库、上传文件等数据不因容器重建而丢失。环境变量外部化敏感配置与代码分离提升安全性。端口映射宿主机端口与容器端口灵活映射满足不同访问需求。容器生命周期管理掌握docker run、docker start、docker stop、docker rm等核心命令。这套方案可以直接应用于真实的企业项目交付后续可根据业务规模引入 Kubernetes 进行更复杂的编排管理。

相关新闻

Vue3可扩展AI服务Provider系统:设计原理与工程实践

Vue3可扩展AI服务Provider系统:设计原理与工程实践

1. 项目概述:为什么我们需要一个可扩展的 Provider 系统? 在构建现代前端应用,尤其是基于 Vue3 的复杂中后台系统时,我们常常会遇到一个核心挑战:如何优雅地管理那些贯穿应用生命周期的、全局性的数据和逻辑&#xff1…

2026/8/13 9:46:44 阅读更多 →
Bun vs Node.js:JavaScript运行时性能对比与一体化工具链解析

Bun vs Node.js:JavaScript运行时性能对比与一体化工具链解析

1. 从 Node.js 到 Bun:一次运行时的范式转移 如果你在过去十年里写过 JavaScript 后端服务,或者搞过前端工程化,那么 Node.js 对你来说,可能就像空气和水一样自然。从 npm install 到 node server.js ,这套基于 Ch…

2026/8/13 9:46:44 阅读更多 →
Sunshine游戏串流从零开始:打造你的专属云游戏平台完整指南

Sunshine游戏串流从零开始:打造你的专属云游戏平台完整指南

Sunshine游戏串流从零开始:打造你的专属云游戏平台完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否厌倦了被订阅费用和游戏库限制所困扰?想要…

2026/8/13 9:45:42 阅读更多 →

最新新闻

2026年AI代码生成工具Codex配置与API调用实战指南

2026年AI代码生成工具Codex配置与API调用实战指南

这次我们来看一个名为“Codex”的AI代码生成工具。根据网络信息,它是由OpenAI开发的大型语言模型,专门用于理解和生成代码。对于开发者来说,它意味着可以快速生成代码片段、补全函数、解释代码甚至在不同编程语言间进行转换。这篇文章的重点不…

2026/8/13 10:44:14 阅读更多 →
头疼的 Kafka 消息重复问题,从根上解决!

头疼的 Kafka 消息重复问题,从根上解决!

一、前言数据重复这个问题其实也是挺正常,全链路都有可能会导致数据重复。通常,消息消费时候都会设置一定重试次数来避免网络波动造成的影响,同时带来副作用是可能出现消息重复。整理下消息重复的几个场景:生产端: 遇到…

2026/8/13 10:44:14 阅读更多 →
本地AI部署实战:从环境搭建到API集成的完整指南

本地AI部署实战:从环境搭建到API集成的完整指南

这次我们来看一个名为“重返未来great idea”的项目。从名称上看,它可能是一个结合了创意、未来感或某种特定主题的生成式AI工具或应用。这类项目通常聚焦于通过AI技术实现特定风格的图像、视频或文本生成,其核心价值在于能否在本地环境稳定运行&#xf…

2026/8/13 10:44:14 阅读更多 →
元初混沌体系架构 第二卷 第三十六篇 7G时空通信稳态闭环总复盘

元初混沌体系架构 第二卷 第三十六篇 7G时空通信稳态闭环总复盘

第三十六篇 7G时空通信稳态闭环总复盘单元收官总序 第二单元完整定位复盘本单元为第二卷 鸿蒙7G星际超域通信升维体系核心中层支柱单元,单元编号19–36,共计18篇正统学术篇章,精准承接第一单元本源公理体系,为后续频谱升维、抗干…

2026/8/13 10:44:14 阅读更多 →
BeyondCompare:专业源代码比对工具的核心功能与实战应用

BeyondCompare:专业源代码比对工具的核心功能与实战应用

1. 项目概述:为什么我们需要专业的源代码比对工具?在软件开发、代码审计、版本合并或者团队协作的日常里,一个场景反复出现:你手上有两份看起来相似但又不同的代码文件,可能是不同分支的修改,可能是重构前后…

2026/8/13 10:44:14 阅读更多 →
代码的第一把切割刀:用边界终结“面条系统”的坍塌

代码的第一把切割刀:用边界终结“面条系统”的坍塌

专栏《信息技术》 | 计算系统进化论 (01/12) 一万行代码里的“排雷”暗战

2026/8/13 10:43:14 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →