Docker下Nacos持久化配置
本文是《Spring Cloud Alibaba实战系列》的第五篇,学习如何将Nacos服务所用的数据库从嵌入式数据库改为MySql。
系列文章链接
下面是《Spring Cloud Alibaba实战系列》的所有文章地址:
- 《Docker下,两分钟极速体验Nacos》;
- 《Docker下的Nacos环境开发》;
- 《Docker下,两分钟极速体验Nacos配置中心》;
- 《Docker下Nacos配置应用开发》;
- 《Docker下Nacos持久化配置》;
官方操作指导
下图是来自官方的操作指导,地址是: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内容如下:
version: '2'
services:nacos:image: bolingcavalry/nacosserver:0.0.1container_name: nacosrestart: unless-stoppedports:- '8848:8848'config-demo:image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOTcontainer_name: config-demorestart: unless-stoppeddepends_on:- nacosports:- '8080:8080'
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文件的开始位置添加以下内容:
CREATE DATABASE nacos_config;
use nacos_config;
- 将文件nacos-mysql.sql放在docker-compose.yml所在目录下;
docker-compose.yml中增加mysql
接下来在容器编排文件docker-compose.yml中增加mysql容器:
- 在docker-compose.yml中增加mysql容器,新增的mysql编排信息放在最前面,内容如下:
mysql:image: mysql:5.7.27container_name: mysqlrestart: unless-stoppedvolumes:- ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql- ./mysqldata:/var/lib/mysqlcommand: --default-authentication-plugin=mysql_native_passwordenvironment: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保存数据:
- 进入刚才下载和解压的nacos server安装包,文件nacos/conf/application.properties就是我们所需的配置文件;
- 将文件application.properties复制到docker-compose.yml所在目录;
- 打开文件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
- 打开docker-compose.yml文件,找到nacos的配置,修改后的内容如下:
nacos:image: bolingcavalry/nacosserver:0.0.1container_name: nacosrestart: unless-stoppedvolumes:- ./application.properties:/root/nacos/conf/application.propertiesdepends_on:- mysqlports:- '8848:8848'
如上所示,nacos的配置有两处修改:
a. 增加volumes,将宿主机的application.properties文件映射到容器中,作为nacos的配置文件;
b. 增加依赖配置,在mysql容器启动成功后才会启动nacos;
完整的docker-compose.yml内容如下:
version: '2'
services:mysql:image: mysql:5.7.27container_name: mysqlrestart: unless-stoppedvolumes:- ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql- ./mysqldata:/var/lib/mysqlcommand: --default-authentication-plugin=mysql_native_passwordports:- '3306:3306'environment:MYSQL_ROOT_PASSWORD: 123456nacos:image: bolingcavalry/nacosserver:0.0.1container_name: nacosrestart: unless-stoppedvolumes:- ./application.properties:/root/nacos/conf/application.propertiesdepends_on:- mysqlports:- '8848:8848'config-demo:image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOTcontainer_name: config-demorestart: unless-stoppeddepends_on:- nacosports:- '8080:8080'
至此,准备完毕,可以验证了;
验证
首先验证nacos的配置服务是否正常,验证方法和操作步骤和《Docker下,两分钟极速体验Nacos配置中心》完全一致,下面给出关键步骤:
- 在docker-compose.yml文件所在目录执行以下命令,即可启动所有容器:
docker-compose up -d
- 我这里宿主机的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:
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 -ADatabase 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: 1data_id: my-nacos-config.yamlgroup_id: BOLING_CAVALRYcontent: bolingcavalry:desc: desc from nacos yaml configmd5: f44c8fd76e8da757380e8f7ddabe6e70gmt_create: 2019-08-31 13:53:01
gmt_modified: 2019-08-31 13:53:01src_user: NULLsrc_ip: 192.168.121.1app_name: tenant_id: c_desc: nacos config democ_use: NULLeffect: NULLtype: yamlc_schema: NULL
1 row in set (0.00 sec)
至此,可以确定在Docker环境下,Nacos使用MySQL进行持久化存储操作成功,接下来我们验证即使容器被删除,数据也可以恢复
删除容器,再重建容器,确认数据可以完全恢复
- 在docker-compose.yml所在的目录下执行以下命令,会停止所有容器并将其删除:
docker-compose down
- 执行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
- 此时就相当于整个环境已经不存在了,但是MySQL的数据文件夹已经被映射到宿主机,就是mysqldata目录;
- 接下来我们要做的是重新创建所有容器,但是要使用之前的数据,因此不需要再执行nacos-mysql.sql了,在docker-compose.yml中去掉mysql容器的nacos-mysql.sql这个volumens参数:
version: '2'
services:mysql:image: mysql:5.7.27container_name: mysqlrestart: unless-stoppedvolumes:- ./mysqldata:/var/lib/mysqlcommand: --default-authentication-plugin=mysql_native_passwordports:- '3306:3306'environment:MYSQL_ROOT_PASSWORD: 123456nacos:image: bolingcavalry/nacosserver:0.0.1container_name: nacosrestart: unless-stoppedvolumes:- ./application.properties:/root/nacos/conf/application.propertiesdepends_on:- mysqlports:- '8848:8848'config-demo:image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOTcontainer_name: config-demorestart: unless-stoppeddepends_on:- nacosports:- '8080:8080'
- 再次执行docker-compose up -d,启动所有容器;
- 打开nacos的配置页面,原来的数据还在:
- 访问demo应用,依然可以成功从nacos取得配置内容:
至此,Docker下Nacos持久化配置实战就完成了,希望能给您的容器化项目提供一些参考。
官方Docker服务
Naocs的官方也给出了Docker下的Nacos镜像以及对应的编排操作指南,地址是:https://github.com/nacos-group/nacos-docker ,您也可以根据官方指导来实践,官方编排提供了更多的设置和配置,功能更强大,但是由于内容过多(例如Mysql使用了主从的容器设置),不适合本次文章的主题,因此我这里依然沿用了之前自己动手做的镜像;
欢迎关注我的公众号:程序员欣宸
Docker下Nacos持久化配置相关推荐
- Docker下Nacos配置应用开发
本文是在<Docker下,两分钟极速体验Nacos配置中心>一文的续篇,前面我们快速搭建Nacos配置中心,并且运行一个springboot应用来使用该配置中心的服务,今天来研究这个spr ...
- Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos
Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos 前言 一.Docker中安装配置Nacos 安装Docker 拉取Nacos镜像 启动 ...
- docker下gitlab安装配置使用(完整版)
docker下gitlab安装配置使用(完整版) 22018.12.16 00:07:57字数 737阅读 17595 docker 安装gitlab以及使用 一.安装及配置 1.gitlab镜像拉取 ...
- 1. emqx docker安装以及持久化配置
emqx介绍 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器. Erlang/OT ...
- Linux同时安装二个redis,「进击Redis」二、Linux、Docker下安装与配置
前言现在好哥哥们已经知道了 Redis 是啥了吧,不,你们不知道.还要看看初识 Redis .什么,你已经看过了,没关系再看一遍,看完没点赞的记得点个赞,在这谢谢好哥哥们了. 今天我们就来在Linux ...
- Win10中Docker下修改mysql配置(主要修改utf-8字符集)
由于要修改MySQL的配置文件,在命令行修改每次重启都会失效,所以想修改Docker下的mysql配置文件,这样将其再作为一个镜像保存,以后就可以一劳永逸了. 在Win10的Docker容器中进行vi ...
- nacos持久化配置MySQL8_Nacos 数据持久化 mysql8.0
java java8 java开发 Nacos 数据持久化 mysql8.0 一.问题描述 直接下载的稳定版本nacos编译后的文件,不支持mysql8及其以上版本,按照官网文档:https://na ...
- docker下交叉编译环境配置
为什么在docker中搭建开发环境? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器 ...
- docker下gitlab安装配置使用
一.安装及配置 1.gitlab镜像拉取 # gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本 $ docker pull gitlab/gitlab-ce 拉取镜像 2 ...
最新文章
- 随机信号的傅里叶分析
- 关于JavaScript的浅拷贝和深拷贝
- Python 读写CSV文件
- UIwebView缩放
- SQL Server FILESTREAM数据库损坏和修复
- matlab 工具函数(一) —— 添加指定 SNR 的噪声
- 锁表 for update
- Canonical发布企业级Kubernetes 1.14重点让使用者简单管理
- 报表问题~~只有这么多分了~~~~-_-~
- Aspose.word保存PDF时进行授权访问设置
- kali破解wifi 密码(仅供学习)
- 中软酒店管理系统CSHIS操作手册_数据结构_数据字典
- android 9平板电脑截屏,平板电脑怎么截图 平板电脑截图方法【详解】
- 极狐公司官方澄清声明
- 全世界国家的数据库sql
- Struts1与Struts2对比分析
- 广域网协议(HDLC协议和PPP协议)
- 华为“721法则”:如何让新员工快速融入“狼群”
- win10重置进度条不动了_win10系统重置卡在28%不动没反应的解决方法 - 系统家园...
- JavaScript高级程序设计第四版_英文版