Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- 拉取镜像:
docker pull nacos/nacos-server:2.2.3
- 运行一个简单的 Nacos 容器。
docker run --detach --name nacos-temp -e MODE=standalone -p 8848:8848 nacos/nacos-server:v2.2.3
44183d468b92565e9fce87696769f80b60732fd2d4c73771b2992c6ab16004a6
查看容器运行状态。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44183d468b92 nacos/nacos-server:v2.2.3 "bin/docker-startup.…" 11 seconds ago Up 10 seconds 0.0.0.0:8848->8848/tcp nacos-temp
访问 Nacos 管理页面,http://127.0.0.1:8848/nacos, 默认账号和口令:nacos/nacos.
- 运行一个实际的 Nacos 容器。
拷贝简单的 Nacos 容器中的配置文件目录到主机目录。
docker cp nacos-temp:/home/nacos/conf /your/path/conf
Successfully copied 61.4kB to /your/path/conf
创建一个 Nacos 容器使用的基础目录 /your/nacos, 并拷贝配置文件目录。
cp /your/path/conf /your/nacos
导航到 Nacos 容器的基础目录。
cd /your/nacos
运行容器。
docker run --detach --name nacos2.2.3 \
--hostname nacos2.2.3 \
--network topeid-network \
-v $PWD/logs:/home/nacos/logs \
-v $PWD/conf:/home/nacos/conf \
-e MODE=standalone \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=no \
nacos/nacos-server:v2.2.3
查看容器运行状态。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
385b838b065b nacos/nacos-server:v2.2.3 "bin/docker-startup.…" 6 seconds ago Up 5 seconds 0.0.0.0:8848->8848/tcp, 0.0.0.0:9848-9849->9848-9849/tcp nacos2.2.3
注意:在运行 Nacos Docker 容器时,一定记住暴露 9848 和 9849 两个端口,否则 Nacos 客户端无法连接到 Nacos 服务端进行服务注册。这是因为 Nacos2.0 版本相比 1.X 新增了 gRPC 的通信方式,因此需要增加 2 个端口,新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
| 端口 | 与主端口的偏移量 | 描述 |
|---|---|---|
| 9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
| 9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
- 配置数据库存储。
如果仔细查看了 Nacos 容器的启动日志,你会发现下面的信息。
2023-06-19 10:53:57,899 INFO Nacos started successfully in stand alone mode. use embedded storage
这条日志信息告诉我们两个关键内容:
- Nacos 服务运行在单机模式 (in stand alone mode)
- Nacso 服务使用内嵌存储保存数据 (use embedded storage)
如果在开发模式下,单机模式和内嵌存储基本可以满足要求;如果在生产环境下,为了实现高可用性,需要运行多个 Nacos 服务,服务注册,配置等数据需要在 Nacos 服务之间共享,就不能使用内嵌存储保存数据 。
下面我们配置 Nacos 服务使用 MySQL 存储数据,实现多个 Nacos 服务共享服务注册和配置等信息。如果你还没有 MySQL 服务,可以参考 Docker--创建MySQL8.
打开 Nacos 配置文件,/your/nacos/conf/application.properties, 修改下列配置项。
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:mysql}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST:spring-mysql8}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME:topeid_nacos_config}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=${MYSQL_SERVICE_USER:nacos}
db.password.0=${MYSQL_SERVICE_PASSWORD:nacos}
创建数据库。
CREATE SCHEMA `nacos_config` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4\_unicode\_ci ;
导入数据表文件,/your/nacos/conf/mysql-schema.sql。
重启 Nacos 容器。
docker restart nacos2.2.3
从启动日志可以看出,Nacos 服务已经使用外部存储了。
docker logs nacos2.2.3
...
2023-06-19 12:15:56,246 INFO Nacos started successfully in stand alone mode. use external storage
参考
致谢
封面图片来自:unsplash.com