使用Docker搭建Nacos集群

        本次是在Mac的M1版本上使用Docker搭建Nacos集群的详细步骤,并记录了一些遇到的问题及解决方案。

        搭建涉及:1个Nginx + 3个Nacos + 1个MySQL

        使用版本:Nginx为1.22.0,Nacos为2.0.3,MySQL为8.0.30

一、创建虚拟网络

        因为MySQL、Nacos和Nginx需要在同一个网络下互通,且MySQL和Nacos集群需要指定IP地址,所以需要创建虚拟网络,默认网络不能指定IP。

docker network create --subnet=172.19.0.0/16 mynet

        注意:创建时,自定义网络的网段不能和已有的虚拟网段冲突,否则会报如下错误:

Error response from daemon: Pool overlaps with other one on this address space

        可通过 docker network ls 查看都有哪些网络,并通过 docker network inspect 虚拟网络名 来查看对应所处的子网范围。新建网络时不和已有的虚拟网络处于同一个网段即可。

二、创建MySQL容器

cd /Users/songwj/lib/docker/mysql

# 创建名为mysql的容器,并指定网络mynet和IP地址
docker run -id \
--name=mysql \
--net mynet --ip 172.19.0.2 \
-p 3306:3306 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql

        初始化数据库脚本:

        到官网:Release 2.0.3 (July 28, 2021) · alibaba/nacos · GitHub,下载nacos-server-2.0.3.tar.gz,解压

        创建数据库名为nacos_config,并刷脚本conf/nacos-mysql.sql

        注意:刷的脚本得和nacos服务的版本一致,否则添加配置时可能报:发布失败。请检查参数是否正确。

三、创建Nacos容器

        因为本次为Mac的M1版本,本次使用的镜像为:zhusaidong/nacos-server-m1:2.0.3,创建3个nacos容器:nacos01、nacos02和nacos03

docker run -id \
--name=nacos01 \
--net mynet --ip 172.19.0.3 \ # 指定网络和IP
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \ # 启用集群模式
-e NACOS_SERVERS="172.19.0.4:8848 172.19.0.5:8848" \ # 指定另外两台的IP和端口
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.19.0.2 \  # MySQL容器IP地址
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 3333:8848 \
zhusaidong/nacos-server-m1:2.0.3

docker run -id \
--name=nacos02 \
--net mynet --ip 172.19.0.4 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.19.0.3:8848 172.19.0.5:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.19.0.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 4444:8848 \
zhusaidong/nacos-server-m1:2.0.3

docker run -id \
--name=nacos03 \
--net mynet --ip 172.19.0.5 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.19.0.3:8848 172.19.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.19.0.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 5555:8848 \
zhusaidong/nacos-server-m1:2.0.3

四、创建Nginx容器

cd /Users/songwj/lib/docker/nginx

docker run -id \
--name=nginx \
--net mynet \ # 指定网络mynet
-p 1111:80 \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/html:/etc/nginx/html \
-v $PWD/log:/usr/log/nginx \
-v $PWD/nginx.conf:/etc/nginx/nginx.conf \
nginx:1.22.0

        此处nginx.conf配置:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;

    upstream nacosList {
        server 172.19.0.3:8848;
        server 172.19.0.4:8848;
        server 172.19.0.5:8848;
    }

    server {
        listen       80;
        server_name  172.19.0.6;

        location / {
            proxy_pass http://nacosList;
        }
    }
}

五、访问测试

http://localhost:1111/nacos

        此时通过1111端口访问,可以自动负载均衡,新配置的数据正常写入MySQL。

相关推荐

  1. 使用DockerNacos

    2024-04-29 21:24:01       36 阅读
  2. 本地使用docker-compsenacos

    2024-04-29 21:24:01       32 阅读
  3. Docker Nacos 教程

    2024-04-29 21:24:01       42 阅读
  4. nacos

    2024-04-29 21:24:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-29 21:24:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-29 21:24:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-29 21:24:01       87 阅读
  4. Python语言-面向对象

    2024-04-29 21:24:01       96 阅读

热门阅读

  1. 这款永久免费云服务器实在是太好用了

    2024-04-29 21:24:01       35 阅读
  2. Meta大佬亲授LLaMA 3的奥秘

    2024-04-29 21:24:01       37 阅读
  3. cpp程序优化

    2024-04-29 21:24:01       32 阅读
  4. 【python类】为什么需要__init__,为什么需要self

    2024-04-29 21:24:01       33 阅读
  5. 经典排序算法总结

    2024-04-29 21:24:01       37 阅读
  6. 【android 问题 之--自问自答】

    2024-04-29 21:24:01       30 阅读
  7. 【RabbitMQ 一】RabbitMQ简介、消息中间件、MQ的作用

    2024-04-29 21:24:01       35 阅读
  8. [C++] 小游戏 斗破苍穹2.11.1 版本 zty出品

    2024-04-29 21:24:01       31 阅读
  9. 【抽代复习笔记】15-群(九):凯莱定理

    2024-04-29 21:24:01       29 阅读
  10. CSS--选择器

    2024-04-29 21:24:01       29 阅读
  11. C++基础经典算法题(必刷)

    2024-04-29 21:24:01       32 阅读
  12. C# 获取一个字符串中数字部分?

    2024-04-29 21:24:01       30 阅读