当前位置: 首页 > news >正文

win11本地Docker部署腾讯云Docker部署若依前后端分离版

原始教程为部署若依单体版,原始教程视频地址,文档地址。
本文基于原教程部署若依前后端分离版,码云地址:https://gitee.com/y_project/RuoYi-Vue
基于docker部署mysql、nginx-vue、redis、springboot四个容器,并对容器进行编排,支持一键部署。
云服务器准备:博主使用腾讯云4U-4G

1、win11本地部署

1-1、docker环境准备

win11安装docker.desktop

去官网下载win版
在这里插入图片描述

win11安装WSL

去官网选择最新版本下载
在这里插入图片描述
安装完后需重启系统

win11使用docker无法下载镜像解决方案
Settings–>Docker Engine修改配置如下,Apply & restart

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buildkit": true},"registry-mirrors": ["https://docker.hpcloud.cloud","https://docker.m.daocloud.io","https://docker.unsee.tech","https://docker.1panel.live","http://mirrors.ustc.edu.cn","https://docker.chenby.cn","http://mirror.azure.cn","https://dockerpull.org","https://dockerhub.icu","https://hub.rat.dev"]
}

1-2、二进制包准备

主要用于测试构建自己的前后端镜像

前端修改&打包

在前端文件夹ruoyi-ui下新增Dockerfile.yml配置

FROM nginx:1.22  # 指定基础镜像
COPY dist /usr/share/nginx/html # 将本地的 dist 目录(Vue 项目构建后的静态文件)复制到容器内的 /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf # 将自定义的 Nginx 配置文件复制到容器内
EXPOSE 80 # 暴露容器的 80 端口
CMD ["nginx", "-g", "daemon off;"] # 以前台模式启动 Nginx

新增nginx配置

server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html;try_files $uri $uri/ /index.html; # 支持 Vue Router history 模式}# 代理 /prod-api/ 到后端服务(端口 8848)location /prod-api/ {proxy_pass   http://ruoyi-backend:8848/;  # 注意结尾的 `/`(重要!)如果前后端服务都运行在 Docker 中,backend 是后端容器的服务名称,非docker环境请替换为实际的后端服务地址和端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 可选:重写路径(如果后端不需要 /prod-api/ 前缀)# rewrite ^/prod-api/(.*)$ /$1 break;}
}
# 构建生产环境
npm run build:prod

构建前端docker镜像

 # -f申明需要运行的Dockerfile.yml文件 -t的作用:给镜像命名和打标签,方便后续使用
docker build -f .\Dockerfile.yml -t ruoyi-ui .

单独运行前端镜像测试:

docker run -d -p 8080:80 --name my-ruoyi-ui ruoyi-ui

查看运行日志

docker logs -f my-ruoyi-ui

重新打包

# 停止容器
docker stop my-ruoyi-ui
# 删除容器
docker rm my-ruoyi-ui
# 删除镜像
docker rmi ruoyi-ui
# 重新构建镜像
docker build -f .\Dockerfile.yml -t ruoyi-ui .
# 启动镜像,申明网络为ruoyi-net
docker run -d -p 8080:80 --network ruoyi-net --name my-ruoyi-ui ruoyi-ui

后端修改&打包

docker下载jdk

docker pull openjdk:8-jdk

ruoyi-admin包下新增Dockerfile.yml配置:

FROM openjdk:8-jdk
WORKDIR /app
COPY target/ruoyi-admin.jar .
CMD [ "java", "-jar", "ruoyi-admin.jar" ]
EXPOSE 8848

构建后端端docker镜像

 # -f申明需要运行的Dockerfile.yml文件 -t的作用:给镜像命名和打标签,方便后续使用
docker build -f .\Dockerfile.yml -t ruoyi-server .

运行后端镜像

docker run -d -p 8848:8848 --name ruoyi-backend ruoyi-server

临时使用测试环境配置启动(此处开发环境连接本地redis和mysql)

