Docker容器化部署若依微服务ruoyi-cloud项目

系统环境

图片.png

接下来的内容以 Ubuntu 22.04.1 操作系统为例。

下载安装Docker

Ubuntu

hi@hi-IdeaCentre-GeekPro-15ICK:~$ sudo su
[sudo] hi 的密码: 
root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker ps
找不到命令 “docker”,但可以通过以下软件包安装它:
apt install docker.io      # version 24.0.5-0ubuntu1~22.04.1, or
apt install podman-docker  # version 3.4.4+ds1-1ubuntu1.22.04.2root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker-compose 
找不到命令 “docker-compose”,但可以通过以下软件包安装它:
apt install docker-compose

验证版本信息

root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker -v
Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker-compose -version
docker-compose version 1.29.2, build unknown

CentOS7

yum install -y yum-utils # yum工具集
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast # yum自动检测最快的安装源
yum install -y docker-ce
systemctl start docker 
docker version
[root@docker ~]# docker -v
Docker version 24.0.6, build ed223bc
docker pull hello-world
docker run hello-world

Note: 在 CentOS7 上使用上述 yum 方式安装的 Docker ,默认自带了Docker Compose Plugin,不过命令是 docker compose

[root@docker ~]# docker compose version
Docker Compose version v2.21.0

Docker基本操作

基础操作

  • docker pull
  • docker run
  • docker images
  • docker ps
  • docker logs
  • docker start
  • docker stop
  • docker restart
  • docker rmi
  • docker rm
  • docker exec
  • docker network
  • docker inspect
  • docker build

命令的具体用法可参考:云原生之容器编排实践-在CentOS7上安装使用Docker

批量操作

常用的批量操作命令:

# 停止所有运行中的容器
docker stop $(docker ps -q)# 删除所有容器
docker rm $(docker ps -aq)# 删除所有镜像
docker rmi $(docker images -aq)# 强制删除所有未被容器使用的镜像
docker image prune -a -f# 查看所有的无用卷
docker volume ls -qf dangling=true# 删除无用卷
docker volume rm $(docker volume ls -qf dangling=true)# 强制清理退出的容器快照
docker rm $(docker ps -q -f status=exited)# 清理dangling image
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

下载若依微服务项目源码

如果是下载压缩包的方式,那么先初始化为 git 项目,初始提交,再切换分支,方便做版本管理。

Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master
$ git init
Initialized empty Git repository in D:/Java/IdeaProjects/RuoYi-Cloud-master/.git/Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (master)
$ git add .Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (master)
$ git commit -m "initial commit"Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (master)
$ git checkout -b deploy
Switched to a new branch 'deploy'Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (deploy)
$ git merge master
Already up to date.

修改配置

由于生产环境与开发环境的配置不同,实际操作时,一般先切换一个分支,专门用于生产环境的配置调整。

MySQL版本

根据需要修改 MySQL 版本,我们用的是 8.0 ,对应的文件: docker/mysql/dockerfile

图片.png

修改docker-compose.yml:数据库版本、名称与密码;

对应的文件: docker/docker-compose.yml

图片.png

Note:经测试,如果遇到在不同操作系统的宿主机上或者不同版本的 Dockerdocker-compose 下, docker-entrypoint-initdb.d 目录下的 SQL 语句并没有成功执行;原因是没有执行 MySQLDockerfilebuild 操作,导致并没有将 SQL 文件 COPYdocker-entrypoint-initdb.d 目录下。解决方法有两种:

  1. 删除docker-compose.ymlMySQLimage
  2. 增加SQL文件目录的挂载至/docker-entrypoint-initdb.d目录。

图片.png

Nacos连接数据库地址

对应的文件: docker/nacos/conf/application.properties

1700276442016.jpg

Note:

  • 如果修改了docker-compose中数据库服务的服务名,那么上图中的数据库服务:ruoyi-mysql也要一并修改。
  • 另外,如果在生产环境下,发现Nacos持续报没有数据源:No Datasource Set,这时候可以尝试修改下connectTimeout的值,从1000改为10000,连接超时数据1s改为10s,这是以为网络延迟导致的Nacos无法在指定的时间内连接上MySQL

Nginx配置

对应的文件: docker/nginx/conf/nginx.conf ,根据实际服务名与端口号进行配置,我这里保持默认

图片.png

Redis配置

对应的文件: docker/redis/conf/redis.conf我这里保持默认

导出数据库脚本放到mysql/db目录

