在之前的docker簡介中介紹了一些docker基礎的操作,在涉及到多台不同的主控端上運作docker時應該如何使他們之間進行通信呢,這是這篇文章的主要内容。
docker 可以使用多種叢集的解決方案,如k8s,mesos等,這個将在後面的内容中一一介紹,這裡我們将使用docker原生的元件進行連接配接。
環境準備
兩台主控端,都安裝docker. 并下載下傳官方的centos鏡像。
網絡配置
在主控端node1和node2上分别檢視預設的docker0網絡:
1
2
3
4
5
<code>node1:</code>
<code>docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN </code>
<code> </code><code>link</code><code>/ether</code> <code>02:42:c2:a4:d3:e0 brd ff:ff:ff:ff:ff:ff</code>
<code> </code><code>inet 172.17.0.1</code><code>/16</code> <code>scope global docker0</code>
<code> </code><code>valid_lft forever preferred_lft foreve</code>
<code>node2:</code>
<code> </code><code>link</code><code>/ether</code> <code>02:42:2e:be:83:69 brd ff:ff:ff:ff:ff:ff</code>
<code> </code><code>valid_lft forever preferred_lft forever</code>
兩個内部的網段相同,如果建立容器,兩個網絡肯定無法互聯,是以我們修改預設docker0網絡,并且使這兩個網絡不會和外部的網絡沖突。
在node2上的 /usr/lib/systemd/system/docker.service 檔案中ExecStart=區域添加參數:
<code>--bip=10.10.0.1</code><code>/16</code> <code>\</code>
重新開機docker服務。
分别在node1和node2上建立容器:
<code>docker run -it --name test1 centos </code><code>bash</code>
<code>docker run -it --name test2 centos </code><code>bash</code>
這時test1的ip位址為172.17.0.2, test2的位址為10.10.0.2, 兩個虛拟機都是走的主控端的内部nat,是以依然無法通信。
而容器到node1和node2主控端都是可以正常通信的,由于我們都是設定的不同網段,是以可以在每個主控端上單獨添加一條靜态路由,指定資料包的流向:
node1:
<code>route add -net 10.10.0.0</code><code>/16</code> <code>gw 192.168.56.12</code>
node2:
<code>route add -net 172.17.0.0</code><code>/16</code> <code>gw 192.168.56.11</code>
這樣不同主控端上的容器就可以互聯了。
這種方式雖然簡單高效,但是如果是大規模的docker叢集,會難以維護,同時由于docker容器都在不同主控端的不同網段,需要使用網絡多點傳播和廣播互動的服務就無法跨主機通信了
本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1945943