docker run -d -p 8848:8848 -e SPRING_PROFILES_ACTIVE=dev --network ruoyi-net --name ruoyi-backend ruoyi-server
重新打包
```bash
# 停止容器
docker stop ruoyi-backend
# 删除容器
docker rm ruoyi-backend
# 删除镜像
docker rmi ruoyi-server
# 重新构建镜像
docker build -f .\Dockerfile.yml -t ruoyi-server .
# 启动镜像,申明网络为ruoyi-net
docker run -d -p 8848:8848 -e SPRING_PROFILES_ACTIVE=dev --network ruoyi-net --name ruoyi-backend ruoyi-server

本地开发机器运行测试

# 确保容器全部启动
PS F:\Development-files\deploy-demo\RuoYi-Vue\ruoyi-ui> docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                    NAMES
42b37c47246e   ruoyi-ui       "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp     my-ruoyi-ui
d39ff3341588   ruoyi-server   "java -jar ruoyi-adm…"   5 hours ago         Up 5 hours         0.0.0.0:8848->8848/tcp   ruoyi-backend

访问测试:
在这里插入图片描述

2、腾讯云Docker部署

2-1、docker安装

sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

下面验收基于docker手动安装mysql 5.7 redis7,用于后续编写docker-compose参考用

docker创建网络和存储卷

docker network create ruoyi-net
# mysql存储卷
docker volume create ruoyi-data
# redis存储卷
docker volume create ruoyi-redis-data

docker创建自定义网络和存储卷有什么作用?
自定义网络:容器可以通过服务名称直接通信
存储卷:数据持久化&共享配置数据

docker安装mysql 5.7

拉取&启动mysql镜像
拉取mysql5.7镜像,在启动容器时指定容器名称:--name,网络:--network,端口映射:-p 3306:3306、密码:-e MYSQL_ROOT_PASSWORD、数据库:-e MYSQL_DATABASE、附加配置-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro 、初始化sql:v /home/app/sql:/docker-entrypoint-initdb.d、数据存储卷-v ruoyi-data:/var/lib/mysql。

docker pull mysql:5.7docker run -d \--name ruoyi-db \--network ruoyi-net \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=123456 \-e MYSQL_DATABASE=ry-vue \-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \-v /home/app/sql:/docker-entrypoint-initdb.d \-v ruoyi-data:/var/lib/mysql \mysql:5.7

若需用docker重新安装mysql

## 停止mysql容器
docker stop ruoyi-db
## 删除mysql容器
docker rm ruoyi-db
## 删除卷
docker volume rm ruoyi-data
## 新增卷
docker volume create ruoyi-data
## 验证卷是否成功
docker volume inspect ruoyi-data
## 重新创建docker容器&启动
docker run -d \--name ruoyi-db \--network ruoyi-net \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=123456 \-e MYSQL_DATABASE=ry-vue \-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \-v /home/app/sql:/docker-entrypoint-initdb.d \-v ruoyi-data:/var/lib/mysql \mysql:5.7

使用Navicat验证docker安装成功(使用账号:ruoyi-db,密码:123456进行登录):
在这里插入图片描述

docker安装redis7

拉取&启动redis

docker pull redis:7docker run -d \--name ruoyi-redis \--network ruoyi-net \-v ruoyi-redis-data:/data \-p 6379:6379 \redis:7 \redis-server --appendonly yes

2-2、准备docker-compose

删除之前创建的容器和卷

docker stop ruoyi-db ruoyi-redi
docker volume rm ruoyi-data ruoyi-redis-data

参考二进制包准备以及docker安装mysql&redis,以及菜鸟教程Docker Compose、以及docker compose容器编排

# docker-compose.yml
services:# 若依后端服务ruoyi-server:image: openjdk:8-jrecontainer_name: ruoyi-backendrestart: alwaysports:- "8848:8848"volumes:- /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jarcommand: java -jar /usr/local/src/ruoyi-admin.jarhealthcheck: # 健康检查配置test: [ "CMD", "curl", "-f", "http://localhost:8848" ]interval: 10stimeout: 5sretries: 5start_period: 10snetworks:- ruoyi-netdepends_on: # 依赖其他服务,注意定义为服务名称而不是容器名称ruoyi-db:condition: service_healthyruoyi-redis:condition: service_healthy# 若依前端服务ruoyi-nginx:image: nginx:1.22container_name: ruoyi-nginxrestart: alwaysports:- "80:80"volumes:- /home/app/dist:/usr/share/nginx/html- /home/app/nginx.conf:/etc/nginx/conf.d/default.confdepends_on:ruoyi-server:condition: service_healthynetworks:- ruoyi-net# 若依mysqlruoyi-db:image: mysql:5.7container_name: ruoyi-dbenvironment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=ry-vuecommand: ["--character-set-server=utf8mb4","--collation-server=utf8mb4_general_ci","--skip-character-set-client-handshake"]healthcheck:test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ]interval: 10stimeout: 5sretries: 5start_period: 10sports:- "3306:3306"volumes:- /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro- /home/app/sql:/docker-entrypoint-initdb.d- ruoyi-data:/var/lib/mysqlnetworks:- ruoyi-net# 若依redisruoyi-redis:image: redis:7container_name: ruoyi-redisnetworks:- ruoyi-netports:- "6379:6379"volumes:- ruoyi-redis-data:/datacommand: redis-server --appendonly yeshealthcheck:test: [ "CMD", "redis-cli", "ping" ]interval: 10stimeout: 5sretries: 3start_period: 5s
volumes:ruoyi-data:name: ruoyi-dataruoyi-redis-data:name: ruoyi-redis-datanetworks:ruoyi-net:

2-3、二进制文件准备

初始化脚本

/home/app/sql中新增初始化sql,将若依的的初始化脚本移动到/home/app/sql
在这里插入图片描述
补充初始化脚本init.sql,用于创建远程访问账号,也转移至/home/app/sql

-- 创建用户 'ruoyi-db',密码 '123456',并允许从任何主机('%')访问
CREATE USER 'ruoyi-db'@'%' IDENTIFIED BY '123456';
-- 授予所有数据库的所有权限(生产环境建议缩小权限范围)
GRANT ALL PRIVILEGES ON *.* TO 'ruoyi-db'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;

初始化mysql配置

创建附加的mysql配置:

mkdir -p /home/mysql
vi mysql.cnf
## 补充如下配置
[mysqld]
bind-address=0.0.0.0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'[client]
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4

初始化nginx配置

/home/app中新增nginx.conf

server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html;try_files $uri $uri/ /index.html; # 支持 Vue Router history 模式}# 代理 /prod-api/ 到后端服务(端口 8848)location /prod-api/ {proxy_pass   http://ruoyi-backend:8848/;  # 注意结尾的 `/`(重要!)如果前后端服务都运行在 Docker 中,backend 是后端容器的服务名称,非docker环境请替换为实际的后端服务地址和端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 可选:重写路径(如果后端不需要 /prod-api/ 前缀)# rewrite ^/prod-api/(.*)$ /$1 break;}
}

前后端打包文件压缩&上传&解压

/home/app文件夹中
在这里插入图片描述

移动docker-compose文件至云服务器

/home/app文件夹中
在这里插入图片描述

2-4、执行docker-compose进行部署

执行docker compose up -d部署4个容器

[root@VM-12-11-opencloudos app]# docker compose up -d
[+] Running 5/5✔ Network app_ruoyi-net    Created                                                                     0.1s ✔ Container ruoyi-redis    Healthy                                                                     5.8s ✔ Container ruoyi-db       Healthy                                                                     5.8s ✔ Container ruoyi-backend  Healthy                                                                    26.5s ✔ Container ruoyi-nginx    Started 

访问云服务器测试 √
在这里插入图片描述
重新部署容器:

# 删除容器
docker compose down
# 删除mysql卷(不删除可能会导致mysql运行失败)
docker volume rm ruoyi-data
# 部署容器
docker compose up -d

docker-compose其余指令:

# 启动/停止服务
docker compose start/stop
# 停止并删除容器,不会删除存储卷volume
docker compose down

注意:需移动到docker-compose.yml所在文件夹

http://www.xdnf.cn/news/968203.html

相关文章:

  • 解析 Go 语言中 time 包在实现定时任务时的易错点
  • Zustand 状态管理库:极简而强大的解决方案
  • c++中cout的用法 标准输出流cout使用指南
  • Linux操作系统之文件系统上
  • 编程风格良好的条件比较语句
  • 基于NOMP和降维字典的杂波空时功率谱稀疏恢复算法matlab仿真
  • PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
  • 解决helm Doris重启后由于root密码修改导致加入集群不成功的问题
  • python数据结构和算法(3)
  • 智慧医疗能源事业线深度画像分析(上)
  • 项目四.高可用集群_ansible
  • 【OSG学习笔记】Day 18: 碰撞检测与物理交互
  • opencv RGB图像转灰度图
  • yolo11-seg 推理测试infer
  • Java正则表达式:贪婪、懒惰与独占模式解析
  • Tunna工具实战:基于HTTP隧道的RDP端口转发技术
  • java 数据结构-HashMap
  • 睡岗检测算法AI智能分析网关V4全场景智能守护,筑牢安全效率防线
  • golang -- unsafe 包
  • gitlab-runner 如何配置使用 Overwrite generated pod specifications
  • 图注意力卷积神经网络GAT在无线通信网络拓扑推理中的应用
  • 第四章 软件需求工程
  • 上位机开发:C# 读写 PLC 数据块数据
  • CppCon 2015 学习:Racing the File System
  • “详规一张图”——上海土地利用数据
  • 《大模型RAG进阶实战训练营毕业总结》
  • 多模态2025:技术路线“神仙打架”,视频生成冲上云霄
  • 雷卯针对易百纳海鸥派海思SD3403 SS928智能视觉AI视觉国产化4K视频开发板防雷防静电方案
  • 香橙派3B学习笔记9:Linux基础gcc/g++编译__C/C++中动态链接库(.so)的编译与使用
  • Vim 匹配跳转与搜索命令完整学习笔记