Docker 下 Nacos 持久化配置
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本文是《Spring Cloud Alibaba 实战系列》的第五篇,学习如何将 Nacos 服务所用的数据库从嵌入式数据库改为 MySql。
系列文章链接
下面是《Spring Cloud Alibaba 实战系列》的所有文章地址:
官方操作指导
下图是来自官方的操作指导,地址是:https://nacos.io/zh-cn/docs/deployment.html ,可见步骤很简单:
如果您是在物理机上操作,按照上述步骤即可完成,如果您的 Nacos 部署在 Docker 上,下本文可以用来做参考:
环境信息
Nacos server 版本:1.1.0
操作系统:CentOS Linux release 7.6.1810
Docker:1.13.1, build b2f74b2/1.13.1
docker-compose:1.24.1, build 4667896
jdk:1.8.0_191
maven:3.6.0
Nacos 的镜像和测试应用都来自《Docker下,两分钟极速体验Nacos配置中心》一文,编排容器的 docker-compose.yml 内容如下:
Docker 环境操作步骤简介
简单介绍一下整个实战的步骤:
准备初始化 nacos 数据库的 sql 脚本;
docker-compose.yml 中增加 mysql,并设置容器创建时执行前面的 sql 脚本;
准备 nacos 配置文件给 docker-compose.yml 中 nacos 容器使用;
启动,验证功能正常;
检查数据库中是否有数据;
删除容器,再重建容器,确认数据可以完全恢复;
接下来一起实战吧。
准备初始化 nacos 数据库的 sql 脚本
此 sql 用于创建 nacos server 运行所需的表和数据,去下载 nacos server 安装包,地址是:https://github.com/alibaba/nacos/releases/download/1.1.0/nacos-server-1.1.0.tar.gz ;
下载的安装包解压后,文件 nacos/conf/nacos-mysql.sql 就是我们所需的 sql 脚本;
打开此脚本,可见内容中没有创建数据库,这样的脚本在 mysql 的 docker 容器内无法自动执行,需要在 sql 文件的开始位置添加以下内容:
将文件 nacos-mysql.sql 放在 docker-compose.yml 所在目录下;
docker-compose.yml 中增加 mysql
接下来在容器编排文件 docker-compose.yml 中增加 mysql 容器:
在 docker-compose.yml 中增加 mysql 容器,新增的 mysql 编排信息放在最前面,内容如下:
上述内容有几处需要注意: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 保存数据:
进入刚才下载和解压的 nacos server 安装包,文件 nacos/conf/application.properties 就是我们所需的配置文件;
将文件 application.properties 复制到 docker-compose.yml 所在目录;
打开文件 application.properties ,在尾部新增以下内容,这些是 mysql 相关的配置:
打开 docker-compose.yml 文件,找到 nacos 的配置,修改后的内容如下:
如上所示,nacos 的配置有两处修改:a. 增加 volumes,将宿主机的 application.properties 文件映射到容器中,作为 nacos 的配置文件;b. 增加依赖配置,在 mysql 容器启动成功后才会启动 nacos;
完整的 docker-compose.yml 内容如下:
至此,准备完毕,可以验证了;
验证
首先验证 nacos 的配置服务是否正常,验证方法和操作步骤和《Docker下,两分钟极速体验Nacos配置中心》完全一致,下面给出关键步骤:
在 docker-compose.yml 文件所在目录执行以下命令,即可启动所有容器:
我这里宿主机的 IP 是 192.168.121.131,登录 Nacos 的 web 页面,创建应用所需的配置项,地址是:http://192.168.121.131:8848/nacos ,用户名和密码都是 nacos;
如下图,新增一个配置项:
浏览器访问地址:http://192.168.121.131:8080/test ,如下图,可见应用已经从 nacos 取得了配置:
再来看看 mysql 的数据;
在宿主机执行命令 docker exec -it mysql /bin/bash 进入容器;
进入容器后,执行命令 mysql -h127.0.0.1 -uroot -p123456 连接 MySQL;
参考以下的命令,检查 MySQL 的数据,可见刚才配置的数据都存入了 MySQL:
至此,可以确定在 Docker 环境下,Nacos 使用 MySQL 进行持久化存储操作成功,接下来我们验证即使容器被删除,数据也可以恢复
删除容器,再重建容器,确认数据可以完全恢复
在 docker-compose.yml 所在的目录下执行以下命令,会停止所有容器并将其删除:
执行 docker ps -a ,确认宿主机上已经没有任何容器存在:
此时就相当于整个环境已经不存在了,但是 MySQL 的数据文件夹已经被映射到宿主机,就是 mysqldata 目录;
接下来我们要做的是重新创建所有容器,但是要使用之前的数据,因此不需要再执行 nacos-mysql.sql 了,在 docker-compose.yml 中去掉 mysql 容器的 nacos-mysql.sql 这个 volumens 参数:
再次执行 docker-compose up -d ,启动所有容器;
打开 nacos 的配置页面,原来的数据还在:
访问 demo 应用,依然可以成功从 nacos 取得配置内容:
至此,Docker 下 Nacos 持久化配置实战就完成了,希望能给您的容器化项目提供一些参考。
官方 Docker 服务
Naocs 的官方也给出了 Docker 下的 Nacos 镜像以及对应的编排操作指南,地址是:https://github.com/nacos-group/nacos-docker ,您也可以根据官方指导来实践,官方编排提供了更多的设置和配置,功能更强大,但是由于内容过多(例如 Mysql 使用了主从的容器设置),不适合本次文章的主题,因此我这里依然沿用了之前自己动手做的镜像;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/5f42711563851f4a5f5abf7c1】。文章转载请联系作者。
评论