一、官方文档
特别注意:官方文档中的Docker运行的公共属性配置很久没有更新了,特别是数据库这一块,Docker运行最好参照Docker Hub官方的运行公共属性。 Docker Hubhttps://hub.docker.com/r/nacos/nacos-server/tags
二、安装与配置
1、拉取Docker Hub镜像
# 拉取nacos-server镜像
$ docker pull nacos/nacos-server:v2.0.3
# 查看拉取的镜像
$ docker images
2、目录结构说明
3、配置和启动运行
这里我们采用分别运行
- standalone-mysql-5.7.yaml 单机MySQL5.7版本数据库(推荐)
- cluster-hostname.yaml 集群hostname模式nacos采用MySQL数据库(推荐)
.
├── cluster-hostname.yaml docker-compose集群启动运行配置
├── docker-compose-cluster-run.sh docker-compose集群启动脚本
├── docker-compose-standalone-run.sh docker-compose单机启动脚本
├── env 运行的环境参数
│ ├── nacos-hostname.env hostname模式集群运行环境参数配置文件
│ └── nacos-standlone-mysql.env 单机运行环境参数配置文件
├── init.d 初始化文件
│ └── custom.properties 监控自定义配置文件
└── standalone-mysql-5.7.yaml 采用MySQL5.7单机运行
3.1、单机MySQL5.7版本数据库(推荐)
version: "2"
services:
# 指定服务名称
nacos:
# 指定服务使用的镜像
image: nacos/nacos-server:v2.0.3
# 指定容器名称
container_name: nacos-standalone-mysql
# 指定环境变量配置文件
env_file:
- ./env/nacos-standlone-mysql.env
# 挂载的配置文件目录
volumes:
# 挂载日志文件
- ./standalone-logs/:/home/nacos/logs
# 挂载自定义服务监控配置文件
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
# 指定服务运行的端口映射
ports:
- "8848:8848"
- "9848:9848"
- "9555:9555"
# 在容器非正常退出时重启容器,最多重启3次
restart: on-failure
-
/env/nacos-standlone-mysql.env
$ docker-compose -f standalone-mysql-5.7.yaml up -d
启动成功
3.2、集群hostname模式nacos采用MySQL数据库(推荐)
-
cluster-hostname.yaml
version: "3"
services:
# 指定服务名称
nacos1:
# 指定主机名,在env/nacos-hostname.env 配置中采用 NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
hostname: nacos1
# 指定容器名称
container_name: nacos1
# 指定服务使用的镜像
image: nacos/nacos-server:v2.0.3
# 挂载的配置文件目录
volumes:
# 挂载日志文件
- ./cluster-logs/nacos1:/home/nacos/logs
# 挂载自定义服务监控配置文件
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
# 指定服务运行的端口映射
ports:
- "8848:8848"
- "9848:9848"
- "9555:9555"
# 指定环境变量配置文件
env_file:
- ./env/nacos-hostname.env
# 在容器退出时总是重启容器
restart: always
# 指定服务名称
nacos2:
# 指定主机名,在env/nacos-hostname.env 配置中采用 NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
hostname: nacos2
# 指定服务使用的镜像
image: nacos/nacos-server:v2.0.3
# 指定容器名称
container_name: nacos2
# 挂载的配置文件目录
volumes:
# 挂载日志文件
- ./cluster-logs/nacos2:/home/nacos/logs
# 挂载自定义服务监控配置文件
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
# 指定服务运行的端口映射
ports:
- "8849:8848"
- "9849:9848"
# 指定环境变量配置文件
env_file:
- ./env/nacos-hostname.env
# 在容器退出时总是重启容器
restart: always
# 指定服务名称
nacos3:
# 指定主机名,在env/nacos-hostname.env 配置中采用 NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
hostname: nacos3
# 指定服务使用的镜像
image: nacos/nacos-server:v2.0.3
# 指定容器名称
container_name: nacos3
# 挂载的配置文件目录
volumes:
# 挂载日志文件
- ./cluster-logs/nacos3:/home/nacos/logs
# 挂载自定义服务监控配置文件
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
# 指定服务运行的端口映射
ports:
- "8850:8848"
- "9850:9848"
# 指定环境变量配置文件
env_file:
- ./env/nacos-hostname.env
# 在容器退出时总是重启容器
restart: always
-
nacos-hostname.env
### nacos env
# cluster模式/standalone模式 cluster/standalone default cluster
MODE=cluster
# 是否支持hostname hostname/ip default ip
PREFER_HOST_MODE=hostname
# nacos cluster地址 cluster-hostname.yaml中的hostname主机名对应
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
# standalone 支持 mysql mysql / empty default empty
SPRING_DATASOURCE_PLATFORM=mysql
# MySQL数据库host
MYSQL_SERVICE_HOST=172.18.75.176
# MySQL数据库
MYSQL_SERVICE_DB_NAME=nacos_config
# MySQL数据库端口
MYSQL_SERVICE_PORT=3306
# MySQL数据库用户名
MYSQL_SERVICE_USER=nacos_rw
# MySQL数据库密码
MYSQL_SERVICE_PASSWORD=123456
# MySQL数据连接后面的参数
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
- docker-compose-cluster-run.sh
$ docker-compose -f cluster-hostname.yaml up -d
3.3、集群ip模式nacos采用MySQL数据库
集群ip模式 和 hostname模式唯一不同的点就是,ip模式需要配置指定的ip地址
-
cluster-ip.yaml 与 cluster-hostname.yaml 对比
ip地址和hostname
网络桥接模式
nacos-hostname.env 和 nacos-ip.env
三、遇到问题
gRpc连接问题
参考文章
Springboot启动提示:com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception_奋斗者潘的博客-程序员宝宝 - 程序员宝宝https://cxybb.com/article/keypanj2ee/118725971
解决方案
集群模式可以通过Nginx反向代理,或者通过阿里云的负载均衡(CLB)解决
- 代理Http端口
http {
......
# nacos server服务器 部署在39.108.192.223 /usr/local/deploy/nacos-server
upstream nacos_server_http_upstream {
server 172.18.75.167:8848;
server 172.18.75.167:8849;
server 172.18.75.167:8850;
}
server {
listen 8848;
server_name 127.0.0.1;
charset utf-8;
access_log logs/nacos_servers_access.log main;
include proxy.conf;
location / {
proxy_pass http://nacos_server_http_upstream;
}
location ~ ^/(WEB-INF)/ {
deny all;
}
location ~ \.(php|asp|aspx) {
deny all;
}
}
......
}
- 代理Tcp端口
stream {
# 全局配置
preread_timeout 120s;
proxy_connect_timeout 120s;
proxy_protocol_timeout 120s;
resolver_timeout 120s;
proxy_timeout 120s;
tcp_nodelay on;
# 设置日志格式
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" "$upstream_bytes_sent"'
'"$upstream_bytes_received" "$upstream_connect_time"';
access_log logs/stream.access.log proxy;
error_log logs/stream.error.log error;
upstream nacos_server_grpc_tcp_stream {
server 172.18.75.167:9848;
server 172.18.75.167:9849;
server 172.18.75.167:9850;
}
server{
listen 9848;
proxy_connect_timeout 20s;
proxy_timeout 5m;
proxy_pass nacos_server_grpc_tcp_stream;
}
}