可以使用若依自带的 SQL 脚本,或者导出自己的数据库表(包含建库、建表以及Insert语句),手动放到 docker/mysql/db 下。
Note:

  • docker-entrypoint-initdb.d这个目录下的SQL或者sh文件会在数据库初始化时执行;
  • 我这里修改了数据库的名称,分别为my-cloudmy-config

修改业务服务配置文件中连接Nacos的地址

根据实际要部署到生产环境的服务,修改对应的 bootstrap.yml 文件;这里以网关服务、认证服务以及系统服务为例,将其中的127.0.0.1改为 docker-composeNacos 的服务名: ruoyi-nacos

1700290596260.jpg

扩展docker-compose配置:新增MinIO服务

docker 目录下新建一个 minio 目录,在其中新增一个 dockerfile 文件与 confdata 目录(这几个文件暂时没用,后期可用于自定义配置);然后在 docker-compose.yml 中添加 ruoyi-minio 服务。

图片.png

Note:在同一个 docker-compose.yml 中的服务启动后,默认是在同一个网络下,可以通过服务名称进行通信,因此如果这里的 minio 是单独部署,而不是配置在 docker-compose.yml 中,那么无法通过服务名称 ruoyi-minio 连接。

修改Nacos配置中心的数据库、缓存

作为配置中心, Nacos 中存放了各个服务的核心配置,eg:数据库连接、缓存、对象存储等,所以等一会儿 MySQLNacos 启动后,在业务服务启动之前,需要先将Nacos中的以下内容改为服务名称;这里以网关服务、认证服务以及系统服务为例。

  • Redis的localhost改为ruoyi-redis;
  • MySQL的localhost改为ruoyi-mysql;
  • 数据库名称与用户名、密码根据实际修改即可。

图片.png

编译打包部署

前端

在项目根目录( package.json 所在目录)执行打包命令:

npm run build:prod

会生成 dist 的静态资源目录;我这里因为前后端分离开发,打包后直接将dist目录放到 docker/nginx/html/ 下。

后端

在项目根目录(最外层pom.xml所在目录)执行打包命令,这里为加快打包进度,跳过了单元测试:

mvn clean package -Dmaven.test.skip=true

会在各模块或者微服务的 target 目录下生成 模块名.jar 的可执行文件。

Copy

由于微服务较多,若依提供了复制脚本,将不同的微服务打包后的 jar 复制到待部署的 docker 目录下;根据需要修改 copy.sh 的内容,建议使用 bash

#!/bin/sh# 复制项目的文件到对应docker路径,便于一键生成镜像。
usage() {echo "Usage: sh copy.sh"exit 1
}# copy jar
echo "begin copy ruoyi-gateway "
cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jarecho "begin copy ruoyi-auth "
cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jarecho "begin copy ruoyi-modules-system "
cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar

图片.png

部署

准备好前端后端以及所有的配置文件后,可以将若依项目下的 docker 目录直接上传到服务器。

  1. 为了避免因权限问题导致部署失败,建议先赋权限(777,简单粗暴;实际生产环境可根据需要配置权限。)
chown -R root:root docker
chmod -R 777 docker
  1. 切换至docker-compose.yml所在目录
  • docker-compose -f docker-compose.yml up -d ruoyi-mysql ruoyi-redis ruoyi-nacos ruoyi-minio
  • docker-compose -f docker-compose.yml up -d ruoyi-gateway ruoyi-nginx ruoyi-auth ruoyi-modules-system
  1. 重新部署指定容器
  • docker stop ruoyi-gateway ruoyi-nginx ruoyi-auth ruoyi-modules-system
  • docker rm ruoyi-gateway ruoyi-nginx ruoyi-auth ruoyi-modules-system
  • docker rmi docker_ruoyi-gateway docker_ruoyi-auth docker_ruoyi-modules-system

验证服务

所有相关容器已正常运行。

图片.png

所有微服务已注册成功。

图片.png

前端可以正常打开登录。

图片.png

离线部署容器化的微服务

离线安装Docker

参考:CentOS7.8离线安装Docker24.0.2,离线安装gcc与g++环境

离线部署微服务

实际场景中,有时候服务器环境不允许连接外网,导致无法从镜像仓库拉取镜像;针对这种情况, Docker 提供了 saveload 命令来实现镜像的导出与导入。

  1. 导出镜像

docker save -o <file-name.tar>

  1. 导入镜像

docker load -i <file-path.tar>

  1. 验证导入的镜像

docker images

