1. 程式人生 > >使用Docker Swarm建立Overlay Network

使用Docker Swarm建立Overlay Network

這篇文章中,我們使用Docker Swarm設定允許主機之間的容器互相訪問的網路。實際上,Swarm叢集允許我們使用本地Docker單一的主機網路,也允許我們建立依賴VXLAN的overlay network。在overlay中啟動的容器可以和容器之外的應用互相通訊。這篇文章介紹了使用Docker Swarm如何建立、使用、測試一個overlay network。

建立Overlay Network

設定Swarm之後,你就可以依你習慣的方式立即開始管理你的容器了。Docker將會自動使用一個所謂“bridge”的網路模式管理,儘管這是很好的,而且你也可以把你的服務暴露在你的主機上。當你不得不把服務繫結在主機上而啟動多個主機的容器,而且要讓這些容器知道怎麼發現彼此兩者之間的網路通訊時,這是非常複雜的。

Libnetwork提供可以用於你容器的overlay network,以至於他們可以出現在相同的子網上。他們可以互相通訊而且相互獲取DNS名稱,使之在網路上很容易被發現。
Swarm
主機或者工作節點作為你的工作的DockerMachine,你可以使用docker network create命令建立一個overlay network,如下面操作:

$ docker network create foobar 165e9c2bafab44513da2f26426216217dc69ca2cd021f966ccc64e7c6bf898d9

你可以檢視可用的網路列表,會看到多個網路,每一個主機都一個

bridge,一個host和一個none的網路,這三種網路型別也可以在單個Docker引擎中設定,‘bridge’網路是預設的設定。我們在上面建立的foobaroverlay出現在查詢的列表中,而且全域性存在在我們的Swarm主機。

$ docker network ls NETWORK ID NAME DRIVER 2c48d476867e swarm-master/bridge bridge 0b6ae86378f3 swarm-master/none null 967c471c311c swarm-master/host host 01f3d280bc68 swarm-node-1/bridge bridge d0f929b000bc swarm-node-1/none null 71550dff8c32 swarm-node-1/host host 165e9c2bafab foobar overlay

使用 Overlay Network

使用overlaynetwork,我們可以在swarm中開啟容器,可以給它設定一個名字指定foobar作為我們的網路,例如:

$ docker run -d --name=foo --net=foobar nginx $ docker run -d --name=bar --net=foobar nginx

監聽容器,我們可以查詢到已經啟動的主機。你可能不得不深入Swarm排程策略來理解Swamp是如何選擇主機執行容器。Swarm也可能在同一個主機上排程兩個測試容器。在下面的測試中,我們擁有兩個工作節點,Swarm排程我們的兩個容器,然後將容器傳播進入叢集。

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 21587d81505d nginx "nginx -g 'daemon off" 2 seconds ago Up 2 seconds 80/tcp, 443/tcp swarm-node-1/bar 6d66dc56af4f nginx "nginx -g 'daemon off"   9 seconds ago Up 8 seconds 80/tcp, 443/tcp swarm-node-2/foo

測試 Overlay Network

這種方法允許我們測試我們的overlay networking。如果上述命令執行正常,我們應該已經在相同的overlaynetwork,儘管他們再單獨的主機上。這也意味著我們可以使用容器的名字就可以ping通兩個容器--這個名字是我們已經註冊號的DNS名稱。讓我們測試一下,讓我們使用docker exec測試一下。

$ docker exec -ti swarm-node-1/bar ping -c 1 foo PING bar (10.0.0.3): 56 data bytes 64 bytes from 10.0.0.3: icmp_seq=0 ttl=64 time=1.433 ms --- bar ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/stddev = 1.433/1.433/1.433/0.000 ms

的確,我們可以從bar容器ping foo,相反也可以通過foopingbar

$ docker exec -ti swarm-node-2/foo ping -c 1 bar

PING foo (10.0.0.2): 56 data bytes

64 bytes from 10.0.0.2: icmp_seq=0 ttl=64 time=0.984 ms

--- foo ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max/stddev = 0.984/0.984/0.984/0.000 ms

就像上述的在Docker中的多主機網路環境,容器可以根據Swamp排程使用overlay network與內部私有的IP通訊。將來的部落格我想回到Docker Compose話題,看看我們如何利用一個Swarm建立一個真正的分散式應用,那種容器可以在不同的網路上獨立啟動,我們也可以獨立監測每一個服務。

雲端計算的時代,發展的更為迅速,尤其在作為雲時代來臨的重要時刻,IDC9000堅信,之後雲技術會更多的讓更多人接受,而IDC9000做的就是要把每一處細節都做好,同時在這雲端計算的時代中給使用者帶來最為真切的解決方案。IDC9000將工匠精神進行到底……