docker 安装 nacos (单机, 集群)

February . 20 . 2022

环境准备

  • centos 7
  • docker 20.10.6 

1. 拉取镜像

这里以 v2.0.3 为例, 更多版本参考这里

docker pull nacos/nacos-server:v2.0.3

2. 初始化 nacos 数据库

这里以MYSQL 数据库为例, 访问 nacos 官方地址, 下载指定版本的 nacos.zip 并解压到本地。

访问 conf 文件夹, 里面的 nacos-mysql.sql 就是对应 nacos 版本的 MYSQL 初始化脚本。

单机部署

启动一个名为 nacos-test 实例, 并指定 nacos 端口为 7016

docker run -d --name nacos-test -p 7016:7016 \
--env MODE=standalone \
--env NACOS_SERVER_IP=192.168.56.10 \
--env NACOS_APPLICATION_PORT=7016 \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=你的mysql主机地址 \
--env MYSQL_SERVICE_PORT=你的mysql端口 \
--env MYSQL_SERVICE_DB_NAME=数据库名称 \
--env MYSQL_SERVICE_USER=数据库用户名 \
--env MYSQL_SERVICE_PASSWORD=数据库密码 \
--env MYSQL_DATABASE_NUM=1 \
--env MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useSSL=false' \
nacos/nacos-server:v2.0.3

可以使用以下命令查看日志

docker logs -ft --tail 200 nacos-test

启动成功后, 访问 ip + /nacos:7016, 进入 nacos 登陆界面, 默认用户名密码都是 nacos

集群部署

启动一个名为 nacos-cluster-1 实例, 并指定 nacos 端口为 8948

docker run -d --name nacos-cluster-1 -p 8948:8948 \
--env MODE=cluster \
--env NACOS_SERVERS=192.168.56.10:8948,192.168.56.10:8848 \
--env NACOS_SERVER_IP=192.168.56.10 \
--env NACOS_APPLICATION_PORT=8948 \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=你的mysql主机地址 \
--env MYSQL_SERVICE_PORT=你的mysql端口 \
--env MYSQL_SERVICE_DB_NAME=数据库名称 \
--env MYSQL_SERVICE_USER=数据库用户名 \
--env MYSQL_SERVICE_PASSWORD=数据库密码 \
--env MYSQL_DATABASE_NUM=1 \
--env MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useSSL=false' \
nacos/nacos-server:v2.0.3

启动一个名为 nacos-cluster-2 实例, 并指定 nacos 端口为 8848

docker run -d --name nacos-cluster-1 -p 8848:8848\
--env MODE=cluster \
--env NACOS_SERVERS=192.168.56.10:8948,192.168.56.10:8848 \
--env NACOS_SERVER_IP=192.168.56.10 \
--env NACOS_APPLICATION_PORT=8948 \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=你的mysql主机地址 \
--env MYSQL_SERVICE_PORT=你的mysql端口 \
--env MYSQL_SERVICE_DB_NAME=数据库名称 \
--env MYSQL_SERVICE_USER=数据库用户名 \
--env MYSQL_SERVICE_PASSWORD=数据库密码 \
--env MYSQL_DATABASE_NUM=1 \
--env MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useSSL=false' \
nacos/nacos-server:v2.0.3

与单机部署区别在于指定 MODE 为 cluster, 并通过 NACOS-SERVERS 参数设置当前集群下的所有 nacos 实例。

启动成功后, 访问 nacos 控制台 集群管理 下的 节点列表 页面, 这里显示了集群环境中所有 Nacos Server 节点以及对应的状态。

常见问题

如果你碰到了启动失败的问题, 不妨先去检查以下两个地方:

  1. 端口占用: 指定端口被占用, 换个端口重新启动服务。
  2. MySQL 连接不上: 检查数据库配置是否正确, 如果使用的是虚拟机, 需要保证虚拟机和数据库之间是可达的。

属性配置列表

namedescriptionoption
MODEcluster/standalonecluster/standalone default cluster
NACOS_SERVERSnacos cluster addresseg. ip1:port1 ip2:port2 ip3:port3
PREFER_HOST_MODEWhether hostname are supportedhostname/ip default ip
NACOS_APPLICATION_PORTnacos server portdefault 8848
NACOS_SERVER_IPcustom nacos server ip when network was mutil-network
SPRING_DATASOURCE_PLATFORMstandalone support mysqlmysql / empty default empty
MYSQL_SERVICE_HOSTmysql host
MYSQL_SERVICE_PORTmysql database portdefault : 3306
MYSQL_SERVICE_DB_NAMEmysql database name
MYSQL_SERVICE_USERusername of database
MYSQL_SERVICE_PASSWORDpassword of database
MYSQL_DATABASE_NUMIt indicates the number of databasedefault :1
MYSQL_SERVICE_DB_PARAMDatabase url parameterdefault : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
JVM_XMS-Xmsdefault :1g
JVM_XMX-Xmxdefault :1g
JVM_XMN-Xmndefault :512m
JVM_MS-XX:MetaspaceSizedefault :128m
JVM_MMS-XX:MaxMetaspaceSizedefault :320m
NACOS_DEBUGenable remote debugy/n default :n
TOMCAT_ACCESSLOG_ENABLEDserver.tomcat.accesslog.enableddefault :false
NACOS_AUTH_SYSTEM_TYPEThe auth system to use, currently only 'nacos' is supporteddefault :nacos
NACOS_AUTH_ENABLEIf turn on auth systemdefault :false
NACOS_AUTH_TOKEN_EXPIRE_SECONDSThe token expiration in secondsdefault :18000
NACOS_AUTH_TOKENThe default tokendefault :SecretKey012345678901234567890123456789012345678901234567890123456789
NACOS_AUTH_CACHE_ENABLETurn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.default : false
MEMBER_LISTSet the cluster list with a configuration file or command-line argumenteg:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
EMBEDDED_STORAGEUse embedded storage in cluster mode without mysqlembedded default : none
NACOS_AUTH_CACHE_ENABLEnacos.core.auth.caching.enableddefault : false
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLEnacos.core.auth.enable.userAgentAuthWhitedefault : false
NACOS_AUTH_IDENTITY_KEYnacos.core.auth.server.identity.keydefault : serverIdentity
NACOS_AUTH_IDENTITY_VALUEnacos.core.auth.server.identity.valuedefault : security
NACOS_SECURITY_IGNORE_URLSnacos.security.ignore.urlsdefault : /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**

参考链接

1. nacos 官方 GitHub: https://github.com/alibaba/nacos

2. nacos docker hub: https://hub.docker.com/r/nacos/nacos-server

3. docker 教程: https://www.runoob.com/docker/docker-tutorial.html