详解Docker中的nacos集群部署方式

 更新时间:2024年01月22日 10:24:20   作者:ChatYU.  
在 Docker 中使用 Nacos,你可以通过拉取官方提供的 Docker 镜像并运行容器的方式来快速部署,这篇文章主要介绍了Docker中的nacos集群部署方式,感兴趣的朋友一起看看吧

前言

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集群部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你使用Docker搭建gitlab社区汉化版的详细过程

    教你使用Docker搭建gitlab社区汉化版的详细过程

    很多朋友不太清楚使用Docker搭建gitlab社区汉化版的过程,总是容易出现错误,今天小编抽空给大家分享使用Docker搭建gitlab社区汉化版的详细过程,一起看看吧
    2021-09-09
  • docker生命周期管理和镜像管理命令详解

    docker生命周期管理和镜像管理命令详解

    Docker通过容器技术提供了一种轻量级、快速部署和可移植的应用程序运行环境,极大地简化了应用程序的部署和管理过程,提高了开发和运维的效率,这篇文章主要介绍了docker生命周期管理和镜像管理命令,需要的朋友可以参考下
    2023-08-08
  • Docker部署安装Nginx的详细过程

    Docker部署安装Nginx的详细过程

    Nginx 是一款高性能的 web 服务器、反向代理服务器以及电子邮件(IMAP/POP3/SMTP)代理服务器,这篇文章主要介绍了Docker部署安装Nginx,需要的朋友可以参考下
    2024-04-04
  • Docker 部署开源远程桌面工具RustDesk的使用

    Docker 部署开源远程桌面工具RustDesk的使用

    本文介绍了RustDesk开源远程桌面工具的Docker部署使用方法,支持自建服务器,可实现安全私密的远程控制电脑,具有一定的参考价值,感兴趣的可以了解一下
    2024-10-10
  • 详解Docker 端口映射与容器互联

    详解Docker 端口映射与容器互联

    这篇文章主要介绍了详解Docker 端口映射与容器互联 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Docker清理命令之如何删除所有的镜像和容器

    Docker清理命令之如何删除所有的镜像和容器

    这篇文章主要介绍了Docker清理命令之如何删除所有的镜像和容器问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • docker: invalid reference format.问题

    docker: invalid reference format.问题

    这篇文章主要介绍了docker: invalid reference format.问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • docker启动mysql并映射数据目录(含备份脚本)

    docker启动mysql并映射数据目录(含备份脚本)

    本文主要介绍了docker启动mysql并映射数据目录(含备份脚本),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Docker安装oracle数据库最新版教程

    Docker安装oracle数据库最新版教程

    这篇文章主要介绍了如何在Docker中安装和配置Oracle 11g数据库,包括安装Docker、拉取Oracle镜像、创建容器、进入容器配置、设置环境变量、创建软连接、修改用户密码、重启数据库以及使用Navicat进行连接测试,需要的朋友可以参考下
    2025-02-02
  • 基于alpine用dockerfile创建的tomcat镜像的实现

    基于alpine用dockerfile创建的tomcat镜像的实现

    这篇文章主要介绍了基于alpine用dockerfile创建的tomcat镜像的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论