RuoYi-Vue 项目 Docker 全流程部署实战教程
本文以实际项目为例,详细介绍如何用 Docker 一键部署包含前端、后端、MySQL、Redis 的 Spring Boot + Vue + Nginx 全栈项目,零环境依赖,随时迁移服务器。
一、准备工作
1. 环境要求
-
新机器只需安装好 Docker Desktop(Windows/Mac),或
docker-ce
(Linux)。 -
不需要单独安装 MySQL、Redis、Node、JDK 等环境。
2. 项目结构
提前准备好以下文件和文件夹,整理到一个目录(如 Docker/
)下:
Docker/
├── backend/ # 后端jar包
│ └── ruoyi-admin.jar
├── dist/ # 前端打包目录
│ └── ...(静态资源)
├── mysql_data/ # MySQL数据持久化
├── redis_data/ # Redis数据持久化
├── ry-vue.sql # 初始化数据库SQL
├── docker-compose.yml # 一键部署配置文件
3. 前端/后端代码打包
-
前端(Vue):
cd ruoyi-ui
npm install
npm run build
-
后端(Spring Boot):
# 方法一(推荐,适用于首次/依赖变化/全量打包)
cd 项目根目录
mvn clean install -U# 方法二(仅限于模块依赖没问题时,快速打包)
cd ruoyi-admin
mvn clean package
二、编写 docker-compose.yml
一个标准的 docker-compose.yml
内容示例:
yaml
version: '3'
services:mysql:image: mysql:8.0container_name: mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: ry-vueports:- 3306:3306volumes:- ./mysql_data:/var/lib/mysql- ./ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sqlredis:image: redis:7.0container_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis_data:/databackend:image: openjdk:17-jdkcontainer_name: ruoyi-backendworking_dir: /appcommand: ["java", "-jar", "ruoyi-admin.jar"]volumes:- ./backend/ruoyi-admin.jar:/app/ruoyi-admin.jarports:- 8080:8080depends_on:- mysql- redisenvironment:SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf-8&useSSL=falseSPRING_DATASOURCE_USERNAME: rootSPRING_DATASOURCE_PASSWORD: 123456SPRING_REDIS_HOST: redisSPRING_REDIS_PORT: 6379frontend:image: nginx:latestcontainer_name: ruoyi-frontendvolumes:- ./dist:/usr/share/nginx/htmlports:- 80:80
三、一键部署操作
1.打开命令行/PowerShell,切换到 Docker 目录:
cd 路径/到/你的/Docker
2.启动全部服务:
docker compose up -d
首次启动会自动拉取镜像,首次等待时间较长(后续再部署就很快)。
3.查看服务状态:
docker compose ps
Up
表示服务启动成功。
4.访问测试:
-
前端页面:http://localhost/
-
后端API:http://localhost:8080/
-
数据库连接(Navicat等):localhost:3306,root/123456
四、常见问题与解决方案
1. MySQL 端口冲突
报错: ports are not available: exposing port ... 3306: bind: ...
-
说明本机已运行 MySQL。
-
解决方法:
docker-compose.yml
里3306:3306
改为3307:3306
,用 Navicat 连localhost:3307
。
2. 服务未自动初始化数据库
-
确保
ry-vue.sql
在 Docker 目录,并已正确挂载到 mysql 容器。 -
首次部署数据会自动导入,后续不会覆盖。
3. 端口被防火墙/安全软件拦截
-
检查 Docker Desktop 的网络设置。
-
允许 80、8080、3306、6379 端口。
五、更新和重启服务
前端代码更新: 重新 npm run build
,覆盖 dist/
文件夹,重启 frontend 服务
docker compose restart frontend
后端代码更新: 重新 mvn package
,覆盖 backend/ruoyi-admin.jar
,重启 backend 服务
docker compose restart backend
关闭所有服务:
docker compose down
六、总结
-
只需安装 Docker,复制好全部部署文件,一条命令即可完成全套环境搭建,极大简化了开发、迁移和运维流程。
-
常规更新也只需替换文件夹、重启容器即可,真正做到零环境污染、跨平台无忧。