详解Docker中的nacos集群部署方式
作者:ChatYU.
前言
Nacos 是一个开源的注册中心和配置中心,用于实现微服务架构中的服务发现、服务治理和动态配置管理。在 Docker 中使用 Nacos,你可以通过拉取官方提供的 Docker 镜像并运行容器的方式来快速部署
一.Nacos镜像拉取及独立模式
镜像拉取命令详解:
当前命令为创建Nacos容器(没有Nacos镜像会自动拉取Nacos镜像)
docker run
: 运行一个 Docker 容器的命令。
-itd
: 这是参数的一部分,其中:
-i
: 保持标准输入(stdin)打开。
-t
: 为容器分配一个伪终端(pseudo-TTY)。
-d
: 在后台运行容器,并返回容器 ID。
-e PREFER_HOST_MODE=ip
: 设置环境变量PREFER_HOST_MODE
的值为ip
,表示使用 IP 模式。
-e MODE=standalone
: 设置环境变量MODE
的值为standalone
,表示以独立模式运行 Nacos。
-e SPRING_DATASOURCE_PLATFORM=mysql
: 设置环境变量SPRING_DATASOURCE_PLATFORM
的值为mysql
,指定 Nacos 使用 MySQL 数据库作为存储后端。
-e MYSQL_SERVICE_HOST=172.17.0.2
: 设置环境变量MYSQL_SERVICE_HOST
的值为 MySQL 服务的主机 IP 地址。
-e MYSQL_SERVICE_PORT=3306
: 设置环境变量MYSQL_SERVICE_PORT
的值为 MySQL 服务的端口号。
-e MYSQL_SERVICE_DB_NAME=nacos
: 设置环境变量MYSQL_SERVICE_DB_NAME
的值为 MySQL 数据库的名称,这里为nacos
。
-e MYSQL_SERVICE_USER=root
: 设置环境变量MYSQL_SERVICE_USER
的值为 MySQL 连接的用户名,这里为root
。
-e MYSQL_SERVICE_PASSWORD=123456
: 设置环境变量MYSQL_SERVICE_PASSWORD
的值为 MySQL 连接的密码,这里为123456
。
-p 8848:8848
: 将容器内部的 8848 端口映射到主机的 8848 端口,允许通过主机访问 Nacos。
--name nacos
: 为容器指定一个名称,这里为nacos
。
--restart=always
: 设置容器总是在停止时自动重启。
nacos/nacos-server
: 指定要运行的 Docker 镜像,这里是 Nacos 官方提供的nacos-server
镜像。这个命令的目的是在 Docker 中启动一个 Nacos 服务,配置使用 MySQL 数据库作为后端存储,并且在容器内部的 8848 端口上提供服务
docker run -itd \ -e PREFER_HOST_MODE=ip \ -e MODE=standalone \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=172.17.0.2 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ -p 8848:8848 \ --name nacos \ --restart=always \ nacos/nacos-server
拉取镜像后我们需要开放8848端口,并刷新防火墙规则
开放端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
刷新防火墙规则
firewall-cmd --reload
同时我们可以通过查看防火墙开放端口列表是否开启
查看防火墙开放端口列表
firewall-cmd --zone=public --list-ports
当我们进入到nacos内网控制台说明NACOS创建成功了
二.Nacos集群部署
对比上面我们使用的是独立模式(standalone
),当我们需要将独立模式改成集群模式时,要将环境遍历MODE设置为cluster
1.搭建集群
docker network create --subnet=172.20.0.1/16 my_net
为原有Mysql容器再连接一个网络
my_net为自定义网络名 m1为容器名
docker network connect my_net m1
当我们为m1连接上网络后,它不仅拥有原有的网段还有刚刚连接的网段
创建集群部署容器
docker run -itd \ -e PREFER_HOST_MODE=ip \ -e MODE=cluster\ -e NACOS_SERVERS="172.20.0.102:8848 172.20.0.103:8848" \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=m1 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ -p 8848:8848 \ --name nacos2 \ --net my_net \ --ip 172.20.0.101 \ --restart=always \ nacos/nacos-server
为测试完成集群部署,我们只需要将容器名--name 容器名和网段ip进行修改,分别创建三台nacos
虽然我们的三台nacos搭建完成了,但是我们只有一个或者两个容器能运行,所以要完成多台同时运行,还是要借助nginx实现负载均衡
2.Nginx实现负载均衡
在我们的工作目录中创建Niginx目录及所需文件夹
mkdir -p nginx/{conf.d} cd /nginx/conf.d
新建default.conf 配置文件放在conf.d目录中
upstream nacosList { server nacos1:8848 weight=1; server nacos2:8848 weight=1; server nacos3:8848 weight=1; } server { listen 80; server_name www.ChatYULin.com; location / { root /etc/nginx/html/; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location /nacos { proxy_pass http://nacosList; } location /nacos { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://tomcatList; proxy_redirect default; } }
创建nginx容器
docker run -itd \ --name nginx \ -v /soft/nginx/conf.d:/etc/nginx/conf.d \ -p 80:80 \ --net my_net \ nginx
进入到我们本机的C:\Windows\System32\drivers\etc目录下
找到Host打开进行修改你要映射的域名
输入你的虚拟机IP以及域名
当我们创建并运行完nginx容器后利用可以使用自定义域名访问到说明我们的域名映射和nginx容器已完成
我们登录到nacos中,看到三台容器同时运行时就说明完成负载均衡了
报错解决
这个报错解释为数据源配置出错,也就是我们在配置数据库时要与Nacos配置对应,多半存在与网段问题,我们可以通过命令查看nacos/mysql容器网段是否一致
docker inspect 容器名
Nacos网段必须要与Mysql网段一致
在我配置MySQL容器时因为没有去指定网段而是默认使用网桥模式,而我的Nacos容器指定网段为172.17.0.2,但是在这之前我还有一个容器占用了当前网段,所以我使用配置Nacos的网段为172.17.0.3配置信息不一致,导致我的Nacos配置的数据源一直是之前的MySQL容器所以一直报错
解决措施
解决思路:两者要在同一个网段
1.自定义网络为MySQL容器指定网段
2.为Nacos容器指定网段
3.像nacos集群一样创建自定义网络然后连接MySQL容器
到此这篇关于详解Docker中的nacos集群部署的文章就介绍到这了,更多相关Docker nacos集群部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!