使用上述软硬件架构创建3个VMs/hosts,每个host使用两个网络连接:一个桥接网络(网卡名称“enp0s3”)和一个Host-only网络(网卡名称“enp0s8”)
下面是它们的IP地址和主机名称:
主机名需要在集群中保持唯一命名,因为Key-value数据库需要使用主机名区分不同不同的节点,以及集群中使用主机名进行通信。确保每个节点都可以互相通信(例如在每个主机Ping其他两个Host-only IP地址)
参考文档:Docker帮助文档1 Docker帮助文档2
Docker Overlay网络需要一个Key-value数据库存储网络状态的信息,如节点发现、网络、endpoints、IP地址等信息。Docker支持consul、Etcd、ZooKeeper等。
将docker3设置为多主机overlay网络的key-value数据库,运行consul容器:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
验证容器是否正常运行
# docker ps
# docker port consul
最后,要设置防火墙放行TCP8500端口的流量
# firewall-cmd --permanent --add-port 8500/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
8500/tcp
编辑docker1和docker2的docker配置文件/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:// --cluster-store=consul://192.168.56.106:8500 --cluster-advertise=enp0s8:2376
重新启动docker,并验证:
# systemctl daemon-reload;systemctl restart docker
$ docker info
...
Cluster Store: consul://192.168.56.106:8500
Cluster Advertise: 192.168.56.105:2376
另外docke3的consul的web页面(consul docker host IP:8500/ui/#/dc1/kv/docker/nodes/)也会显示docker1和2的信息
# firewall-cmd --permanent --add-port 2375/tcp
success
# firewall-cmd --permanent --add-port 4789/udp
success
# firewall-cmd --permanent --add-port 7946/udp
success
# firewall-cmd --permanent --add-port 7946/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
2375/tcp 4789/udp 7946/udp 7946/tcp
创建docker网络,使用-d参数指定overlay驱动
# docker network create -d overlay ov_net1
04a82c86fc9d881f5eed3ae2c95c51744eadcfe776773d07007c410f9fda67b6
# docker network ls
NETWORK ID NAME DRIVER SCOPE
f2336c659345 bridge bridge local
db70ffad4d27 host host local
f95712d38794 none null local
04a82c86fc9d ov_net1 overlay global
docker run -itd --name bbox1 --network ov_net1 busybox
bbox1有两个网络接口eth1和eth0,eth1为连接到overlay网络的容器提供了访问外部网络的能力,通过docker创建的docker_gwbridge访问外部网络,容器的网关就是docker_gwbridge的IP地址。外部网络访问overlay网络的容器同样适用主机端口映射即可访问。
overlay网络中的容器可以互相通信,同时docker也实现了DNS服务。不同的overlay网络是互相隔离的,要想使不同overlay网络的容器互相通信,需要将容器同时连接到多个overlay的网络。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。