基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署
一、说明
本文配置环境为VMware虚拟机(4核CPU,内存至少12GB(8GB以内会提示404错误,验证码无法显示),40GB磁盘),OS为openEuler 22.03 LTS ,虚拟机要求能联网。
二、安装docker环境
2.1 安装docker相关软件包
[root@node01 ~]# dnf -y install docker docker-compose
2.2 查看docker版本
[root@node01 ~]# docker version Client: Version: 18.09.0 EulerVersion: 18.09.0.323 API version: 1.39 Go version: go1.17.3 Git commit: 172f8da Built: Wed Apr 19 02:01:22 2023 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.09.0 EulerVersion: 18.09.0.323 API version: 1.39 (minimum version 1.12) Go version: go1.17.3 Git commit: 172f8da Built: Wed Apr 19 02:00:48 2023 OS/Arch: linux/amd64 Experimental: false
2.3 添加国内镜像源
系统默认从docker官方镜像源Docker hub拉取镜像,在国内从Docker hub拉取镜像会比较慢,而且可能因为网络原因导致拉取失败,此时就可以配置 “国内的加速器”。国内有许多的云服务商都配置了国内镜像加速器服务。
以配置华为云容器加速器为例,如下图所示,在华为云的所有服务中,找到容器中的“容器镜像服务SWR”,
点击左侧的“镜像资源”-->“镜像中心”,然后点击右上角的“镜像加速器”,打开如下图所示的窗口,并按其中的操作说明修改/etc/docker/daemon.json文件即可。
阿里云的容器加速器服务可参考帮助:Docker部署/容器加速器
注:如果要添加私有仓库,则 /etc/docker/daemon.json文件内容可参考如下(IP地址和端口号请根据自身情况修改):
{ "insecure-registries":["192.168.188.188:8888"] }
2.4 编辑/etc/sysconfig/docker配置文件
在openEuler 22.03中,系统重启后会丢失自定义的容器网络,导致容器无法重新启动。可通过配置/etc/sysconfig/docker文件,在其中加入内容:DISABLE_CRASH_FILES_DELETE=true,重启docker服务后生效。
[root@host1 ~]# vim /etc/sysconfig/docker ……此处省略文件原有内容…… DISABLE_CRASH_FILES_DELETE=true
2.5 重启docker服务并设置为开机自启动
完成上述操作后,重启docker服务,命令如下:
[root@node01 ~]# systemctl restart docker [root@node01 ~]# systemctl enable docker
三、部署分布式微服务架构Web项目实战
以下以分布式微服务架构的开源项目(https://gitee.com/y_project/RuoYi-Cloud)为例,采用docker-compos容器编排的方式进行实战训练。
根据官方文档(http://doc.ruoyi.vip/ruoyi/)说明,该项目的系统运行环境要求如下:
- JDK >= 1.8
- MySQL >= 5.7
- Maven >= 3.0
根据官方文档信息,系统模板如下:
com.ruoyi ├── ruoyi-ui // 前端框架 [80] ├── ruoyi-gateway // 网关模块 [8080] ├── ruoyi-auth // 认证中心 [9200] ├── ruoyi-api // 接口模块 │ └── ruoyi-api-system // 系统接口 ├── ruoyi-common // 通用模块 │ └── ruoyi-common-core // 核心模块 │ └── ruoyi-common-datascope // 权限范围 │ └── ruoyi-common-datasource // 多数据源 │ └── ruoyi-common-log // 日志记录 │ └── ruoyi-common-redis // 缓存服务 │ └── ruoyi-common-seata // 分布式事务 │ └── ruoyi-common-security // 安全模块 │ └── ruoyi-common-swagger // 系统接口 ├── ruoyi-modules // 业务模块 │ └── ruoyi-system // 系统模块 [9201] │ └── ruoyi-gen // 代码生成 [9202] │ └── ruoyi-job // 定时任务 [9203] │ └── ruoyi-file // 文件服务 [9300] ├── ruoyi-visual // 图形化管理模块 │ └── ruoyi-visual-monitor // 监控中心 [9100] ├──pom.xml // 公共依赖
利用docker部署该项目的部署架构如下图所示。
上图中,各容器实例提供的服务简介绍如下:
- ruoyi-nginx容器实例提供HTTP反向代理和Web服务
- ruoyi-gateway容器实例网关服务
- ruoyi-auth容器实例提供认证服务
- ruoyi-nacos容器实例提供注册中心和配置中心服务
- ruoyi-modules-XXX容器实例提供系统业务功能服务
- ruoyi-mysql容器实例提供数据库服务
- ruoyi-redis容器实例提供缓存和权限认证服务
- ruoyi-visual-monitor容器实例提供系统服务状态监控服务
3.1 准备工作
3.1.1 清空环境
为避免干扰,建议清除所有已有的镜像和容器,确保执行【docker ps -a】和【docker images】命令的输出均为空,如下图所示。
[root@node01 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@node01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
3.1.2 下载源码
若依开源项目(前后端分离版本)源码下载地址:https://gitee.com/y_project/RuoYi-Cloud
下载该项目源码的ZIP压缩包。
解压后的文件和目录如下:
3.1.3 修改配置文件
3.1.3.1 修改ruoyi-auth配置文件
编辑源码目录\ruoyi-auth\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名称,如下所示。
3.1.3.2 修改ruoyi-gateway配置文件
编辑源码目录\ruoyi-gateway\src\main\resources下的bootstrap.yml配置文件,将其中端口号为8848前面的127.0.0.1替换成nacos容器名,端口号为8718前面的127.0.0.1替换成服务器IP地址,端口号更改为服务器对外映射端口(如果有的话),如下所示。
3.1.3.3 修改ruoyi-modules-file配置文件
编辑源码目录\ruoyi-modules\ruoyi-file\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。
3.1.3.4 修改ruoyi-modules-gen配置文件
编辑源码目录\ruoyi-modules\ruoyi-gen\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。
3.1.3.5 修改ruoyi-modules-job配置文件
编辑源码目录\ruoyi-modules\ruoyi-job\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。
3.1.3.6 修改ruoyi-modules-system配置文件
编辑源码目录\ruoyi-modules\ruoyi-system\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。
3.1.3.7 修改ruoyi-monitor配置文件
编辑源码目录\ruoyi-visual\ruoyi-monitor\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。
3.1.4 准备nacos配置文件
在源码根目录下新建一个名为conf的目录,并利用文本编辑器(如notepad++)新建一个名为application.properties的文本文件,文件内容如下,并将该文件保存在conf目录中。
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://ruoyi-cloud-mysql:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=root db.password=password nacos.naming.empty-service.auto-clean=true nacos.naming.empty-service.clean.initial-delay-ms=50000 nacos.naming.empty-service.clean.period-time-ms=30000 management.endpoints.web.exposure.include=* management.metrics.export.elastic.enabled=false management.metrics.export.influx.enabled=false server.tomcat.accesslog.enabled=true server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i server.tomcat.basedir=/home/ruoyi/nacos/tomcat/logs nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** nacos.core.auth.system.type=nacos nacos.core.auth.enabled=false nacos.core.auth.default.token.expire.seconds=18000 nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 nacos.core.auth.caching.enabled=true nacos.core.auth.enable.userAgentAuthWhite=false nacos.core.auth.server.identity.key=serverIdentity nacos.core.auth.server.identity.value=security nacos.istio.mcp.server.enabled=false
注:第三行中的ruoyi-cloud-mysql为mysql的容器名,第四行中的db.user表示mysql数据库的用户名,第五行的db.password表示用户密码,这里的密码可根据需要自行修改。
3.1.5 准备nginx配置文件
利用文本编辑器(如notepad++)新建一个名为nginx.conf的文本文件,文件内容如下,并将该文件保存在conf目录中。
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; #前端监听端口 server_name localhost; # 配置前端目录及首页 location / { root /usr/local/ruoyi/dist; #前端Web主目录,可自行定义 try_files $uri $uri/ /index.html; index index.html index.htm; } # 配置反向代理,所有对/prod-api接口的访问均代理至ruoyi-cloud-gateway:8080 location /prod-api/{ proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ruoyi-cloud-gateway:8080/; } # 避免actuator暴露 if ($request_uri ~ "/actuator") { return 403; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
3.1.6 准备redis配置文件
利用文本编辑器(如notepad++)新建一个名为redis.conf的文本文件,文件内容如下,并将该文件保存在conf目录中。
requirepass 123456
注:其中的密码可自行修改。
3.1.7 准备工作目录
在Linux服务器的/ruoyi-cloud目录中建立如下图所示的目录结构。
示例命令如下:
[root@node01 ~]# mkdir /ruoyi-cloud && cd /ruoyi-cloud [root@node01 ruoyi-cloud]# mkdir -p mysql/db nacos/conf nginx/conf redis/conf ruoyi script uploadPath [root@node01 ruoyi-cloud]# mkdir -p ruoyi/auth/jar ruoyi/gateway/jar ruoyi/modules ruoyi/visual/monitor/jar [root@node01 ruoyi-cloud]# mkdir -p ruoyi/modules/file/jar ruoyi/modules/gen/jar ruoyi/modules/job/jar ruoyi/modules/system/jar
3.2 打包前端项目
可利用Node.js包管理工具的npm命令对前端项目进行打包,Node.js的安装与环境配置可参见文章:Node.js的安装与配置
在ruoyi-ui文件夹下的package.json文件中可以看到前端项目构建的命令,其中build:prod为构建生产环境,build:stage则为测试环境,以下以构建生产环境为例。
在cmd命令行下,在ruoyi-ui文件夹下,依次执行【npm install】和【npm run build:prod】将前端项目打包成一个dist文件夹,如下图所示。
# 安装依赖包 D:\develop\ruoyi-cloud\ruoyi-ui>npm install npm WARN ERESOLVE overriding peer dependency ……此处省略其它系统输出…… # 打包前端项目 D:\develop\ruoyi-cloud\ruoyi-ui>npm run build:prod > ruoyi@3.6.4 build:prod > vue-cli-service build - Building for production... ……此处省略其它系统输出…… # 查看前端项目dist文件夹中的文件 D:\develop\ruoyi-cloud\ruoyi-ui>dir dist 驱动器 D 中的卷是 软件 卷的序列号是 C88D-5646 D:\develop\ruoyi-cloud\ruoyi-ui\dist 的目录 2024/05/12 17:52 . 2024/05/12 17:52 .. 2024/05/12 17:52 5,561 favicon.ico 2024/05/12 17:52 html 2024/05/12 17:52 12,085 index.html 2024/05/12 17:52 3,967 index.html.gz 2024/05/12 17:52 26 robots.txt 2024/05/12 17:52 static 4 个文件 21,639 字节 4 个目录 219,372,675,072 可用字节
3.3 构建前端镜像
3.3.1 上传前端文件
将前端项目打包的dist文件夹利用xftp上传至Linux服务器的/ruoyi-cloud/目录,如下图所示。
3.3.2 上传nginx配置文件
将conf文件夹下的nginx.conf文件利用xftp上传至Linux服务器的/ruoyi-cloud/nginx/conf目录,如下图所示。
3.3.3 编写前端镜像构建脚本
在/ruoyi-cloud/nginx目录下新建Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 nginx]# vim Dockerfile # 基础镜像 FROM nginx # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi/dist # 创建目录 RUN mkdir -p /usr/local/ruoyi/dist # 指定路径 WORKDIR /usr/local/ruoyi/dist # 复制conf文件到路径 COPY ./conf/nginx.conf /etc/nginx/nginx.conf # 复制前端项目文件到Web主目录 COPY ./dist /usr/local/ruoyi/dist
3.3.4 构建前端镜像
在Dockerfile文件所在目录执行【docker build -t ruoyi-cloud-nginx:latest .】命令拉取nginx基础镜像,并利用该nginx基础镜像构建一个名为ruoyi-cloud-nginx:latest的镜像,如下所示。
[root@node01 nginx]# docker build -t ruoyi-cloud-nginx:latest . Sending build context to Docker daemon 6.672MB Step 1/3 : FROM nginx:latest latest: Pulling from library/nginx b0a0cf830b12: Pull complete 8ddb1e6cdf34: Pull complete 5252b206aac2: Pull complete 988b92d96970: Pull complete 7102627a7a6e: Pull complete 93295add984d: Pull complete ebde0aa1d1aa: Pull complete Digest: sha256:ed6d2c43c8fbcd3eaa44c9dab6d94cb346234476230dc1681227aa72d07181ee Status: Downloaded newer image for nginx:latest ---> 7383c266ef25 Step 2/3 : COPY dist /usr/share/dist ---> 972f25f1821e Step 3/3 : COPY nginx.conf /etc/nginx/nginx.conf ---> ad549d5b54bc Successfully built ad549d5b54bc Successfully tagged ruoyi-cloud-nginx:latest
注:若某个下载环节卡住长时间不动,可按Ctrl+C取消,重新执行构建即可。
3.3.5 查看前端镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-nginx latest ff1e85d673af 37 seconds ago 148MB nginx latest 605c77e624dd 2 years ago 141MB
3.4 编译构建后端项目
利用诸如IntelliJ IDEA之类的工具将系统编译构建出17个jar包(也可以利用华为云的CodeArts编译构建生成,过程可参见:利用CodeArts构建编译后端项目)。
利用IntelliJ IDEA编译构建过程如下所示。
将编译构建的jar包复制保存在本地某个目录(比如源码根目录下的jar)。
3.5 构建后端镜像
3.5.1 构建gateway镜像
3.5.1.1 上传jar包
将编译构建的ruoyi-gateway.jar包上传至/ruoyi-cloud/ruoyi/gateway/jar目录下,如下图所示。
3.5.1.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/gateway目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 gateway]# vim Dockerfile # 基础镜像 FROM openjdk:8-jre # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-gateway.jar /usr/local/ruoyi/ruoyi-gateway.jar # 启动网关服务 ENTRYPOINT ["java","-jar","ruoyi-gateway.jar"]
3.5.1.3 构建gateway镜像
在/ruoyi-cloud/ruoyi/gateway目录执行【docker build -t ruoyi-cloud-gateway:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-gateway:latest的镜像,如下所示。
[root@node01 gateway]# docker build -t ruoyi-cloud-gateway:latest . Sending build context to Docker daemon 88.64MB Step 1/7 : FROM openjdk:8-jre 8-jre: Pulling from library/openjdk 0e29546d541c: Pull complete 9b829c73b52b: Pull complete cb5b7ae36172: Pull complete 99ce012bef04: Pull complete 22dc2a72d098: Pull complete 9c69a57e10d9: Pull complete Digest: sha256:c0ab1c0631266ef9420a414726a790733a2561efc5f4fa2f9b8186f4d6b00d53 Status: Downloaded newer image for openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ptuxgk ---> Running in f5468f50085d Removing intermediate container f5468f50085d ---> 76a2be41ec28 Step 3/7 : VOLUME /usr/local/ruoyi ---> Running in 4b73ed75b4f0 Removing intermediate container 4b73ed75b4f0 ---> c89d9c2269d7 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Running in 8a3e5ea28ff7 Removing intermediate container 8a3e5ea28ff7 ---> 2f78ffef79b6 Step 5/7 : WORKDIR /usr/local/ruoyi ---> Running in c780fe6b6378 Removing intermediate container c780fe6b6378 ---> 9d84c70972bd Step 6/7 : COPY ./jar/ruoyi-gateway.jar /usr/local/ruoyi/ruoyi-gateway.jar ---> 1028eea8d844 Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-gateway.jar"] ---> Running in df90a9baed5f Removing intermediate container df90a9baed5f ---> 367e221b3f9e Successfully built 367e221b3f9e Successfully tagged ruoyi-cloud-gateway:latest
3.5.1.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 gateway]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-gateway latest 367e221b3f9e About a minute ago 362MB ruoyi-cloud-nginx latest ff1e85d673af 23 minutes ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB
3.5.2 构建nacos镜像
3.5.2.1 上传nacos配置文件
将conf文件夹中的application.properties配置文件上传至/ruoyi-cloud/nacos/conf目录下,如下图所示。
3.5.2.2 编写镜像脚本文件
在/ruoyi-cloud/nacos/目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 nacos]# vim Dockerfile # 基础镜像 FROM nacos/nacos-server # author MAINTAINER ptuxgk # 复制conf文件到路径 COPY ./conf/application.properties /home/nacos/conf/application.properties
3.5.2.3 构建nacos镜像
在/ruoyi-cloud/nacos/目录执行【docker build -t ruoyi-cloud-nacos:latest .】命令拉取nacos/nacos-server基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-nacos:latest的镜像,如下所示。
[root@node01 nacos]# docker build -t ruoyi-cloud-nacos:latest . Sending build context to Docker daemon 4.608kB Step 1/3 : FROM nacos/nacos-server latest: Pulling from nacos/nacos-server 5ad559c5ae16: Pull complete 5746ca7cf180: Pull complete d709fe221c89: Pull complete e88fdcf257b1: Pull complete eb573b28173c: Pull complete a71625257ced: Pull complete 26e7e7836838: Pull complete 30f7d6851c4a: Pull complete d565cd94c625: Pull complete Digest: sha256:87a3d8b78ec24c253a4db7c093097a7b256327eb5117cd9498e289b896918153 Status: Downloaded newer image for nacos/nacos-server:latest ---> bdf60dc2ada3 Step 2/3 : MAINTAINER ptuxgk ---> Running in 0f93cd9783da Removing intermediate container 0f93cd9783da ---> e10323fac388 Step 3/3 : COPY ./conf/application.properties /usr/local/nacos/conf/application.properties ---> 9440a168a8aa Successfully built 9440a168a8aa Successfully tagged ruoyi-cloud-nacos:latest
3.5.2.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 nacos]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-nacos latest 9440a168a8aa 53 seconds ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e 14 minutes ago 362MB ruoyi-cloud-nginx latest ff1e85d673af 36 minutes ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.3 构建auth镜像
3.5.3.1 上传jar包
将编译构建的ruoyi-auth.jar包上传至/ruoyi-cloud/ruoyi/auth/jar目录下,如下图所示。
3.5.3.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/auth目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 auth]# vim Dockerfile # 基础镜像 FROM openjdk:8-jre # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-auth.jar /usr/local/ruoyi/ruoyi-auth.jar # 启动认证服务 ENTRYPOINT ["java","-jar","ruoyi-auth.jar"]
3.5.3.3 构建auth镜像
在/ruoyi-cloud/ruoyi/auth目录执行【docker build -t ruoyi-cloud-auth:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-auth:latest的镜像,如下所示。
[root@node01 auth]# docker build -t ruoyi-cloud-auth:latest . Sending build context to Docker daemon 80.52MB Step 1/7 : FROM openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ptuxgk ---> Using cache ---> 76a2be41ec28 Step 3/7 : VOLUME /usr/local/ruoyi ---> Using cache ---> c89d9c2269d7 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Using cache ---> 2f78ffef79b6 Step 5/7 : WORKDIR /usr/local/ruoyi ---> Using cache ---> 9d84c70972bd Step 6/7 : COPY ./jar/ruoyi-auth.jar /usr/local/ruoyi/ruoyi-auth.jar ---> 94c4756f24c7 Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-auth.jar"] ---> Running in 26f756ec1a5f Removing intermediate container 26f756ec1a5f ---> 7a78ed9189f5 Successfully built 7a78ed9189f5 Successfully tagged ruoyi-cloud-auth:latest
3.5.3.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 auth]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-auth latest 7a78ed9189f5 2 minutes ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa 6 minutes ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e 19 minutes ago 362MB ruoyi-cloud-nginx latest ff1e85d673af 41 minutes ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.4 构建modules-system镜像
3.5.4.1 上传jar包
将编译构建的ruoyi-modules-system.jar包上传至/ruoyi-cloud/ruoyi/modules/system/jar目录下,如下图所示。
3.5.4.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/modules/system/目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 system]# vim Dockerfile # 基础镜像 FROM openjdk:8-jre # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-modules-system.jar /usr/local/ruoyi/ruoyi-modules-system.jar # 启动系统服务 ENTRYPOINT ["java","-jar","ruoyi-modules-system.jar"]
3.5.4.3 构建modules-system镜像
在/ruoyi-cloud/ruoyi/modules/system/目录执行【docker build -t ruoyi-cloud-modules-system:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-modules-system:latest的镜像,如下所示。
[root@node01 system]# docker build -t ruoyi-cloud-modules-system:latest . Sending build context to Docker daemon 96.87MB Step 1/7 : FROM openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ptuxgk ---> Using cache ---> 76a2be41ec28 Step 3/7 : VOLUME /usr/local/ruoyi ---> Using cache ---> c89d9c2269d7 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Using cache ---> 2f78ffef79b6 Step 5/7 : WORKDIR /usr/local/ruoyi ---> Using cache ---> 9d84c70972bd Step 6/7 : COPY ./jar/ruoyi-modules-system.jar /usr/local/ruoyi/ruoyi-modules-system.jar ---> cda30329b07b Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-modules-system.jar"] ---> Running in 929d10014d2d Removing intermediate container 929d10014d2d ---> ac593d77af23 Successfully built ac593d77af23 Successfully tagged ruoyi-cloud-modules-system:latest
3.5.4.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 system]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-modules-system latest ac593d77af23 21 seconds ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 12 minutes ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa 16 minutes ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e 29 minutes ago 362MB ruoyi-cloud-nginx latest ff1e85d673af About an hour ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.5 构建modules-gen镜像
3.5.5.1 上传jar包
将编译构建的modules-gen.jar包上传至/ruoyi-cloud/ruoyi/modules/gen/jar目录下,如下图所示。
3.5.5.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/modules/gen/目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 gen]# vim Dockerfile # 基础镜像 FROM openjdk:8-jre # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-modules-gen.jar /usr/local/ruoyi/ruoyi-modules-gen.jar # 启动代码生成服务 ENTRYPOINT ["java","-jar","ruoyi-modules-gen.jar"]
3.5.5.3 构建modules-gen镜像
在/ruoyi-cloud/ruoyi/modules/gen/目录执行【docker build -t ruoyi-cloud-modules-gen:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-modules-gen:latest的镜像,如下所示。
[root@node01 gen]# docker build -t ruoyi-cloud-modules-gen:latest . Sending build context to Docker daemon 91.91MB Step 1/7 : FROM openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ptuxgk ---> Using cache ---> 76a2be41ec28 Step 3/7 : VOLUME /usr/local/ruoyi ---> Using cache ---> c89d9c2269d7 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Using cache ---> 2f78ffef79b6 Step 5/7 : WORKDIR /usr/local/ruoyi ---> Using cache ---> 9d84c70972bd Step 6/7 : COPY ./jar/ruoyi-modules-gen.jar /usr/local/ruoyi/ruoyi-modules-gen.jar ---> 7d6e8933b07e Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-modules-gen.jar"] ---> Running in 5e155f7f1bb0 Removing intermediate container 5e155f7f1bb0 ---> 3916a45a66cb Successfully built 3916a45a66cb Successfully tagged ruoyi-cloud-modules-gen:latest
3.5.5.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 gen]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-modules-gen latest 3916a45a66cb 23 seconds ago 365MB ruoyi-cloud-modules-system latest ac593d77af23 3 minutes ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 15 minutes ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa 19 minutes ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e 32 minutes ago 362MB ruoyi-cloud-nginx latest ff1e85d673af About an hour ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.6 构建modules-job镜像
3.5.6.1 上传jar包
将编译构建的ruoyi-modules-job.jar包上传至/ruoyi-cloud/ruoyi/modules/job/jar目录下,如下图所示。
3.5.6.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/modules/job目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 job]# vim Dockerfile # 基础镜像 FROM openjdk:8-jre # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-modules-job.jar /usr/local/ruoyi/ruoyi-modules-job.jar # 启动定时任务服务 ENTRYPOINT ["java","-jar","ruoyi-modules-job.jar"]
3.5.6.3 构建modules-job镜像
在/ruoyi-cloud/ruoyi/modules/job目录执行【docker build -t ruoyi-cloud-modules-job:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-modules-job:latest的镜像,如下所示。
[root@node01 job]# docker build -t ruoyi-cloud-modules-job:latest . Sending build context to Docker daemon 92.67MB Step 1/7 : FROM openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ptuxgk ---> Using cache ---> 76a2be41ec28 Step 3/7 : VOLUME /usr/local/ruoyi ---> Using cache ---> c89d9c2269d7 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Using cache ---> 2f78ffef79b6 Step 5/7 : WORKDIR /usr/local/ruoyi ---> Using cache ---> 9d84c70972bd Step 6/7 : COPY ./jar/ruoyi-modules-job.jar /usr/local/ruoyi/ruoyi-modules-job.jar ---> 08641d804ab4 Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-modules-job.jar"] ---> Running in 2bb4d9b724ce Removing intermediate container 2bb4d9b724ce ---> 01513e80cd57 Successfully built 01513e80cd57 Successfully tagged ruoyi-cloud-modules-job:latest
3.5.6.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 job]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-modules-job latest 01513e80cd57 21 seconds ago 366MB ruoyi-cloud-modules-gen latest 3916a45a66cb 4 minutes ago 365MB ruoyi-cloud-modules-system latest ac593d77af23 7 minutes ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 20 minutes ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa 23 minutes ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e 37 minutes ago 362MB ruoyi-cloud-nginx latest ff1e85d673af About an hour ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.7 构建modules-file镜像
3.5.7.1 上传jar包
将编译构建的gateway jar包上传至/ruoyi-cloud/ruoyi/modules/file/jar目录下,如下图所示。
3.5.7.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/modules/file目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
# 基础镜像 FROM openjdk:8-jre # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-modules-file.jar /usr/local/ruoyi/ruoyi-modules-file.jar # 启动文件服务 ENTRYPOINT ["java","-jar","ruoyi-modules-file.jar"]
3.5.7.3 构建modules-file镜像
在/ruoyi-cloud/ruoyi/modules/file目录执行【docker build -t ruoyi-cloud-modules-file:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-modules-file:latest的镜像,如下所示。
[root@node01 file]# docker build -t ruoyi-cloud-modules-file:latest . Sending build context to Docker daemon 88.43MB Step 1/7 : FROM openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ptuxgk ---> Using cache ---> 76a2be41ec28 Step 3/7 : VOLUME /usr/local/ruoyi ---> Using cache ---> c89d9c2269d7 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Using cache ---> 2f78ffef79b6 Step 5/7 : WORKDIR /usr/local/ruoyi ---> Using cache ---> 9d84c70972bd Step 6/7 : COPY ./jar/ruoyi-modules-file.jar /usr/local/ruoyi/ruoyi-modules-file.jar ---> 6fe9acc36b82 Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-modules-file.jar"] ---> Running in e78d700d45b2 Removing intermediate container e78d700d45b2 ---> a4fede44a76e Successfully built a4fede44a76e Successfully tagged ruoyi-cloud-modules-file:latest
3.5.7.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 file]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-modules-file latest a4fede44a76e 20 seconds ago 362MB ruoyi-cloud-modules-job latest 01513e80cd57 7 minutes ago 366MB ruoyi-cloud-modules-gen latest 3916a45a66cb 11 minutes ago 365MB ruoyi-cloud-modules-system latest ac593d77af23 15 minutes ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 27 minutes ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa 30 minutes ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e 44 minutes ago 362MB ruoyi-cloud-nginx latest ff1e85d673af About an hour ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.8 构建mysql镜像
3.5.8.1 上传sql脚本文件
将源码目录下的sql文件夹中的所有sql文件上传至/ruoyi-cloud/mysql/db目录下,如下图所示。
3.5.8.2 编写镜像脚本文件
在/ruoyi-cloud/mysql/目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 mysql]# vim Dockerfile # 基础镜像 FROM mysql:5.7 # author MAINTAINER ptuxgk # 执行sql脚本 ADD ./db/*.sql /docker-entrypoint-initdb.d/
3.5.8.3 构建mysql镜像
在/ruoyi-cloud/mysql/目录执行【docker build -t ruoyi-cloud-mysql:latest .】命令拉取mysql:5.7基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-mysql:latest的镜像,如下所示。
[root@node01 mysql]# docker build -t ruoyi-cloud-mysql:latest . Sending build context to Docker daemon 96.26kB Step 1/3 : FROM mysql:5.7 5.7: Pulling from library/mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete 99da31dd6142: Pull complete 626033c43d70: Pull complete 37d5d7efb64e: Pull complete ac563158d721: Pull complete d2ba16033dad: Pull complete 0ceb82207cd7: Pull complete 37f2405cae96: Pull complete e2482e017e53: Pull complete 70deed891d42: Pull complete Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94 Status: Downloaded newer image for mysql:5.7 ---> c20987f18b13 Step 2/3 : MAINTAINER ptuxgk ---> Running in 6b14168e615b Removing intermediate container 6b14168e615b ---> b5bee4a42df1 Step 3/3 : ADD ./db/*.sql /docker-entrypoint-initdb.d/ ---> da0cceb9be97 Successfully built da0cceb9be97 Successfully tagged ruoyi-cloud-mysql:latest
3.5.8.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 mysql]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-mysql latest da0cceb9be97 About a minute ago 448MB ruoyi-cloud-modules-file latest a4fede44a76e 22 minutes ago 362MB ruoyi-cloud-modules-job latest 01513e80cd57 30 minutes ago 366MB ruoyi-cloud-modules-gen latest 3916a45a66cb 34 minutes ago 365MB ruoyi-cloud-modules-system latest ac593d77af23 37 minutes ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 About an hour ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa About an hour ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e About an hour ago 362MB ruoyi-cloud-nginx latest ff1e85d673af About an hour ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB mysql 5.7 c20987f18b13 2 years ago 448MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.9 构建redis镜像
3.5.1.1 上传redis配置文件
将conf文件夹中的redis.conf配置文件上传至/ruoyi-cloud/redis/conf目录下,如下图所示。
3.5.1.2 编写镜像脚本文件
在/ruoyi-cloud/redis/目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 redis]# vim Dockerfile # 基础镜像 FROM redis # author MAINTAINER ptuxgk # 挂载目录 VOLUME /usr/local/ruoyi/redis # 创建目录 RUN mkdir -p /usr/local/ruoyi/redis # 指定路径 WORKDIR /usr/local/ruoyi/redis # 复制conf文件到路径 COPY ./conf/redis.conf /usr/local/ruoyi/redis/redis.conf
3.5.1.3 构建redis镜像
在/ruoyi-cloud/redis/目录执行【docker build -t ruoyi-cloud-redis:latest .】命令拉取redis基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-redis:latest的镜像,如下所示。
[root@node01 redis]# docker build -t ruoyi-cloud-redis:latest . Sending build context to Docker daemon 3.584kB Step 1/6 : FROM redis latest: Pulling from library/redis a2abf6c4d29d: Already exists c7a4e4382001: Pull complete 4044b9ba67c9: Pull complete c8388a79482f: Pull complete 413c8bb60be2: Pull complete 1abfd3011519: Pull complete Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339 Status: Downloaded newer image for redis:latest ---> 7614ae9453d1 Step 2/6 : MAINTAINER ptuxgk ---> Running in 3531ad1fd1df Removing intermediate container 3531ad1fd1df ---> 79e9a430c919 Step 3/6 : VOLUME /usr/local/ruoyi/redis ---> Running in bc2bf4a99f25 Removing intermediate container bc2bf4a99f25 ---> fb9b7a4199dc Step 4/6 : RUN mkdir -p /usr/local/ruoyi/redis ---> Running in c6bd7c42e536 Removing intermediate container c6bd7c42e536 ---> 83ae1f12a519 Step 5/6 : WORKDIR /usr/local/ruoyi/redis ---> Running in 9d6872c243da Removing intermediate container 9d6872c243da ---> f2467655cf9a Step 6/6 : COPY ./conf/redis.conf /usr/local/ruoyi/redis/redis.conf ---> 99dee3e00862 Successfully built 99dee3e00862 Successfully tagged ruoyi-cloud-redis:latest
3.5.2.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 redis]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-redis latest 99dee3e00862 55 seconds ago 113MB ruoyi-cloud-mysql latest da0cceb9be97 2 minutes ago 448MB ruoyi-cloud-modules-file latest a4fede44a76e 23 minutes ago 362MB ruoyi-cloud-modules-job latest 01513e80cd57 31 minutes ago 366MB ruoyi-cloud-modules-gen latest 3916a45a66cb 35 minutes ago 365MB ruoyi-cloud-modules-system latest ac593d77af23 38 minutes ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 About an hour ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa About an hour ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e About an hour ago 362MB ruoyi-cloud-nginx latest ff1e85d673af About an hour ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB redis latest 7614ae9453d1 2 years ago 113MB mysql 5.7 c20987f18b13 2 years ago 448MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.5.10 构建visual-monitor镜像
3.5.10.1 上传jar包
将编译构建的ruoyi-visual-monitor.jar包上传至/ruoyi-cloud/ruoyi/visual/monitor/jar目录下,如下图所示。
3.5.10.2 编写镜像脚本文件
在/ruoyi-cloud/ruoyi/visual/monitor目录新建一个名为Dockerfile镜像构建脚本,脚本内容如下:
[root@node01 monitor]# vim Dockerfile # 基础镜像 FROM openjdk:8-jre # author MAINTAINER ruoyi # 挂载目录 VOLUME /usr/local/ruoyi # 创建目录 RUN mkdir -p /usr/local/ruoyi # 指定路径 WORKDIR /usr/local/ruoyi # 复制jar文件到路径 COPY ./jar/ruoyi-visual-monitor.jar /usr/local/ruoyi/ruoyi-visual-monitor.jar # 启动系统服务 ENTRYPOINT ["java","-jar","ruoyi-visual-monitor.jar"]
3.5.10.3 构建visual-monitor镜像
在/ruoyi-cloud/ruoyi/visual/monitor目录执行【docker build -t ruoyi-cloud-visual-monitor:latest .】命令拉取openjdk:8-jre基础镜像,并利用该基础镜像构建一个名为ruoyi-cloud-visual-monitor:latest的镜像,如下所示。
[root@node01 monitor]# docker build -t ruoyi-cloud-visual-monitor:latest . Sending build context to Docker daemon 55.5MB Step 1/7 : FROM openjdk:8-jre ---> 26ac3f63d29f Step 2/7 : MAINTAINER ruoyi ---> Running in a839c0e5c9dc Removing intermediate container a839c0e5c9dc ---> 593e413b44e2 Step 3/7 : VOLUME /usr/local/ruoyi ---> Running in 99b4b6ea8b72 Removing intermediate container 99b4b6ea8b72 ---> c0152c8a24b8 Step 4/7 : RUN mkdir -p /usr/local/ruoyi ---> Running in b737e342a326 Removing intermediate container b737e342a326 ---> 569986aab06e Step 5/7 : WORKDIR /usr/local/ruoyi ---> Running in 83c2806b5a50 Removing intermediate container 83c2806b5a50 ---> ca25eef05d2f Step 6/7 : COPY ./jar/ruoyi-visual-monitor.jar /usr/local/ruoyi/ruoyi-visual-monitor.jar ---> feec4bbfabd9 Step 7/7 : ENTRYPOINT ["java","-jar","ruoyi-visual-monitor.jar"] ---> Running in 903e48f5c095 Removing intermediate container 903e48f5c095 ---> f12cca59d7f2 Successfully built f12cca59d7f2 Successfully tagged ruoyi-cloud-visual-monitor:latest
3.5.10.4 查看镜像
执行【docker images】命令查看当前镜像,如下所示。
[root@node01 monitor]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruoyi-cloud-visual-monitor latest f12cca59d7f2 20 seconds ago 329MB ruoyi-cloud-redis latest 99dee3e00862 2 minutes ago 113MB ruoyi-cloud-mysql latest da0cceb9be97 4 minutes ago 448MB ruoyi-cloud-modules-file latest a4fede44a76e 25 minutes ago 362MB ruoyi-cloud-modules-job latest 01513e80cd57 32 minutes ago 366MB ruoyi-cloud-modules-gen latest 3916a45a66cb 37 minutes ago 365MB ruoyi-cloud-modules-system latest ac593d77af23 40 minutes ago 370MB ruoyi-cloud-auth latest 7a78ed9189f5 About an hour ago 354MB ruoyi-cloud-nacos latest 9440a168a8aa About an hour ago 1.05GB ruoyi-cloud-gateway latest 367e221b3f9e About an hour ago 362MB ruoyi-cloud-nginx latest ff1e85d673af 2 hours ago 148MB nginx latest 605c77e624dd 2 years ago 141MB openjdk 8-jre 26ac3f63d29f 2 years ago 273MB redis latest 7614ae9453d1 2 years ago 113MB mysql 5.7 c20987f18b13 2 years ago 448MB nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
3.6 综合排编与部署
成功完成上述镜像构建后,就可能利用这些镜像来综合编排容器和部署项目了。
3.6.1 编写编排配置文件
在服务器的/ruoyi-cloud/script/目录下,新建一个名为docker-compose.yml的配置文件,文件内容如下,默认情况下,部分容器会占用较多内存并导致系统卡死,这里对这些容器占用资源进行了限制。
[root@node01 script]# vim docker-compose.yml --- version : '3' services: ruoyi-cloud-nacos: image: ruoyi-cloud-nacos:latest container_name: ruoyi-cloud-nacos environment: - MODE=standalone volumes: - ../nacos/logs/:/usr/local/nacos/logs - ../nacos/conf/application.properties:/home/nacos/conf/application.properties ports: - "58848:8848" - "59848:9848" - "59849:9849" networks: - ruoyi-cloud depends_on: - ruoyi-cloud-mysql ruoyi-cloud-mysql: image: ruoyi-cloud-mysql:latest container_name: ruoyi-cloud-mysql ports: - "53406:3306" networks: - ruoyi-cloud volumes: - ../mysql/conf:/etc/mysql/conf.d - ../mysql/logs:/logs - ../mysql/data:/var/lib/mysql command: [ 'mysqld', '--innodb-buffer-pool-size=80M', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1' ] environment: MYSQL_DATABASE: 'ry-cloud' MYSQL_ROOT_PASSWORD: password ruoyi-cloud-redis: image: ruoyi-cloud-redis:latest container_name: ruoyi-cloud-redis ports: - "56379:6379" networks: - ruoyi-cloud volumes: - ../redis/conf/redis.conf:/usr/local/ruoyi/redis/redis.conf - ../redis/data:/data command: redis-server /usr/local/ruoyi/redis/redis.conf ruoyi-cloud-nginx: image: ruoyi-cloud-nginx:latest container_name: ruoyi-cloud-nginx ports: - "50180:80" networks: - ruoyi-cloud volumes: - ../nginx/dist:/usr/local/ruoyi/dist - ../nginx/conf/nginx.conf:/etc/nginx/nginx.conf - ../nginx/logs:/var/log/nginx - ../nginx/conf.d:/etc/nginx/conf.d depends_on: - ruoyi-cloud-gateway links: - ruoyi-cloud-gateway ruoyi-cloud-gateway: image: ruoyi-cloud-gateway:latest container_name: ruoyi-cloud-gateway ports: - "58180:8080" networks: - ruoyi-cloud depends_on: - ruoyi-cloud-redis links: - ruoyi-cloud-redis deploy: resources: limits: memory: 512M ruoyi-cloud-auth: image: ruoyi-cloud-auth:latest container_name: ruoyi-cloud-auth ports: - "59200:9200" networks: - ruoyi-cloud depends_on: - ruoyi-cloud-redis links: - ruoyi-cloud-redis deploy: resources: limits: memory: 512M ruoyi-cloud-modules-system: image: ruoyi-cloud-modules-system:latest container_name: ruoyi-cloud-modules-system ports: - "59201:9201" networks: - ruoyi-cloud depends_on: - ruoyi-cloud-redis - ruoyi-cloud-mysql links: - ruoyi-cloud-redis - ruoyi-cloud-mysql deploy: resources: limits: memory: 512M ruoyi-cloud-modules-gen: image: ruoyi-cloud-modules-gen:latest container_name: ruoyi-cloud-modules-gen ports: - "59202:9202" networks: - ruoyi-cloud depends_on: - ruoyi-cloud-mysql links: - ruoyi-cloud-mysql deploy: resources: limits: memory: 512M ruoyi-cloud-modules-job: image: ruoyi-cloud-modules-job:latest container_name: ruoyi-cloud-modules-job ports: - "59203:9203" networks: - ruoyi-cloud depends_on: - ruoyi-cloud-mysql links: - ruoyi-cloud-mysql deploy: resources: limits: memory: 512M ruoyi-cloud-modules-file: image: ruoyi-cloud-modules-file:latest container_name: ruoyi-cloud-modules-file ports: - "59300:9300" networks: - ruoyi-cloud volumes: - ../uploadPath:/usr/local/ruoyi/uploadPath deploy: resources: limits: memory: 512M ruoyi-cloud-visual-monitor: image: ruoyi-cloud-visual-monitor:latest container_name: ruoyi-cloud-visual-monitor ports: - "59100:9100" networks: - ruoyi-cloud deploy: resources: limits: memory: 512M networks: ruoyi-cloud: external: true
3.6.2 一键部署系统基础模块
(1)创建容器网络
执行【docker network create ruoyi-cloud】命令创建一个容器网络ruoyi-cloud。
# 创建一个容器网络 [root@node01 script]# docker network create ruoyi-cloud
(2)一键部署系统基础模块
在/ruoyi-cloud/script目录,执行【docker-compose --compatibility up -d ruoyi-cloud-mysql ruoyi-cloud-nacos ruoyi-cloud-redis】命令创建并启动三个系统基础模块容器,如下所示。
# 一键部署系统基础模块,--compatibility为兼容性选项,用于限制容器启动内存 [root@node01 script]# docker-compose --compatibility up -d ruoyi-cloud-mysql ruoyi-cloud-nacos ruoyi-cloud-redis Creating ruoyi-cloud-redis ... done Creating ruoyi-cloud-mysql ... done Creating ruoyi-cloud-nacos ... done
注1:由于对容器占用内存作了限制,在创建容器时,要求使用兼容性选项--compatibility。
注2:如果直接执行【docker-compose --compatibility up -d】 命令创建并启动系统所有模块容器,除上述三个基础模块容器外,其它容器均会提示启动失败。
3.6.3 查看容器状态
执行【docker ps -a】命令查看当前容器状态,如下所示。
[root@node01 script]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 28ea80e2d018 ruoyi-cloud-nacos:latest "bin/docker-startup.…" About a minute ago Up About a minute 0.0.0.0:8848->8848/tcp, 0.0.0.0:9848-9849->9848-9849/tcp ruoyi-cloud-nacos 1f4abc94dd75 ruoyi-cloud-mysql:latest "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp ruoyi-cloud-mysql ba790f1bceb0 ruoyi-cloud-redis:latest "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:6379->6379/tcp ruoyi-cloud-redis
三个容器状态似乎都没有问题,但查看ruoyi-cloud-nacos容器的日志会发现有以下错误提示:
[root@node01 script]# docker logs ruoyi-cloud-nacos ……此处省略其它日志输出…… Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure : No DataSource set ……此处省略其它日志输出…… Caused by: java.lang.IllegalStateException: No DataSource set
3.6.4 配置防火墙
出现上述错误的原因是因为防火墙,配置防火墙放通容器网络。
# 查看容器网络 [root@node01 script]# docker network ls NETWORK ID NAME DRIVER SCOPE 75ae92573500 bridge bridge local 2c8011d171c5 host host local 181f90b4ae0a none null local 7537065cc31e ruoyi-cloud bridge local #放通此容器网络 # 放通容器网络接口 [root@node01 script]# firewall-cmd --permanent --add-interface=br-7537065cc31e success # 重载防火墙,使上述配置立即生效 [root@node01 script]# firewall-cmd --reload success
注:如果在云服务器上部署,还需要配置安全组,放通redis容器的外部端口(如8848),如果有配置NAT网关,在DNAT规则中将redis容器的外部端口进行再映射。
3.6.5 重启容器
完成防火墙的配置后,执行【docker-compose restart】命令重启容器,再次查看容器状态及日志,可以看到一切正常。
[root@node01 script]# docker-compose restart Restarting ruoyi-cloud-nacos ... done Restarting ruoyi-cloud-mysql ... done Restarting ruoyi-cloud-redis ... done
3.7 配置nacos
3.7.1 登录nacos配置中心
稍候片刻后,打开客户机浏览器,访问http://服务器IP:8848/nacos,打开如下所示界面。
默认登录账号和密码均为nacos,登录后的页面如下图所示。
3.7.2 配置ruoyi-gateway-dev.yml
在nacos配置中心的配置列表中,点击ruoyi-gateway-dev.yml右侧的“编辑”,在打开的页面中,将localhost改为redis容器名称,并设置password的值修改成3.1.6节中redis.conf配置文件中指定的值,其它默认,如下所示。
确认无误后,点击右下角的“发布”按钮发布新的配置。
3.7.3 配置ruoyi-auth-dev.yml
在nacos配置中心的配置列表中,点击ruoyi-auth-dev.yml右侧的“编辑”,在打开的页面中,将localhost改为redis容器名称,并设置password的值修改成3.1.6节中redis.conf配置文件中指定的值,其它默认,如下所示。
确认无误后,点击右下角的“发布”按钮发布新的配置。
3.7.4 配置ruoyi-system-dev.yml
在nacos配置中心的配置列表中,点击ruoyi-system-dev.yml右侧的“编辑”,在打开的页面中,在redis节,将localhost改为redis容器名称,并设置password的值修改成3.1.6节中redis.conf配置文件中指定的值,如下所示。
在数据源datasource节,将localhost改为mysql容器名称,密码与3.1.4节中nacos配置文件中的一致。
其它默认,确认无误后,点击右下角的“发布”按钮发布新的配置。
3.7.5 配置ruoyi-gen-dev.yml
在nacos配置中心的配置列表中,点击ruoyi-gen-dev.yml右侧的“编辑”,在打开的页面中,配置内容与3.7.4节一样,不再赘述,如下图所示。
3.7.6 配置ruoyi-job-dev.yml
在nacos配置中心的配置列表中,点击ruoyi-job-dev.yml右侧的“编辑”,在打开的页面中,配置内容与3.7.4节一样,不再赘述,如下图所示。
3.7.7 配置ruoyi-file-dev.yml
在nacos配置中心的配置列表中,点击ruoyi-file-dev.yml右侧的“编辑”,在打开的页面中,将端口号9300前面的127.0.0.1改为容器名称,path值可根据自身情况修改,如下所示。
3.8 部署系统业务模块
3.8.1 一键部署系统业务模块
在/ruoyi-cloud/script目录,执行【docker-compose --compatibility up -d】命令创建并启动所有系统业务模块,如下所示。前面已创建和启动的基础模块容器不会再重新创建。
[root@node01 script]# docker-compose up --compatibility -d ruoyi-mysql is up-to-date Starting ruoyi-cloud-visual-monitor ... Starting ruoyi-cloud-visual-monitor ... done Starting ruoyi-cloud-modules-file ... done Starting ruoyi-cloud-modules-job ... done Starting ruoyi-cloud-modules-gen ... done Creating ruoyi-cloud-redis ... done Recreating ruoyi-cloud-modules-system ... done Recreating ruoyi-cloud-gateway ... done Recreating ruoyi-cloud-auth ... done Recreating ruoyi-cloud-nginx ... done
注1:如果在3.6.2节已全部创建容器,在此处可以执行【docker-compose --compatibility up -d】命令重新创建和启动。
注2:由于此处的业务模块依赖于前面的3个基础模块,因此当需要重启容器时,必须分批进行,首先重启三个基础模块,然后重启剩下的业务模块。
3.8.2 查看容器状态
稍等2-3分钟后,执行【docker ps -a】 命令查看所有容器状态,可看到所有容器状态正常。
[root@node01 script]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e207b08b5998 ruoyi-cloud-nginx:latest "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp ruoyi-cloud-nginx b09be5ad850f ruoyi-cloud-auth:latest "java -jar ruoyi-aut…" 3 minutes ago Up 3 minutes 0.0.0.0:9200->9200/tcp ruoyi-cloud-auth 8645a9be7384 ruoyi-cloud-modules-system:latest "java -jar ruoyi-mod…" 3 minutes ago Up 3 minutes 0.0.0.0:9201->9201/tcp ruoyi-cloud-modules-system 46c16d6f9633 ruoyi-cloud-gateway:latest "java -jar ruoyi-gat…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp ruoyi-cloud-gateway aa276498e97e ruoyi-cloud-redis:latest "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:6379->6379/tcp ruoyi-cloud-redis 272d50eb324e ruoyi-cloud-modules-job:latest "java -jar ruoyi-mod…" 7 hours ago Up 3 minutes 0.0.0.0:9203->9203/tcp ruoyi-cloud-modules-job 0106674fd03d ruoyi-cloud-modules-gen:latest "java -jar ruoyi-mod…" 7 hours ago Up 3 minutes 0.0.0.0:9202->9202/tcp ruoyi-cloud-modules-gen 5c00e63ed09e ruoyi-cloud-visual-monitor:latest "java -jar ruoyi-vis…" 7 hours ago Up 3 minutes 0.0.0.0:9100->9100/tcp ruoyi-cloud-visual-monitor 05c14c6abbc3 ruoyi-cloud-modules-file:latest "java -jar ruoyi-mod…" 7 hours ago Up 3 minutes 0.0.0.0:9300->9300/tcp ruoyi-cloud-modules-file 757bcbc8658e ruoyi-cloud-nacos:latest "bin/docker-startup.…" 8 hours ago Up 7 hours 0.0.0.0:8848->8848/tcp, 0.0.0.0:9848-9849->9848-9849/tcp ruoyi-cloud-nacos 659d413cde82 ruoyi-cloud-mysql:latest "docker-entrypoint.s…" 9 hours ago Up 7 hours 0.0.0.0:3306->3306/tcp, 33060/tcp ruoyi-cloud-mysql
3.9 测试访问
在客户机,打开浏览器,访问虚拟机IP地址,可成功访问前端登录页面,如下图所示。
以默认的管理员账号admin/admin123登录,可成功访问后端页面,如下图所示。
访问服务器IP:9100,可监控系统服务状态,默认账号密码为ruoyi/123456(3.7节中ruoyi-monitor-dev.yml配置文件中可查看和修改)
访问服务器IP:8080/swagger-ui/index.html#/gen-controller,可成功访问代理生成接口文档,如下图所示。
4 常见故障与解决方案
4.1 nacos启动失败
4.1.1 故障现象
通过【docker ps -a】命令查看容器状态,可看到nacos容器状态正常,但查看其日志可以看到以下错误提示:
# 查看容器状态 [root@host1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b6458a3621f ruoyi-cloud-nacos:latest "bin/docker-startup.…" About an hour ago Up 29 minutes 0.0.0.0:38848->8848/tcp, 0.0.0.0:39848->9848/tcp, 0.0.0.0:39849->9849/tcp ruoyi-cloud-nacos # 查看容器日志 [root@host1 ~]# docker logs ruoyi-cloud-nacos -f ……此处省略其它输出…… Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2024-06-21 16:06:01,507 ERROR Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memoryMonitor' defined in URL [jar:file:/home/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-2.0.3.jar!/com/alibaba/nacos/config/server/monitor/MemoryMonitor.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'asyncNotifyService': Unsatisfied dependency expressed through field 'dumpService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ErrCode:500, ErrMsg:Nacos Server did not start because dumpservice bean construction failure : No DataSource set ……此处省略其它输出…… Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure : No DataSource set at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:236) at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ... 53 common frames omitted Caused by: java.lang.IllegalStateException: No DataSource set at org.springframework.util.Assert.state(Assert.java:73) at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:473) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:480) at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.findConfigMaxId(ExternalStoragePersistServiceImpl.java:658) at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51) at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:293) at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:205) ... 61 common frames omitted
进入nacos容器,并查看其日志,提示如下错误:
# 进入nacos容器内部 [root@host1 ~]# docker exec -it ruoyi-cloud-nacos /bin/bash # 查看nacos日志 [root@1bec9165196e nacos]# cat /home/nacos/logs/nacos.log ……此处省略其它输出…… 2024-06-21 16:35:55,062 ERROR HikariPool-1 - Exception during pool initialization. java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ……此处省略其它输出……
从上面的“Could not create connection to database server”可以断定,故障原因是数据库连接存在问题。
4.1.2 故障排除过程与方法
(1)确定防火墙已放通
查看容器网络和防火墙放通的接口列表,确认ruoyi-cloud网络是否已放通。
# 查看容器网络 [root@host1 script]# docker network ls NETWORK ID NAME DRIVER SCOPE de8a1d06a30c bridge bridge local dd3db82063fc host host local 5d142a9c2f5c none null local cd6fd1b38ee5 ruoyi-cloud bridge local #查看网络ID [root@host1 script]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp4s3 #确认容器网络ID是否位于该接口列表中 ……此处省略其它输出…… # 永久放通网络接口 [root@controller script]# firewall-cmd --permanent --zone=public --add-interface=br-cd6fd1b38ee5 #重载防火墙,让规则立即生效 [root@controller script]# firewall-cmd --reload
重启nacos容器后,如果问题依旧,那就请排查以下四个问题。
(2)检查mysql版本是否正确
该项目的nacos只支持mysql5.7,不支持mysql8,执行以下命令检查并确认mysql镜像的版本。
[root@host1 ~]# docker logs ruoyi-cloud-mysql ……此处省略其它输出…… 2024-06-21T08:01:24.458532Z 0 [Note] mysqld (mysqld 5.7.36) starting as process 80 ...
(3)检查nacos配置文件是否正确
如果mysql版本没有问题,则再检查nacos/conf目录下的application.properties文件中的数据库容器名称、账号和密码是否正确。
[root@host1 nacos]# vim conf/application.properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://ruoyi-cloud-mysql:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=root db.password=password
如果配置文件有错,则修改该配置文件,然后删除并重新构建nacos镜像。
# 删除容器 [root@host1 script]# docker-compose down # 删除nacos镜像及其基础镜像 [root@host1 script]# docker rmi ruoyi-cloud-nacos:latest # 重新构建mysql镜像 [root@host-212-41-173-41 script]# docker build -t ruoyi-cloud-nacos:latest ../nacos/
最后参照3.6.2节重新部署基础模块容器。
(4)重启nacos容器
由于nacos需要连接mysql数据库,这期间可能因为延时导致nacos启动失败。如果前面两点都没有问题,可以尝试重启nacos容器。最后查看日志,如果nacos日志提示“Nacos started successfully in stand alone mode. use external storage”,则证明启动成功。
# 重启nacos容器 [root@host1 script]# docker restart ruoyi-cloud-nacos # 查看nacos容器日志 [root@host1 script]# docker logs ruoyi-cloud-nacos -f ……此处省略其它输出,最后如果能看到以下输出,则nacos启动正常…… 2024-06-21 17:28:44,700 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos' 2024-06-21 17:28:44,703 INFO Nacos started successfully in stand alone mode. use external storage 2024-06-21 17:30:38,267 INFO Initializing Servlet 'dispatcherServlet' 2024-06-21 17:30:38,282 INFO Completed initialization in 15 ms
(5)删除并重新构建mysql容器
如果上面四点仍不能解决故障,那就尝试重新构建mysql镜像吧。
确认mysql目录中的dockerfile文件中的mysql标签为5.7,删除mysql目录下的data目录,并删除mysql镜像,最后重新构建mysql镜像。
# 删除容器 [root@host1 script]# docker-compose down # 删除mysql目录下的data目录 [root@host1 script]# rm -rf ../mysql/data/ # 删除mysql镜像及其基础镜像 [root@host1 script]# docker rmi ruoyi-cloud-mysql:latest # 重新构建mysql镜像 [root@host-212-41-173-41 script]# docker build -t ruoyi-cloud-mysql:latest ../mysql/
最后参照3.6.2节重新部署基础模块容器。
最后如果仍有问题,除了上述五点认真排查外,还要检查磁盘空间是否充足(命令【df -h】),内存是否够用(命令【free -m】)以及其它未知的原因。
4.2 mysql容器启动失败
4.2.1 故障现象1
查看容器状态,可以看到mysql容器状态为Exited。
[root@host-213-32-133-88 script]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7914866f3537 ruoyi-cloud-mysql:latest "docker-entrypoint.s…" 27 minutes ago Exited (1) 7 minutes ago
查看该容器日志,提示如下错误:
[root@host1 script]# docker logs ruoyi-cloud-mysql ……此处省略其它输出…… 2024-06-21T12:05:30.499400Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting. 2024-06-21T12:05:30.499420Z 0 [ERROR] Aborting
从上述日志消息中的“the data directory has files in it”可知,data目录中有文件,需要删除该目录中的文件。
4.2.2 故障排除方案
进入mysql目录,删除data目录,然后重启mysql容器即可。
# 进入mysql目录 [root@host1 script]# cd ../mysql/ # 删除data目录 [root@host1 script]# rm -rf data/ # 重启mysql容器 [root@host1 script]# docker restart ruoyi-cloud-mysql
4.2.3 故障现象2
mysql容器状态为Exited,但日志错误提示如下:
[root@host1 script]# docker logs ruoyi-cloud-mysql ……此处省略其它输出…… 2024-06-21T12:18:54.525549Z 0 [ERROR] InnoDB: Write to file ./ib_logfile101failed at offset 48234496, 1048576 bytes should have been written, only 151552 were written. Operating system error number 28. Check that your OS and file system support files of this size. Check also that the disk is not full or a disk quota exceeded. 2024-06-21T12:18:54.525557Z 0 [ERROR] InnoDB: Error number 28 means 'No space left on device' 2024-06-21T12:18:54.525561Z 0 [ERROR] InnoDB: Cannot set log file ./ib_logfile101 to size 48 MB 2024-06-21T12:18:54.525565Z 0 [ERROR] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again. 2024-06-21T12:18:55.126070Z 0 [ERROR] Plugin 'InnoDB' init function returned error. 2024-06-21T12:18:55.126090Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2024-06-21T12:18:55.126095Z 0 [ERROR] Failed to initialize builtin plugins. 2024-06-21T12:18:55.126097Z 0 [ERROR] Aborting
从日志提示中的'No space left on device' 可知磁盘空间不足,利用【df -h】命令也可以证明。
[root@host1 mysql]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.6G 12K 3.6G 1% /dev/shm tmpfs 1.5G 8.9M 1.5G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/mapper/openeuler-root 7.8G 7.4G 0 100% /
从上输入可看出根目录(/dev/mapper/openeuler-root )已无可用空间。
4.2.4 解决方案
扩展根目录磁盘空间,具体操作可参考: https://blog.csdn.net/u013007181/article/details/136210663
4.3 验证码无法显示
若提示404错误,且验证码无法显示,请检查mysql基础镜像是否为5.7, Java环境基础镜像是否为openjdk:8-jre,系统内存是否足够大(经测试可能需要要求大于8GB);磁盘空间是否足够。如果上述四个条件都满足,就请再排查其它错误吧。
4.4 业务模块启动失败
4.4.1 故障现象
业务模块(比如ruoyi-cloud-modules-system和ruoyi-cloud-modules-job等)容器启动失败,容器状态为Exited。
[root@host-211-10-184-10 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 789d31b1bf86 ruoyi-cloud-modules-system:latest "java -jar ruoyi-mod…" 21 minutes ago Exited (1) 21 minutes ago ruoyi-cloud-modules-system 6bcb5a9f5465 ruoyi-cloud-modules-job:latest "java -jar ruoyi-mod…" 21 minutes ago Exited (1) 21 minutes ago ruoyi-cloud-modules-job 8f349e9bea0c ruoyi-cloud-mysql:latest "docker-entrypoint.s…" About an hour ago Up About an hour 33060/tcp, 0.0.0.0:13406->3306/tcp ruoyi-cloud-mysql
查看容器日志,提示如下错误:
[root@host1 ~]# docker logs ruoyi-cloud-modules-job ……此处省略其它输出…… Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure Caused by: java.net.UnknownHostException: rouyi-cloud-mysql: Temporary failure in name resolution at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ……此处省略其它输出……
从上述日志消息可以看出是数据库连接失败,且从“rouyi-cloud-mysql: Temporary failure in name resolution”可知,报错的原因是数据库名称解析失败。
4.4.2 解决方案
对比检查4.4.1节中的数据库容器名称和日志报错的数据库名称:
mysql容器名称: ruoyi-cloud-mysql
日志报错的名称:rouyi-cloud-mysql
很容易看出是因为数据库名称错误引起的,请认真检查3.7节中对应业务模块中的配置文件中关于数据库连接的配置。
正确修改配置后,重启对应容器即可。