# 保存镜像
docker save redis:latest -o redis.tar
docker save mysql:8.0 -o mysql.tar
docker save nginx:latest -o nginx.tar
docker save minio/minio:latest -o minio.tar
docker save nacos/nacos-server:latest -o nacos.tar
docker save openjdk:8-jre -o openjdk.tar
docker save docker-ruoyi-gateway:latest -o docker-ruoyi-gateway.tar
docker save docker-ruoyi-auth:latest -o docker-ruoyi-auth.tar
docker save docker-ruoyi-modules-system:latest -o docker-ruoyi-modules-system.tar# 加载镜像
docker load -i redis.tar
docker load -i minio.tar 
docker load -i mysql.tar 
docker load -i nacos.tar 
docker load -i nginx.tar
docker load -i openjdk.tar
docker load -i docker-ruoyi-gateway.tar
docker load -i docker-ruoyi-auth.tar 
docker load -i docker-ruoyi-modules-system.tar 

离线导入数据库

可以通过 MySQL 数据库的 source 命令将 SQL 语句(建库、建表以及Insert语句)导入目标库。

Note:离线导入镜像的局限性:在 X86_64 平台上制作的 Image 不可在 ARM 平台(M1 视同为 ARM)上使用,反之亦然。

Docker可视化管理工具

Windows上的Docker Desktop

主要用于开发或者测试环境,略。。

IDEA连接Docker服务

参考:云原生之容器编排实践-通过IDEA连接Docker服务

Portainer图形化容器管理

安装Portainer

[root@docker ~]# cd /opt/
[root@docker opt]# mkdir portainer
[root@docker opt]# docker pull portainer/portainer
[root@docker opt]# docker run -p 9000:9000 -p 8000:8000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/portainer/data:/data \
-d portainer/portainer

设置密码

1699877376740.jpg

选择环境

1699877432366.jpg

1699877454503.jpg

Dashboard

图片.png

容器管理

图片.png

查看日志

图片.png

容器详情

图片.png

进入容器

图片.png

Reference

http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线(实例分析)

Visual Studio 使用MFC 单文档工程从创建到实现绘制单一颜色直线和绘制渐变颜色的直线 本文主要从零开始创建一个MFC单文档工程然后逐步实现添加按键&#xff08;事件响应函数&#xff09;&#xff0c;最后实现单一颜色直线的绘制与渐变色直线的绘制o(&#xffe3;▽&#xffe…

【云原生】什么是 Kubernetes ?

什么是 Kubernetes &#xff1f; Kubernetes 是一个开源容器编排平台&#xff0c;管理着一系列的 主机 或者 服务器&#xff0c;它们被称作是 节点&#xff08;Node&#xff09;。 每一个节点运行了若干个相互独立的 Pod。 Pod 是 Kubernetes 中可以部署的 最小执行单元&#x…

2、Burp使用

文章目录 一、为Firefox浏览器安装数字证书二、利用Intruder模块进行暴力破解 一、为Firefox浏览器安装数字证书 &#xff08;1&#xff09;利用Firefox浏览器访问http://burp或127.0.0.1:<监听端口>&#xff0c;点击页面右上侧的“CA Certificate”处下载CA证书&#xf…

机器学习---贝叶斯网络与朴素贝叶斯

1. 贝叶斯法则 如何判定一个人是好人还是坏人&#xff1f; 当你无法准确的熟悉一个事物的本质时&#xff0c;你可以依靠与事物特定本质相关的事件出现的次数来判断 其本质属性的概率。如果你看到一个人总是做一些好事&#xff0c;那这个人就越可能是一个好人。 数学语言表达…

float和double(浮点型数据)在内存中的储存方法

作者&#xff1a;元清加油 主页&#xff1a;主页 编译环境&#xff1a;visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位&#xff0c;后面便是数值位 那么浮点数在内存中是怎么储存的呢&#xff1f;我们先来看一个例子&am…

Android WiFi的断开分析

1.wifi断开大体流程&#xff1a; 1.wifi断开 wlan-driver最先知道。 2.wlan-driver在与路由器连接的时候(未断开时), 会有周期性的beacon帧来维持连接&#xff0c;AP端一旦遇到突发事情&#xff0c;会立刻通过802.11协议的 deauth 帧/ reject 帧等 通知到 driver。 3. wlan-…

【Java程序员面试专栏 专业技能篇 】Java SE核心面试指引(四):Java新特性

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第四部分:Java新特性,子节点表示追问或同级提问 Java8新特性…

【部署运维】docker:入门到进阶

