docker-compose安装 nacos 集群

docker-compose安装 nacos 集群

nacos cluster 目录

[root@blue dc]# tree nacos-cluster
nacos-cluster
├── custom.properties
├── docker-compose.yml
└── env
    └── nacos-ip.env

docker-compose.yml 配置文件

version: "3"
services:
  nacos1:
    hostname: nacos1
    container_name: nacos1
    image: nacos/nacos-server:1.4.1
    volumes:
      - $PWD/cluster-logs/nacos1:/home/nacos/logs
      - $PWD/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9555:9555"
    env_file:
      - $PWD/env/nacos-ip.env
    networks:
      - nacos-net

  nacos2:
    hostname: nacos2
    image: nacos/nacos-server:1.4.1
    container_name: nacos2
    volumes:
      - $PWD/cluster-logs/nacos2:/home/nacos/logs
      - $PWD/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    env_file:
      - $PWD/env/nacos-ip.env
    networks:
      - nacos-net
  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:1.4.1
    container_name: nacos3
    volumes:
      - $PWD/cluster-logs/nacos3:/home/nacos/logs
      - $PWD/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
    env_file:
      - $PWD/env/nacos-ip.env
    networks:
      - nacos-net

## 和 mysql 同一个网络
networks:
  nacos-net:
    external: true  # 使用 外部网络,目的是为了使用已创建的 mysql 容器服务

nacos-ip.env 配置文件

#nacos dev env
NACOS_SERVERS=192.168.1xx.10:8848 192.168.1xx.10:8849 192.168.1xx.10:8850
MYSQL_SERVICE_HOST=192.168.1xx.10
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root

mysql 容器

之前用 docker 创建过 mysql 容器, 所以只要将 mysql 容器的网络和 nacos网络一致就行

[root@blue nacos-cluster]# docker ps
CONTAINER ID        IMAGE     COMMAND              CREATED             STATUS        PORTS             NAMES
72965bc99cdb  registry   "/entrypoint.sh /etc…"   8 months ago  Up 27 hours   0.0.0.0:5000->5000/tcp   registry
fd4356a03712 mysql     "docker-entrypoint.s…"   9 months ago    Up 2 hours    0.0.0.0:3306->3306/tcp   mysql-docker

创建 nacos-net

[root@blue nacos-cluster]# docker network create nacos-net
5b0d4a23f3403c3478d3ceb55c64dc5bf049b9ee666fb81308153a7861e7c48a

将 mysql 加入 nacos-net 网络

[root@blue nacos-cluster]# docker network connect nacos-net
# 查看 mysql 网络
[root@blue nacos-cluster]# docker inspect mysql-docker
"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "f5185723237158479eb21b2680fd14153e940c511080b392620e726495341ec5",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    }
                ],
                "33060/tcp": null
            },
            "Networks": {
                "mysql_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "fd4356a03712",
                        "mysql-db"
                    ],
                    "NetworkID": "de885d60abbe2a6d04743a5755db1a721d74aaa4e1316295635e96fccba9e262",
                    "EndpointID": "482e5893b181b8f77bc7a8ca8e1fe187499aa774e30daa01258427e90fbd729b",
                    "Gateway": "172.21.0.1",
                    "IPAddress": "172.21.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:15:00:02",
                    "DriverOpts": null
                },
                "nacos-net": {                             ## 已经将 msyql 加入到这个网络
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "fd4356a03712"
                    ],
                    "NetworkID": "a875049ceb7924cd7e5dc7d3de6decef8001c865634c8edac9112db398c3eb5e",
                    "EndpointID": "ddf58b17d94e87dd2a1a79afef28cc259e1333510267fdbe1fd398c1191b8b85",
                    "Gateway": "172.28.0.1",
                    "IPAddress": "172.28.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:1c:00:02",
                    "DriverOpts": {}
                }
            }
        }
    }
    
 # 容器启动后,可以进入mysql容器 ping nacos 服务 来测试网络是否互通 !!!   

启动 nacos cluster

[root@blue nacos-cluster]# docker-compose up -d

下一步,使用 nginx 做负载代理

docker-compose 创建 nginx 服务

nginx 工程 目录

[root@blue nginx]# tree .
.
├── conf
│   ├── nginx.conf
├── dist
│   ├── index.html
├── docker-compose.yml

docker-comopse.yml 配置文件

[root@blue nginx]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 8080:8080
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - $PWD/log:/var/log/nginx
      - $PWD/dist:/opt/dist:ro

nginx.conf 配置文件

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream cluster{
        server 1xx.xx.x.x:8848;
        server 1xx.xx.x.x:8849;
        server 1xx.xx.x.x:8850;
    }

    server {
        listen       8080;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

}

启动 nginx

[root@blue nginx]# docker-compose up
Starting nginx ... done
Attaching to nginx
nginx    | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx    | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx    | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx    | 10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled
nginx    | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx    | /docker-entrypoint.sh: Configuration complete; ready for start up
^CGracefully stopping... (press Ctrl+C again to force)
Stopping nginx ... done

访问

访问 http://xx.xx.x.xx:8080/nacos

在这里插入图片描述

good luck !