docker compose水平扩展和负载均衡
原创大约 2 分钟
准备环境
version: "3.8"
services:
box1:
image: busybox
command: /bin/sh -c "while true; do sleep 3600; done"
box2:
image: busybox
command: /bin/sh -c "while true; do sleep 3600; done"
启动容器。
> docker-compose up -d
[+] Running 3/3
⠿ Network root_default Created
⠿ Container root-box1-1 Started
⠿ Container root-box2-1 Started
水平扩展就是增加service
的数量,例如,增加box1
的数量可以这么办。
> docker-compose up -d --scale box1=3
[+] Running 3/4
[+] Running 3/4ot-box2-1 Running
⠿ Container root-box2-1 Running
⠸ Container root-box1-1 Recreate
⠿ Container root-box1-3 Created
⠿ Container root-box1-2 Created
显示出:box1
创建了3个service
,并且原来的root-box1-1
被重新创建过了。
如果现在不再需要那么多的容器,可以再次执行。
> docker-compose up -d
[+] Running 1/2
⠿ Container root-box2-1 Running
⠦ Container root-box1-1 Recreate
可以看到服务被水平缩减,且root-box1-1
又被重新创建了。
查看网络详情。
> docker network inspect root_default
......
"Containers": {
"2bdd9eb2da2af4c48f836a445d48cdcbbe5d447b4aaa3d16635d5052bdd50cef": {
"Name": "root-box1-1",
"EndpointID": "5505e78db96b23b3f3b15ccc4c3d7adb3e7a17d6e5f0a156e1a946db1bcc3057",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/20",
"IPv6Address": ""
},
"54d32a7b4c92bf35d33bebf4a84ed27c36ee4fd308f7edc22332dbc5e31a4fa2": {
"Name": "root-box1-2",
"EndpointID": "d27944cced91a16acece80b25aadf4ea17cd0a1a996a9ecb33f5c2469e32fe4c",
"MacAddress": "02:42:c0:a8:00:04",
"IPv4Address": "192.168.0.4/20",
"IPv6Address": ""
},
"5e8bb74ef56e46efbd256ac63a8e72680a40717e421a2c2c5a6851bdc02ed0d1": {
"Name": "root-box1-3",
"EndpointID": "752c40f208a46607dbf9b08f2e3127d8052480d60476fb799660dd896f356623",
"MacAddress": "02:42:c0:a8:00:05",
"IPv4Address": "192.168.0.5/20",
"IPv6Address": ""
},
"c5be586485d79df4871bf53398f3f6f17e572b5564b5017caaca790cc1255768": {
"Name": "root-box2-1",
"EndpointID": "fe044046c439b10a3b795d087005712ba44b1f08d7adf35c41551b9ab755a6c6",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/20",
"IPv6Address": ""
}
}
......
它的网络都是192.168.
网段的。
进入到其中任一一个容器。
> docker exec -it root-box1-1 sh
/> ping box1
/> ping root-box1-1 # 效果同ping box1
/> ping root-box1-2
/> ping root-box1-3
/> ping root-box2-1
/> ping box2
会发现,除了root-box1-1
自己,其余的容器都无法ping
通,这说明如下事实。
要么
docker-compose 2.15.1
版本并未实现负载均衡效果。要么
yml
中的3.8
版本并未实现复杂均衡效果。
但是如果在docker-compose.yml
文件中使用deploy.replicas
参数。
version: "3.8"
services:
box1:
image: busybox
command: /bin/sh -c "while true; do sleep 3600; done"
deploy:
replicas: 3
box2:
image: busybox
command: /bin/sh -c "while true; do sleep 3600; done"
再次执行命令。
> docker-compose up -d
[+] Running 5/5
⠿ Network root_default Created
⠿ Container root-box2-1 Started
⠿ Container root-box1-1 Started
⠿ Container root-box1-3 Started
⠿ Container root-box1-2 Started
会直接创建3个box
,而且这次可以ping
通每一个box的服务。
> docker exec -it root-box1-1 sh
/> ping box1
/> ping root-box1-1
/> ping root-box1-2
/> ping root-box1-3
/> ping root-box2-1
/> ping box2
上面的每一个都能ping
通,但无法实现负载均衡。
感谢支持
更多内容,请移步《超级个体》。