一、代码拉取
环境准备,先去若依官网拉取前后端代码
RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
gitee上拉取下来就能获取到
代码结构如上,其中ruoyi-vue是前端代码。
其中sql打开执行一下,创建出需要的基础数据库并导入数据(数据库一般不直接放在docker中,自己看情况确定)也可以选择在docker中部署mysql和redis
如果选择在docker中部署的话,则把配置文件中的ip地址换成对应的容器名称,如localhost换成mysql
二、所需环境搭建
1、创建项目的网络环境
bash
docker network create ry-net
默认就是桥接的
创建文件夹,用于存放文件(如mysql的Dockerfile等)
bash
cd /usr/local
mkdir ruoyi-admin
cd ruoyi-admin
mkdir mysql
mkdir nginx
mkdir ry-vue
2、Mysql
在docker中部署mysql(如果使用docker compose一键部署的话,忽略掉这步)
进入mysql目录,上传若依文件中的sql文件,

构建Dockerfile文件,用于执行初始化脚本等操作
bash
vim Dockerfile
bash
FROM mysql
# 作者信息
LABEL maintainer="JHA"
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 复制字符集配置文件
COPY my.cnf /etc/mysql/conf.d/
# 创建初始化脚本目录
RUN mkdir -p /docker-entrypoint-initdb.d
# 复制 SQL 脚本到容器
COPY quartz.sql /docker-entrypoint-initdb.d/
COPY ry_20250522.sql /docker-entrypoint-initdb.d/
WORKDIR /docker-entrypoint-initdb.d
# 设置权限
RUN chmod 644 /docker-entrypoint-initdb.d/*.sql
# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=954321
ENV MYSQL_DATABASE=ry-vue
ENV MYSQL_USER=ruoyi
ENV MYSQL_PASSWORD=954321
# 暴露端口
EXPOSE 3306
创建镜像
bash
docker build -t my-mysql:1.0 .
执行命令,用于创建mysql容器
bash
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD=954321 \
-e MYSQL_DATABASE=ry-vue \
-e TZ=Asia/Shanghai \
-v /docker/mysql/log:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
--network ry-net \
my-mysql:1.0
如果返回容器id则说明创建成功,查看容器 docker ps

可以看到mysql容器就创建成功了,使用工具进行测试,看是否能够正常使用


看到ry-vue数据库也创建成功了,说明我们的mysql容器就创建好了,
3、redis
在docker中部署redis(如果使用docker compose一键部署的话,忽略掉这步)
执行命令,用于创建redis容器,这里我是用宿主机的6380来映射容器内的6379,因为我这边的宿主机的6379被占用了,这个不用管,我们的配置文件端口还是6379,这个6380是给宿主机用的,通过宿主机ip:6380访问,我们容器内走的还是6379
bash
docker run --name redis \
-p 6380:6379 \
-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /docker/redis/data:/data \
-v /docker/redis/logs:/logs \
--network ry-net \
-d --restart=always redis:7.4.0 redis-server /etc/redis/redis.conf
docker ps 进行验证 看看是否启动
4、jdk8环境准备
这个看情况,我是因为镜像下载下来不好用,所以我选择自己封一个jdk8的环境
1、基础环境拉取
首先,拉取一个linux镜像,我选择centos7,看个人选择
bash
docker pull centos:7
2、下载jdk
建议从官网下载: Java Downloads | Oracle
下滑找到jdk8,linux版本的,可以看到有很多版本,我们需要根据我们容器的内核版本来选择,看看是64位还是32位,使用
bash
uname -m
如果返回的是x86_64 ,那么就是64位的,下载

32位下载

创建文件夹,用来存储下载好的jdk文件
bash
mkdir -p /usr/local/jdk
cd /usr/local/jdk
3、将下载好的文件上传到宿主机,
然后解压文件夹
bash
tar -zxvf jdk-8u471-linux-x64.tar.gz
4、创建Dockerfile
bash
vim Dockerfile
内容如下:
bash
FROM centos:7
MAINTAINER JHA
RUN mkdir /usr/local/jdk
WORKDIR /usr/local/jdk
ADD jdk-8u471-linux-x64.tar.gz /usr/local/jdk
# 设置环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_471
ENV JRE_HOME $JAVA_HOME/jre
ENV PATH $JAVA_HOME/bin:$PATH
如果下载的jdk版本号不一样,对应修改一下版本号就行,做完这一切之后文件目录如下:

5、构建jdk1.8镜像
bash
docker build -t jdk1.8 .
bash
[root@192 jdk]# docker build -t jdk1.8 .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/
Sending build context to Docker daemon 262.4MB
Step 1/8 : FROM centos:7
---> eeb6ee3f44bd
Step 2/8 : MAINTAINER 123
---> Running in 881b5d5f5753
---> Removed intermediate container 881b5d5f5753
---> cac69162c17a
Step 3/8 : RUN mkdir /usr/local/jdk
---> Running in 7da920a36511
---> Removed intermediate container 7da920a36511
---> 1e128ef9cab1
Step 4/8 : WORKDIR /usr/local/jdk
---> Running in b9bc63fe6bfb
---> Removed intermediate container b9bc63fe6bfb
---> fee06b7f5093
Step 5/8 : ADD jdk-8u471-linux-x64.tar.gz /usr/local/jdk
---> 5a5acaa09ab4
Step 6/8 : ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_471
---> Running in 998188ee3502
---> Removed intermediate container 998188ee3502
---> 42368829bd1e
Step 7/8 : ENV JRE_HOME $JAVA_HOME/jre
---> Running in 6058914f937e
---> Removed intermediate container 6058914f937e
---> 6cbd6c77530f
Step 8/8 : ENV PATH $JAVA_HOME/bin:$PATH
---> Running in 2a3922b783a2
---> Removed intermediate container 2a3922b783a2
---> b9f455b69823
Successfully built b9f455b69823
Successfully tagged jdk1.8:latest
[root@192 jdk]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk1.8 latest b9f455b69823 5 seconds ago 387MB
nginx latest 058f4935d1cb 9 days ago 152MB
mysql latest 00f3a44f3de1 5 weeks ago 932MB
redis 7.4.0 7e49ed81b42b 17 months ago 117MB
mysql 9.0.1 c757d623b190 17 months ago 586MB
centos 7 eeb6ee3f44bd 4 years ago 204MB
可以看到已经有了jdk1.8的镜像了,我们运行然后测试看看
6、测试jdk1.8镜像
创建容器并进行测试
bash
docker run -di --name=jdk1.8 jdk1.8
测试是否存在java环境
bash
docker exec -it 0868ba1068b08fe0a841f7b5b16a8487c0f77f915bbc4e00b7b3e141f5fba36d /bin/bash
执行
bash
java -version
返回
bash
java version "1.8.0_471"
Java(TM) SE Runtime Environment (build 1.8.0_471-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.471-b09, mixed mode)
[root@0868ba1068b0 jdk]#
这样就说明成功构建了jdk8环境
三、后端部署
1、后端打包
找到主目录进行打包,打包后的文件再ruoyi-admin的target中

可以选择使用maven进行打包
构建完成之后在admin中的target下

2、上传文件
宿主机中创建文件,用于存储后端文件
bash
cd /usr/local/
mkdir ry-vue
cd ry-vue
将打包好的jar包上传到宿主机中
3、创建Dockerfile
bash
vim Dockerfile
bash
# 使用自定义 JDK 1.8 镜像
FROM jdk1.8:latest
# 设置工作目录
WORKDIR /app
# 复制 JAR 文件到容器
COPY ruoyi-admin.jar /app/ruoyi-admin.jar
# 暴露应用端口
EXPOSE 8080
# 设置启动命令
ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "/app/ruoyi-admin.jar"]
也可以使用Docker的官方镜像(推荐)
bash
# 使用自定义 JDK 1.8 镜像
FROM openjdk:8u121-jdk
# 设置工作目录
WORKDIR /app
# 复制 JAR 文件到容器
COPY ruoyi-admin.jar /app/ruoyi-admin.jar
# 暴露应用端口
EXPOSE 8080
# 设置启动命令
ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "/app/ruoyi-admin.jar"]
4、构建运行镜像
bash
docker build -t ruoyi-admin:1.0 .
返回
bash
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/
Sending build context to Docker daemon 88.7MB
Step 1/5 : FROM jdk1.8:latest
---> b9f455b69823
Step 2/5 : WORKDIR /app
---> Running in 3f4ed62db261
---> Removed intermediate container 3f4ed62db261
---> 8ba1d89a4df0
Step 3/5 : COPY ruoyi-admin.jar /app/ruoyi-admin.jar
---> 43f170cdcc3f
Step 4/5 : EXPOSE 8080
---> Running in 31388134adca
---> Removed intermediate container 31388134adca
---> c2b8395b7855
Step 5/5 : ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "/app/ruoyi-admin.jar"]
---> Running in 6663957b0271
---> Removed intermediate container 6663957b0271
---> b42e9bd633d0
Successfully built b42e9bd633d0
Successfully tagged ruoyi-admin:1.0
这样就成功构建了后端的运行镜像,创建容易即可直接运行了
5、运行后端接口
bash
docker run -d --name ruoyi-admin \
-p 8080:8080 \
--restart=always \
-v /usr/local/ruoyi-admin/ry-vue/logs:/app/logs \
-v /usr/local/ruoyi-admin/ry-vue/ruoyi-admin.jar:/app/ruoyi-admin.jar \
--network ry-net \
ruoyi-admin:1.0
5、测试运行状态
我们可以通过接口工具调用login接口,用户密码默认为admin,admin123

可以看到,成功调用到了接口,这样子,后端就部署成功了!
四、前端部署
1、前端打包
我们这里采用的是nginx进行部署
1、文件生成
使用vscode打开前端文件ruoyi-ui
执行 npm安装命令
bash
npm install --registry=https://registry.npmmirror.com
执行npm打包命令
bash
npm run build:prod
打包后会生成一个dist文件夹
2、文件上传
创建资源存放目录
bash
cd /usr/local
mkdir nginx/data
cd data
mkdir conf
mkdir html
将dist文件夹上传到html中
在**/docker/nginx/data/conf** 创建 nginx.conf文件
bash
vim nginx.conf
bash
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.1.130; #改成服务器的ip
root /usr/share/nginx/html;
index index.html;
# 静态文件服务及前端路由支持(history 模式)
location / {
try_files $uri $uri/ /index.html;
}
# API代理:将 /prod-api 前缀的请求转发到后端服务器
location /prod-api/ {
# 如果需要移除前缀,使用 rewrite 去除前缀后再转发至后端根路径
rewrite ^/prod-api/(.*)$ /$1 break;
proxy_pass http://ruoyi-admin:8080; #配置后端服务的容器名
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
2、运行nginx
bash
docker run -d --name nginx\
-p 80:80 \
--restart=always \
-v /usr/local/ruoyi-admin/nginx/data/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/ruoyi-admin/nginx/data/html/dist:/usr/share/nginx/html \
--network ry-net\
nginx
我们直接访问ip:80就可以访问到页面了

扩展Docker Compose一键部署
文件放在同一个目录下,如下

新建一个docker-compose文件
bash
vim docker-compose
bash
services:
mysql:
container_name: mysql
hostname: mysql
build:
context: ./mysql
dockerfile: Dockerfile
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 954321
MYSQL_DATABASE: ry-vue
MYSQL_USER: ruoyi
MYSQL_PASSWORD: 954321
TZ: Asia/Shanghai
volumes:
- /docker/mysql-data:/var/lib/mysql
- /docker/mysql/conf:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
networks:
ry-net:
aliases:
- mysql
restart: always
command: [
'mysqld',
'--innodb-buffer-pool-size=80M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_general_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
redis:
container_name: redis
restart: always
image: redis:7.4.0
ports:
- "6380:6379"
volumes:
- /docker/redis/conf/redis.conf:/etc/redis/redis.conf
- /docker/redis/data:/data
- /docker/redis/logs:/logs
command: redis-server /etc/redis/redis.conf
networks:
ry-net:
aliases:
- redis
nginx:
container_name: nginx
image: nginx
restart: always
ports:
- "80:80"
volumes:
- /usr/local/ruoyi-admin/nginx/data/conf/nginx.conf:/etc/nginx/nginx.conf
- /usr/local/ruoyi-admin/nginx/data/html/dist:/usr/share/nginx/html
networks:
ry-net:
aliases:
- nginx
depends_on:
- ruoyi-admin
ruoyi-admin:
container_name: ruoyi-admin
restart: always
build:
context: ./ry-vue
dockerfile: Dockerfile
ports:
- "8080:8080"
volumes:
- /usr/local/ruoyi-admin/ry-vue/logs:/app/logs
- /usr/local/ruoyi-admin/ry-vue/ruoyi-admin.jar:/app/ruoyi-admin.jar
networks:
ry-net:
aliases:
- ruoyi-admin
depends_on:
- mysql
- redis
environment:
- TZ=Asia/Shanghai
networks:
ry-net:
external: true
name: ry-net
然后直接运行
bash
docker compose up -d
访问对应的ip:端口
就能看到页面了
