1. 程式人生 > >Docker學習<六>

Docker學習<六>

ima -a span 接下來 sudo 方法 div 詳細 自動

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學習<六>