实现 docker 跨主机通信(Consul版)
本文将在云服务器之间实现基于Consul的overlay网络,以达到跨主机通信的目的。
docker 和 consul 的安装教程非常之多,这里不再赘述。
环境配置
节点名 | 节点IP | 节点服务 |
---|---|---|
consul | 10.0.0.11 | 安装 Consul |
dnode1 | 10.0.0.12 | 安装 Docker |
dnode2 | 10.0.0.13 | 安装 Docker |
配置三台机器,请注意修改hostname
为不同的值,防火墙放行如下端口:
- 2376
- 4789
- 7946
8300-8302- 8500
8600
启动一个单节点的Consul
服务
consul agent -ui -server -bootstrap -data-dir /var/lib/consul -bind 10.0.0.11 -client 10.0.0.11
在其他服务器分别启动Docker
服务
docker daemon -D -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376 --cluster-advertise=eth0:2376 --cluster-store=consul://10.0.0.11:8500
--cluster-store
指定了consul服务发现地址--cluster-advertise
指定了本机服务注册地址,其中eth0
是自己网卡的名称,也可以用本机内网地址10.0.0.x
代替
等待自动注册服务
可以使用浏览器打开http://10.0.0.11:8500
查看
在节点上创建网络
docker network create --driver overlay \
--subnet=10.0.2.0/24 --gateway=10.0.2.1 ovnet
为方便部署,也可以将CLI参数写入配置文件
cat <<EOF >/etc/consul/server.json
{
"data_dir": "/var/consul",
"server": true,
"bootstrap": true,
"bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
"client_addr": "0.0.0.0",
"ui_config": {
"enabled": true
}
}
EOF
if [ -f /etc/conf.d/docker ]; then
opts="--cluster-advertise=eth0:2376 --cluster-store=consul://10.0.0.11:8500"
sed -i "s#OPTS=\"\"#OPTS=\"$opts\"#" /etc/conf.d/docker
fi
分别在不同的节点上创建可互访的容器
docker run -it --rm --network ovnet --ip 10.0.2.5 alpine
docker run -it --rm --network ovnet --ip 10.0.2.6 alpine
docker run -it --rm --network ovnet --ip 10.0.2.7 alpine