写点什么

Docker 下 Nacos 持久化配置

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:3014 字

    阅读完需:约 10 分钟

container_name: mysql


restart: unless-stopped


volumes:


  • ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql

  • ./mysqldata:/var/lib/mysql


command: --default-authentication-plugin=mysql_native_password


environment:


MYSQL_ROOT_PASSWORD: 123456


上述内容有几处需要注意:


a. 第一个 volumes 参数将宿主机的 nacos-mysql.sql 映射到容器的/docker-entrypoint-initdb.d/目录,mysql 容器启动时会执行这个目录下的所有以 sh 和 sql 结尾的文件;


b. 第二个 volumes 参数将 docker-compose.yml 文件所在位置的 mysqldata 目录映射到容器的/var/lib/mysql 目录,这样数据库所有数据都保存在宿主机上了,此 mysqldata 文件夹容器启动时自动创建;


c. command 参数设置了 mysql 的鉴权方式是密码方式;


d. 环境变量 MYSQL_ROOT_PASSWORD 设置了 mysql 的 root 密码为 123456;

准备 nacos 配置文件给 docker-compose.yml 中 nacos 容器使用

接下来需要设置 nacos server 的参数,将 mysql 相关参数配置好,这样 nacos server 启动后就会使用 mysql 保存数据:


  1. 进入刚才下载和解压的 nacos server 安装包,文件 nacos/conf/application.properties 就是我们所需的配置文件;

  2. 将文件 application.properties 复制到 docker-compose.yml 所在目录;

  3. 打开文件 application.properties,在尾部新增以下内容,这些是 mysql 相关的配置:


spring.datasource.platform=mysql


db.num=1


db.url.0=jdbc:mysql://mysql:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true


db.user=root


db.password=123456


  1. 打开 docker-compose.yml 文


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


件,找到 nacos 的配置,修改后的内容如下:


nacos:


image: bolingcavalry/nacosserver:0.0.1


container_name: nacos


restart: unless-stopped


volumes:


  • ./application.properties:/root/nacos/conf/application.properties


depends_on:


  • mysql


ports:


  • '8848:8848'


如上所示,nacos 的配置有两处修改:


a. 增加 volumes,将宿主机的 application.properties 文件映射到容器中,作为 nacos 的配置文件;


b. 增加依赖配置,在 mysql 容器启动成功后才会启动 nacos;


完整的 docker-compose.yml 内容如下:


version: '2'


services:


mysql:


image: mysql:5.7.27


container_name: mysql


restart: unless-stopped


volumes:


  • ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql

  • ./mysqldata:/var/lib/mysql


command: --default-authentication-plugin=mysql_native_password


ports:


  • '3306:3306'


environment:


MYSQL_ROOT_PASSWORD: 123456


nacos:


image: bolingcavalry/nacosserver:0.0.1


container_name: nacos


restart: unless-stopped


volumes:


  • ./application.properties:/root/nacos/conf/application.properties


depends_on:


  • mysql


ports:


  • '8848:8848'


config-demo:


image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT


container_name: config-demo


restart: unless-stopped


depends_on:


  • nacos


ports:


  • '8080:8080'


至此,准备完毕,可以验证了;

验证

首先验证 nacos 的配置服务是否正常,验证方法和操作步骤和《Docker下,两分钟极速体验Nacos配置中心》完全一致,下面给出关键步骤:


  1. 在 docker-compose.yml 文件所在目录执行以下命令,即可启动所有容器:


docker-compose up -d


  1. 我这里宿主机的 IP 是 192.168.121.131,登录 Nacos 的 web 页面,创建应用所需的配置项,地址是:http://192.168.121.131:8848/nacos ,用户名和密码都是 nacos;

  2. 如下图,新增一个配置项:



  1. 浏览器访问地址:http://192.168.121.131:8080/test ,如下图,可见应用已经从 nacos 取得了配置:



再来看看 mysql 的数据;


  1. 在宿主机执行命令 docker exec -it mysql /bin/bash 进入容器;

  2. 进入容器后,执行命令 mysql -h127.0.0.1 -uroot -p123456 连接 MySQL;

  3. 参考以下的命令,检查 MySQL 的数据,可见刚才配置的数据都存入了 MySQL:


mysql> show databases;


+--------------------+


| Database |


+--------------------+


| information_schema |


| mysql |


| nacos_config |


| performance_schema |


| sys |


+--------------------+


5 rows in set (0.00 sec)


mysql> use nacos_config;


Reading table information for completion of table and column names


You can turn off this feature to get a quicker startup with -A


Database changed


mysql> show tables;


+------------------------+


| Tables_in_nacos_config |


+------------------------+


| config_info |


| config_info_aggr |


| config_info_beta |


| config_info_tag |


| config_tags_relation |


| group_capacity |


| his_config_info |


| roles |


| tenant_capacity |


| tenant_info |


| users |


+------------------------+


11 rows in set (0.00 sec)


mysql> select * from config_info \G


*************************** 1. row ***************************


id: 1


data_id: my-nacos-config.yaml


group_id: BOLING_CAVALRY


content: bolingcavalry:


desc: desc from nacos yaml config


md5: f44c8fd76e8da757380e8f7ddabe6e70


gmt_create: 2019-08-31 13:53:01


gmt_modified: 2019-08-31 13:53:01


src_user: NULL


src_ip: 192.168.121.1


app_name:


tenant_id:


c_desc: nacos config demo


c_use: NULL


effect: NULL


type: yaml


c_schema: NULL


1 row in set (0.00 sec)


至此,可以确定在 Docker 环境下,Nacos 使用 MySQL 进行持久化存储操作成功,接下来我们验证即使容器被删除,数据也可以恢复

删除容器,再重建容器,确认数据可以完全恢复

  1. 在 docker-compose.yml 所在的目录下执行以下命令,会停止所有容器并将其删除:


docker-compose down


  1. 执行 docker ps -a,确认宿主机上已经没有任何容器存在:


[root@maven test]# docker-compose down


Stopping config-demo ... done


Stopping nacos ... done


Stopping mysql ... done


Removing config-demo ... done


Removing nacos ... done


Removing mysql ... done


Removing network test_default


[root@maven test]# docker ps -a


CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES


  1. 此时就相当于整个环境已经不存在了,但是 MySQL 的数据文件夹已经被映射到宿主机,就是 mysqldata 目录;

  2. 接下来我们要做的是重新创建所有容器,但是要使用之前的数据,因此不需要再执行 nacos-mysql.sql 了,在 docker-compose.yml 中去掉 mysql 容器的 nacos-mysql.sql 这个 volumens 参数:


version: '2'


services:


mysql:


image: mysql:5.7.27


container_name: mysql


restart: unless-stopped


volumes:


  • ./mysqldata:/var/lib/mysql


command: --default-authentication-plugin=mysql_native_password


ports:


  • '3306:3306'


environment:


MYSQL_ROOT_PASSWORD: 123456


nacos:


image: bolingcavalry/nacosserver:0.0.1


container_name: nacos


restart: unless-stopped


volumes:


  • ./application.properties:/root/nacos/conf/application.properties


depends_on:


  • mysql


ports:


  • '8848:8848'


config-demo:


image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT


container_name: config-demo


restart: unless-stopped


depends_on:


  • nacos


ports:

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Docker下Nacos持久化配置