一.環境
三台機器,其中一台安裝 consul(192.168.1.21), 兩台創建網絡(192.168.1.32,33)
二.實現步驟
1.構建環境
1)三台機器部署docker環境
2)選擇一台作為consul服務器,安裝consul;consul 為一個key-value數據庫用於保存網絡狀態信息,其他的支持key-value的軟件有etcd,zookeeper等。
我們這里直接用鏡像方式啟動consul容器,來部署 consul,
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
啟動之后,我們可以用瀏覽器192.168.1.21:8500, 進行查看consul;
3)修改兩台機器的docker daemon 配置文件
/usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd 后加入 --cluster-store=consul://192.168.1.21:8500 --cluster-advertise=ens33:2376
其中192.168.1.21為consul 主機, ens33為 consul 主機的網卡
4)到瀏覽器192.168.1.21:8500, 進行查看consul;在 key/value 下發現兩個節點,此為自動注冊到consul數據庫中的節點。
2.構建overlay網絡
1)在一台主機中創建overlay網絡
docker network create -d overlay ov_net1
-d 為指定driver為overlay
docker network ls 查看網絡情況
網絡類型為 global,同時可在另一台主機查看到該網絡,因為創建該網絡時,主機將網絡信息存入 consul中,另一台主機會讀取到新網絡的信息,在主機上對網絡的操作會同步到consul中。
2)在網絡中運行容器
docker run -itd --name bbox1 --network ov_net1 busybox
查看網絡配置
docker exec bbox1 ip r
會有兩個網卡,一個eth0,連接 overlay網絡, 另一個 eth1,連接主機的docker_gwbridge, 為訪問外網的容器提供出口;
在另一台機器運行容器2,
docker run -itd --name bbox2 --network ov_net1 busybox
docker exec bbox2 ip a
docker exec bbox2 ping -c bbox1 同一個overlay 網絡的容器可以互相ping 通
3)不同overlay中網絡的隔離性
創建一個ov_net2網絡
docker network create -d overlay ov_net2
在該網絡中運行一個容器
docker run -itd --name bbox3 --network ov_net2
測試該容器是否能ping 通其他容器
docker exec -it bbox3 ping -c 2 bbox1
不通,說明不同overlay網絡之間是隔離的。
如果要讓兩個 overlay的容器通信,可以將其中的一個容器連到另一個容器所在的overlay,
docker network connect ov_net1 bbox3
測試docker exec -it bbox3 ping -c 2 10.0.0.2 ,網絡為通。10.0.0.2為bbox1的ip地址
4)ip管理
默認分配子網,10.0.X.0/24 ,也可以通過 --subnet 指定ip 范圍
docker network create -d overlay --subnet 10.2.0.0/24 ov_net3