Docker學習<六>
Docker跨主機網絡
overlay
準備overlay網絡實驗環境
以容器的方式運行consul
sudo docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
容器啟動後,可以通過http://10.211.55.20:8500來訪問consul
接下來修改兩個主機的docker daemon配置文件,其配置文件的路徑如下
/ect/stsytmd/system/multi-user.target.wants/docker.service
-H來允許遠程主機連接
--cluster-store指定consul的地址
--cluster-advertise告知consul自己的連接地址
修改完配置文件後重啟docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker.service
兩個主機將自動註冊到consul數據庫中
創建overlay網絡
在第一臺主機上創建overlay網絡overlay_net1
-d overlay指定driver為overlay
用docker network ls來查看網絡
overlay_net1的SCOPE為global,而其他網絡為local,在第二臺主機上查看存在的網絡
結果表明,在第二臺主機上也能看到overlay_net1。這是因為創建overlay_net1時第一臺主機將網絡信息存入了consul,第二臺主機從consul中讀取到了新的網絡數據,之後overlay_net1的任何變化都會同步到兩臺主機
用docker network inspect overlay_net1來查看創建的overlay的詳細信息
overlay中運行容器
用前面創建的overlay網絡創建一個容器,並查看容器的網絡配置信息
test15容器有兩個網絡接口eth0和eth1。eth0的IP為10.0.0.2,連接的是overlay網絡。eth1的IP為172.18.0.2,容器默認路由是走eth1。docker會創建一個bridge網絡“docker_gwbridge”,為所有連接到overlay網絡的容器提供訪問外網的能力
可以用docker network inspect來查看它的詳細信息
這樣容器就可以通過docker_gwbridge訪問外網
如果外網要訪問容器,可以通過主機端口映射,例如
sudo docker run -p 80:80 -d --net overlay_net1 --name web1 httpd
overlay實現跨主機通信
前面在一臺主機上運行了容器test15,現在在另一臺主機上運行容器test16,並查看容器的網絡信息
test16的IP為10.0.0.3,在test16容器裏面直接ping容器test15,由結果可以看出這兩個容器間可以通信,同時docker也實現了DNS服務
可以用以下方法來查看overlay網絡的namespace,可以看出兩個主機上有相同的namespace
overlay的隔離
不同的overlay網絡是相互隔離的。這裏創建第二個overlay網絡,並運行容器test17
ping失敗,可見不同overlay網絡之間是隔離的,即便是通過docker_gwbridge也不能通信
要實現test15與test17通信,可以將test17也連接到overlay_net1中
Docker學習<六>