0 前言 部署运维博客系列一共有三篇&#xff1a; 拥抱开源&#xff0c;将工作中的经验分享出来&#xff0c;尽量避免新手踩坑。 【部署运维】docker&#xff1a;入门到进阶 【部署运维】kubernetes&#xff1a;容器集群管理掌握这些就够了 【部署运维】pythonredisceleryd…

快速、精确仿真高频电磁场的工具CST Studio Suite 2024版本下载与安装配置

目录 前言一、CST 2024 安装二、使用配置总结 前言 CST Studio Suite是一个集成的仿真工具套件&#xff0c;用于模拟和优化电子系统的性能。它包括多个工具和模块&#xff0c;如电磁仿真、结构仿真、热仿真、电路分析等&#xff0c;以支持从概念设计到生产部署的整个开发周期。…

Vue19 列表过滤

直接上代码 以下代码使用了两种实现方式&#xff0c;监视属性和计算属性 当能用计算属性实现时&#xff0c;推荐使用计算属性 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>列表过滤</title><script type&q…

阿里元境亮相第八届世界物联网大会,分享元计算对数字文旅的创新赋能

2023&#xff08;第八届&#xff09;世界物联网大会于11月20日在中国北京隆重开幕。联合国秘书长安东尼奥古特雷斯在开幕式发表书面致辞时特别提到&#xff1a;“在一个相互连接的世界&#xff0c;你们的主题‘新物联、新经济、新时代’是数字技术影响力的见证”。 11月21日上午…

Linux系统常用指令大全(图文详解)

目录 前言 一、UNIX的登录与退出 1、登录 &#xff08;1&#xff09;执行格式&#xff1a; &#xff08;2&#xff09;步骤 2、退出 二、UNIX命令格式 三、常用命令 1、目录操作 &#xff08;1&#xff09;显示目录文件 ls &#xff08;2&#xff09;建新目录 …

Android仿 美团 / 饿了么,店铺详情页功能

前言 UI有所不同&#xff0c;但功能差不多&#xff0c;商品添加购物车功能 正在写&#xff0c;写完会提交仓库。 页面主要由&#xff1a;MagicIndicator ViewPager2 Fragment CoordinatorLayout NestedScrollView RecyclerView实现。 效果图一&#xff1a;左右RecyclerV…

微机课设--汇编语言在51单片机上写一个四位十进制加法器

代码如下 KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HSCANLED EQU 37HS_DAT EQU 38HD_DAT EQU 39HR_DATL EQU 3AHR_DATH EQU 3BH CALFLAG EQU 3CHFLAG BIT 00HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0D8HMOV TL0,…

java中BigDecimal的介绍及使用(二)

系列文章目录 java中BigDecimal的介绍及使用&#xff0c;BigDecimal格式化&#xff0c;BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…

Linux网络——网络层

目录 一.IP协议&#xff08;IPv4&#xff09; 二.子网划分 三.特殊的IP地址 四.IP地址的数量限制 五.私有IP地址和公网IP地址 六.路由 七.分片 一.IP协议&#xff08;IPv4&#xff09; IP协议&#xff1a;提供一种能力使得数据从一个主机发送到另一个主机的能力。 TCP协…

深度学习第1天:深度学习入门-Keras与典型神经网络结构

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 神经网络 介绍 结构 基本要素 Keras 介绍 导入 定义网络 模型训练 前馈神经网络 特点 常见类型 代码示例 反馈神经网络 特点 …

JDK、JRE、JVM的特点和关联

Java 的三个重要的概念是 JDK&#xff08;Java Development Kit&#xff09;、JRE&#xff08;Java Runtime Environment&#xff09;和 JVM&#xff08;Java Virtual Machine&#xff09;。它们之间有着密切的关联&#xff0c;同时又有不同的职责和特点。 JDK&#xff08;Java…

laravel实现发送邮件功能

Laravel提供了简单易用的邮件发送功能&#xff0c;使用SMTP、Mailgun、Sendmail等多种驱动程序&#xff0c;以及模板引擎将邮件内容进行渲染。 1.在项目目录.env配置email信息 MAIL_MAILERsmtp MAIL_HOSTsmtp.qq.com MAIL_PORT465 MAIL_FROM_ADDRESSuserqq.com MAIL_USERNAME…

【代码】基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法matlab

程序名称&#xff1a;基于量子粒子群算法&#xff08;QPSO&#xff09;优化LSTM的风电、负荷等时间序列预测算法 实现平台&#xff1a;matlab 代码简介&#xff1a;代码是基于QPSO-LSTM的负荷、光伏、风电等时间序列预测&#xff0c;MATLAB编写。包含LSTM&#xff08;长短时记…