若依(RuoYi)项目后端 Docker 部署指南
本文详细介绍若依项目后端基于 Docker + Docker Compose 的标准化部署流程,包含镜像构建、服务编排、配置修改等核心步骤,适配若依 Vue 版本后端部署。
前置条件
步骤 1:编写 Dockerfile
在项目根目录下创建 Dockerfile,用于构建若依后端应用镜像。
完整 Dockerfile 内容
# 基础镜像:选择JDK17环境(若依4.X+推荐JDK17,低版本可替换为jdk8,如openjdk:8-jre-slim)
FROM btgoose/jdk17
# 设置工作目录(容器内)
WORKDIR /app
# 创建若依文件上传目录(对应项目的uploadPath配置,避免容器内目录缺失)
RUN mkdir -p /ruoyi/uploadPath
# 声明构建参数:指定Jar包路径(本地Maven打包后的Jar包位置)
ARG JAR_FILE=target/*.jar
# 将本地Jar包复制到容器内,并重命名为app.jar(统一命名,方便启动)
COPY ${JAR_FILE} app.jar
# 暴露应用端口(对应若依默认端口8080)
EXPOSE 8080
# 容器启动命令:运行Jar包(可添加JVM参数,如-Xms512m -Xmx1024m 调整内存)
ENTRYPOINT ["java", "-jar", "app.jar"]
关键注意事项
- 首次构建会生成应用镜像,后续执行 docker-compose 会复用该镜像;
- 若项目 Jar 包更新(代码修改后重新打包),需先删除旧镜像再重新部署:# 查看若依应用镜像
docker images | grep ruoyi-app
# 删除旧镜像(替换为实际镜像ID)
docker rmi <镜像ID>
步骤 2:编写 docker-compose.yml
在项目根目录下创建 docker-compose.yml,用于编排 MySQL、Redis、若依应用三个服务,实现一键部署。
完整 docker-compose.yml 内容
version: '3.8'
services:
# 1. MySQL数据库服务(若依依赖)
mysql:
image: mysql:8.0 # 指定MySQL版本(若依兼容5.7/8.0,推荐8.0)
container_name: ruoyi–mysql # 容器名称,便于管理
restart: unless–stopped # 非手动停止时,容器异常退出自动重启
environment:
MYSQL_ROOT_PASSWORD: password # MySQL root密码(建议修改为强密码)
MYSQL_DATABASE: ry–vue # 自动创建若依默认数据库
TZ: Asia/Shanghai # 时区配置(避免时间偏移)
command:
# MySQL字符集、排序规则、时区配置(解决中文乱码、时间问题)
– ––character–set–server=utf8mb4
– ––collation–server=utf8mb4_unicode_ci
– ––default–time–zone=+08:00
ports:
– "3306:3306" # 端口映射:宿主机3306 -> 容器3306
volumes:
– mysql_data:/var/lib/mysql # 数据卷:持久化MySQL数据
– ./mysql/conf:/etc/mysql/conf.d # 挂载自定义MySQL配置(可选)
– ./mysql/init:/docker–entrypoint–initdb.d # 挂载初始化SQL,容器启动时自动执行
networks:
– ruoyi–network # 加入自定义网络,实现服务间通信
healthcheck:
# 健康检查:确保MySQL启动完成后再启动若依应用
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppassword"]
timeout: 20s # 单次检查超时时间
retries: 10 # 重试次数(失败则认为服务异常)
# 2. Redis缓存服务(若依依赖)
redis:
image: redis:7–alpine # 轻量级Redis镜像(alpine版本体积小)
container_name: ruoyi–redis
restart: unless–stopped
command: redis–server ––appendonly yes ––requirepass "" # 开启持久化,关闭密码(生产环境建议设置密码)
ports:
– "6379:6379" # 端口映射:宿主机6379 -> 容器6379
volumes:
– redis_data:/data # 数据卷:持久化Redis数据
networks:
– ruoyi–network
# 3. 若依后端应用服务
ruoyi:
build: . # 基于当前目录的Dockerfile构建镜像
container_name: ruoyi–app
restart: always # 始终重启(包括服务器重启)
depends_on:
# 依赖条件:MySQL健康检查通过、Redis启动完成后,再启动若依
mysql:
condition: service_healthy
redis:
condition: service_started
ports:
– "8080:8080" # 端口映射:宿主机8080 -> 容器8080
networks:
– ruoyi–network # 加入自定义网络,与MySQL/Redis互通
volumes:
– ./ruoyi/uploadPath:/ruoyi/uploadPath # 可选:挂载上传目录到宿主机,持久化上传文件
# 数据卷定义(持久化数据,容器删除后数据不丢失)
volumes:
mysql_data: # MySQL数据卷
redis_data: # Redis数据卷
# 自定义网络(隔离若依相关服务,避免与其他容器冲突)
networks:
ruoyi-network:
driver: bridge
优化说明
- 补充了 MySQL 健康检查的密码参数(原配置缺失,会导致检查失败);
- 新增若依上传目录的宿主机挂载(可选),避免容器删除后上传文件丢失;
- 移除了未使用的 upload_data 数据卷(原配置定义但未使用,避免冗余);
- 增加了配置注释,便于理解每个参数的作用。
步骤 3:修改项目配置文件
调整若依后端 application.yml(或 application-druid.yml)中的数据库、Redis 连接配置,将 localhost 改为容器名称(Docker 网络内可通过容器名访问)。
核心配置修改
# 数据源配置
spring:
datasource:
druid:
master:
url: jdbc:mysql://mysql:3306/ry–vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password # 需与docker-compose中MYSQL_ROOT_PASSWORD一致
# Redis配置
redis:
host: redis # 替换localhost为redis(容器名)
port: 6379
password: "" # 需与docker-compose中Redis密码一致(此处为空)
database: 0
步骤 4:打包项目 Jar 包
在项目根目录执行 Maven 命令,编译并打包生成 Jar 包:
# 清理旧编译文件,打包(跳过测试,加快速度)
mvn clean package -DskipTests
打包完成后,Jar 包会生成在 target/ 目录下(如 ruoyi-admin.jar)。
步骤 5:执行 Docker Compose 部署
在项目根目录执行以下命令,启动所有服务:
# 构建并启动容器(-d 后台运行)
docker-compose up -d –build
# 查看容器运行状态
docker-compose ps
# 查看若依应用日志(排查启动异常)
docker-compose logs -f ruoyi
步骤 6:验证部署是否成功
项目目录结构
├── doc/ # 可选:项目文档
├── mysql/
│ ├── conf/ # 可选:MySQL自定义配置文件
│ └── init/ # MySQL初始化SQL(容器启动时自动执行)
│ └── ry-vue.sql # 若依初始化脚本
├── ruoyi/
│ └── uploadPath/ # 可选:宿主机挂载的上传目录
├── Dockerfile # 若依应用镜像构建文件
├── docker-compose.yml # 服务编排文件
└── target/
└── ruoyi-admin.jar # Maven打包后的Jar包



