基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

07-11 1685阅读

一、说明

本文配置环境为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”,

基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

点击左侧的“镜像资源”-->“镜像中心”,然后点击右上角的“镜像加速器”,打开如下图所示的窗口,并按其中的操作说明修改/etc/docker/daemon.json文件即可。

基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

阿里云的容器加速器服务可参考帮助: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部署该项目的部署架构如下图所示。

    基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

    上图中,各容器实例提供的服务简介绍如下:

    • 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压缩包。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      解压后的文件和目录如下:

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.1.3 修改配置文件

      3.1.3.1 修改ruoyi-auth配置文件

      编辑源码目录\ruoyi-auth\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名称,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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地址,端口号更改为服务器对外映射端口(如果有的话),如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.1.3.3 修改ruoyi-modules-file配置文件

      编辑源码目录\ruoyi-modules\ruoyi-file\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.1.3.4 修改ruoyi-modules-gen配置文件

      编辑源码目录\ruoyi-modules\ruoyi-gen\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.1.3.5 修改ruoyi-modules-job配置文件

      编辑源码目录\ruoyi-modules\ruoyi-job\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.1.3.6 修改ruoyi-modules-system配置文件

      编辑源码目录\ruoyi-modules\ruoyi-system\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.1.3.7 修改ruoyi-monitor配置文件

      编辑源码目录\ruoyi-visual\ruoyi-monitor\src\main\resources下的bootstrap.yml配置文件,将其中的127.0.0.1替换成nacos容器名,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录中建立如下图所示的目录结构。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      示例命令如下:

      [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则为测试环境,以下以构建生产环境为例。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      在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/目录,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.3.2 上传nginx配置文件

      将conf文件夹下的nginx.conf文件利用xftp上传至Linux服务器的/ruoyi-cloud/nginx/conf目录,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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编译构建过程如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      将编译构建的jar包复制保存在本地某个目录(比如源码根目录下的jar)。 

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.5 构建后端镜像

      3.5.1 构建gateway镜像

      3.5.1.1 上传jar包

      将编译构建的ruoyi-gateway.jar包上传至/ruoyi-cloud/ruoyi/gateway/jar目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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目录下,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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,打开如下所示界面。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      默认登录账号和密码均为nacos,登录后的页面如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.7.2 配置ruoyi-gateway-dev.yml

      在nacos配置中心的配置列表中,点击ruoyi-gateway-dev.yml右侧的“编辑”,在打开的页面中,将localhost改为redis容器名称,并设置password的值修改成3.1.6节中redis.conf配置文件中指定的值,其它默认,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      确认无误后,点击右下角的“发布”按钮发布新的配置。 

      3.7.3 配置ruoyi-auth-dev.yml

      在nacos配置中心的配置列表中,点击ruoyi-auth-dev.yml右侧的“编辑”,在打开的页面中,将localhost改为redis容器名称,并设置password的值修改成3.1.6节中redis.conf配置文件中指定的值,其它默认,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

       确认无误后,点击右下角的“发布”按钮发布新的配置。

      3.7.4 配置ruoyi-system-dev.yml

      在nacos配置中心的配置列表中,点击ruoyi-system-dev.yml右侧的“编辑”,在打开的页面中,在redis节,将localhost改为redis容器名称,并设置password的值修改成3.1.6节中redis.conf配置文件中指定的值,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      在数据源datasource节,将localhost改为mysql容器名称,密码与3.1.4节中nacos配置文件中的一致。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      其它默认,确认无误后,点击右下角的“发布”按钮发布新的配置。

      3.7.5 配置ruoyi-gen-dev.yml

      在nacos配置中心的配置列表中,点击ruoyi-gen-dev.yml右侧的“编辑”,在打开的页面中,配置内容与3.7.4节一样,不再赘述,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.7.6 配置ruoyi-job-dev.yml

      在nacos配置中心的配置列表中,点击ruoyi-job-dev.yml右侧的“编辑”,在打开的页面中,配置内容与3.7.4节一样,不再赘述,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      3.7.7 配置ruoyi-file-dev.yml

      在nacos配置中心的配置列表中,点击ruoyi-file-dev.yml右侧的“编辑”,在打开的页面中,将端口号9300前面的127.0.0.1改为容器名称,path值可根据自身情况修改,如下所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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地址,可成功访问前端登录页面,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      以默认的管理员账号admin/admin123登录,可成功访问后端页面,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      访问服务器IP:9100,可监控系统服务状态,默认账号密码为ruoyi/123456(3.7节中ruoyi-monitor-dev.yml配置文件中可查看和修改)

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

       访问服务器IP:8080/swagger-ui/index.html#/gen-controller,可成功访问代理生成接口文档,如下图所示。

      基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

      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节中对应业务模块中的配置文件中关于数据库连接的配置。

      正确修改配置后,重启对应容器即可。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]