Docker 部署 Nacos 集群
1. 准备镜像
既然是部署 Nacos 集群,那么必须准备 Nacos 镜像 。
Nacos 默认内置一个 Derby 数据库,在集群模式中需要统一数据源,所以这边还需要一个 mysql 镜像
集群部署完毕之后,我们可以通过 ip:port
的方式访问集群中每一台机器。但是集群作为一个整体,更好地方式是通过 NGINX 做一个负载均衡,然后把访问均匀的打到不同的机器上。所以本文中还引入了一个 NGINX 镜像。
- Nacos 镜像:https://hub.docker.com/r/nacos/nacos-server
- MySQL 镜像 https://hub.docker.com/_/mysql/tags?page=1&ordering=-last_updated
- Nginx 镜像:https://hub.docker.com/_/nginx
docker pull nginx
docker pull nacos/nacos-server
docker pull mysql:5.7.5
macOS 用户需要注意
需要注意的是,如果你的机器是 apple silicon m1 (pro/max) 的芯片,请使用支持 arm 架构的 nacos,我这边用的是 chenfengwei/nacos。如果使用 nacos:latest 则无法启动集群模式,nginx 我用的 homebrew 安装的,没用 docker 启动 NGINX。
docker pull chenfengwei/nacos:v1
配置 docker network
首先需要保证 Nacos 集群中各台主机能够互联互通,因为Nacos 集群中每台主机需要与其他主机通信。且不能通过 ip:port
的方式配置 cluster.conf
文件,除非能够保证集群中每台机器的 ip 地址不变。
为了实现容器内网络互通,并且给每台机器配置一个 hostname 的功能,需要使用到 docker network create
指令创建一个 bridge
类型的网络配置。
docker network create nacos
后续启动 nacos 服务时,都需要加上一个参数:--network nacos
。
Docker 命令行启动集群服务
启动 MySQL 服务
首先启动一台 MySQL 服务,由于 docker 容器在停止之后,存储到容器之中的数据不容易迁移,并且在删除镜像后还会丢失数据。此处选择将 mysql 的数据存储地址通过 -v
参数挂载到本机上。
通过 docker volume
来管理容器与宿主机之间的数据挂载,首先创建一个 docker volume
docker volume create nacos_persistence_mysql
同时也要保证 Nacos 集群中的机器能够访问 Nacos,所以在启动 MySQL 服务时也需要加上参数 --network nacos
。
docker run -d -p 13306:3306 \
--network nacos \
-v nacos_persistence_mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=11111111 \
--name nacos_db mysql:5.7.5
--network nacos
使用前面创建的network nacos 。-v nacos_persistence_mysql:/var/lib/mysql
将 MySQL 容器内的数据挂载到刚刚创建的虚拟卷 。nacos_persistence_mysql
中。-e MYSQL_ROOT_PASSWORD=11111111
设置 root 用户的密码。--name nacos_db
设置容器名称,该名称也会作为在 networknacos
中的主机名 (hostname)。
启动 Nacos 集群
为了启动集群,首先要创建 cluster.conf
,并通过 -v
参数挂载到容器内部的 conf
目录下。cluster.conf
中的 ip 不能使用具体的 ip 地址,而是要使用容器的 hostname,既 docker run
命令中的 --name
参数值。
这里配置的内容为:
/etc/docker/containers_conf/nacos/cluster.conf内容如下:
nacos1:8848
nacos2:8848
nacos3:8848
根据配置文件中的内容,后面启动的三个Nacos
镜像的