Nacos官网提供了nacos-docker项目,用于docker环境构建单机、集群模式。目录结构如下:
下面的配置参照根目录下 example/cluster-hostname.yaml example/standalone-mysql-8.yaml 配置文件配置。
下载nacos-docker项目的zip压缩包:https://github.com/nacos-group/nacos-docker
解压:unzip nacos-docker.zip
cd nacos-docker
cp example/cluster-hostname.yaml my-cluster-hostname.yaml
编辑compose文件,my-cluster-hostname.yaml, 修改禁用内部mysql服务
version: "3"
services:
nacos1:
hostname: nacos1
container_name: nacos1
image: nacos/nacos-server:latest
volumes:
# nacos使用mysql8 需要使用插件目录,该目录存放mysql-connect-java8的驱动,将解压包内example/plugins复制到上级目录
- ./plugins/mysql/:/home/nacos/plugins/mysql/
- ./cluster-logs/nacos1:/home/nacos/logs
# 此处的配置文件来自于example/init.d, 需要移到与example同级
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties # example/init.d/custom.properties复制到上级目录
ports:
- "8848:8848"
- "9555:9555"
#environment:
# JVM_XMS: 512m
env_file:
- ./env/nacos-hostname.env
restart: always
# 去掉mysql服务器依赖
#depends_on:
# - mysql
nacos2:
hostname: nacos2
image: nacos/nacos-server:latest
container_name: nacos2
volumes:
- ./plugins/mysql/:/home/nacos/plugins/mysql/
- ./cluster-logs/nacos2:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8849:8848"
env_file:
- ./env/nacos-hostname.env
restart: always
#depends_on:
# - mysql
nacos3:
hostname: nacos3
image: nacos/nacos-server:latest
container_name: nacos3
volumes:
- ./plugins/mysql/:/home/nacos/plugins/mysql/
- ./cluster-logs/nacos3:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8850:8848"
env_file:
- ./env/nacos-hostname.env
restart: always
#depends_on:
# - mysql
# 去掉内部mysql
# mysql:
# container_name: mysql
# image: nacos/nacos-mysql:5.7
# env_file:
# - env/mysql.env
# volumes:
# - /var/mysql:/var/lib/mysql
# ports:
# - "3306:3306"
将example/plugins目录移动到与example同级,plugins内存放是mysql8的driver。
修改环境变量文件env/nacos-hostname.env,修改mysql配置:
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
# 改为外部mysql的ip地址,配置用户名密码nacos_config
MYSQL_SERVICE_HOST=192.168.1.123
MYSQL_SERVICE_DB_NAME=nacos_config
MYSQL_SERVICE_PORT=33066
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
# 自定义jvm参数,更多:https://nacos.io/zh-cn/docs/quick-start-docker.html
JVM_XMS=512m
JVM_XMX=512m
JVM_XMN=256m
JVM_MS=64m
JVM_MMS=128m
下载nacos-db初始化脚本,并创建mysql数据库和nacos用户:
wget https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
create database nacos_config character set utf8
use nacos_config;
source nacos-mysql.sql;
create user 'nacos'@'%' identified by 'nacos';
grant all privileges on nacos_config.* to 'nacos'@'%' WITH GRANT OPTION;
flush privileges;
启动:docker-compose -f my-cluster-hostname.yaml up (-d 后台启动),会在当前目录(nacos-docker)生成cluster-logs日志文件,每个nacos一个日志文件夹。
使用mysql8,未使用mysql-connector-java-8.x.x.jar的驱动,启动docker后,访问8848端口出现:connection reset by peer.
nacos日志目录:
cluster-logs/nacos1/config-fatal.log出现:nacos [master-db] master db not found.
cluster-logs/nacos1/nacos.log出现:Nacos Server did not start because dumpservice bean construction failure : ...
最后注意一点:安装的mysql时区默认为cst,通过spring json注解格式化以后会出现3小时或者4个小时的误差,需要在mysql链接上增加:&useTimezone=true&serverTimezone=GMT%2B8, 例如:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&allowMultiQueries=true&useTimezone=true&serverTimezone=GMT%2B8