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 !