docker overlay跨主机网络 1.环境 docker版本 Docker version 18.02.0-ce, build fc4de44 3台主机 192.168.55.51 host1 192.168.55.52 host2 192.168.55.53 host2 2.部署Consul Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,我们这里使用 Consul。 在 docker 主机 host1 上部署支持的组件,比如 Consul docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap 容器启动后,可以通过 http://192.168.55.51:8500 访问 Consul。 3.修改docker启动项并重启docker(3台上操作) #修改docker daemon 的配置文件/etc/systemd/system/docker.service [root@host1 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf [Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic --registry-mirror http://db411c61.m.daocloud.io --cluster-store=consul://192.168.55.51:8500 --cluster-advertise=192.168.55.51:2376 Environment= #配置说明 --cluster-store 指定 consul 的地址。 --cluster-advertise 告知 consul 自己的连接地址。(即docker的连接,2376为docker的端口) #重启docker systemctl daemon-reload systemctl restart docker 4.查看host1 和 host2、host3 将自动注册到 Consul 数据库中 访问http://192.168.55.51:8500 查看key/value==docker==nodes/ (可以看到3台主全部注册上来了) 5.在 host1 中创建 overlay 网络 ov_net1 docker network create -d overlay ov_net1 -d overlay 指定 driver 为 overaly。 docker network ls 查看当前网络: [root@host1 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8925d1ce67ad bridge bridge local 0fb41307416f host host local fc3f61663c71 none null local cb5cce10b030 ov_net1 overlay global 注意到 ov_net1 的 SCOPE 为 global,而其他网络为 local。在 host2 上查看存在的网络: host2 上也能看到 ov_net1。这是因为创建 ov_net1 时 host1 将 overlay 网络信息存入了 consul,host2 从 consul 读取到了新网络的数据。之后 ov_net 的任何变化都会同步到 host1 和 host2、host3。 docker network inspect ov_net1 查看 ov_net1 的详细信息: [root@host1 ~]# docker network inspect ov_net1 [ { "Name": "ov_net1", "Id": "cb5cce10b0301720ded000830038183c9752448a77c4010f6d1e194923bf1ef7", "Created": "2018-03-20T15:43:52.509618103+08:00", "Scope": "global", "Driver": "overlay", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "10.0.0.0/24", "Gateway": "10.0.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ] IPAM 是指 IP Address Management,docker 自动为 ov_net1 分配的 IP 空间为 10.0.0.0/24。 6.运行一个 busybox 容器并连接到 ov_net1 host1 docker run -tid --name bbox1 --network ov_net1 busybox #查看容器的网络配置: docker exec bbox1 ip r host2 docker run -tid --name bbox2 --network ov_net1 busybox #查看容器的网络配置: docker exec bbox2 ip r #查看网络互通 host1上查看 docker exec bbox1 ping -c 3 bbox2