知識點046-pipework與docker

pipework是一個用軟件來爲linux容器定義網絡的工具,pipework容許你在一個複雜的環境下把容器鏈接在一塊兒,pipework使用cgroup和namespace來和LXC容器協同工做,固然也能夠和docker來一塊兒工做。linux

下載pipeworkgit

 

git clone https://github.com/jpetazzo/pipework.git

    在下載下來的pipework目錄裏面有一個pipework腳本,用shell編寫的,就是把建立的網絡的命令自動化,行數很少,感興趣的能夠看看。github

    在動手前咱們有些事要提醒一下:當你在docker中使用pipework以前,先去docker用戶列表中詢問一下,docker是否已經有了更加原生方法來實現相同的功能,這樣你應該不用pipework,pipework後面應該被淘汰的。若是當前版本的docker真的沒有辦法使你的docker容器集中在一塊兒,那麼只能使用pipework了。docker

先看看原始網絡配置:shell

下面的例子顯示了pipework怎麼來幫助你的容器網絡

#建立兩個容器
ssh11=$(docker run -d -P --name ssh1 ssh_service)
ssh22=$(docker run -d -P --name ssh2 ssh_service)

建立網橋ssh

cd pipework
./pipework br8 $ssh33 192.168.1.10/24
./pipework br8 $ssh22 192.168.1.11/24

    先說說上面這個命令的做用:建立一個br8網橋,而後增長一個eth0名稱的接口到$ssh11這個容器上面,配置一個192.168.1.10到該接口,而後把這個接口鏈接到br8上面。工具

    使用brctl查看docker建立兩個虛擬網卡信息spa

    這時看看宿主機的網卡信息code

    紅色框中的是docker服務默認啓動後使用docker0網橋建立容器的虛擬接口,綠色框中的是咱們使用br8做爲網橋,啓動容器後生成的虛擬網卡信息

    利用docker ps查看容器的ssh端口都映射到docker主機的那個端口了

    能夠看到ssh1是49153端口,ssh2是49154端口,如今咱們登錄一下容器ssh1

    看起來很完美是不?注意個人登錄ip,爲何是172.17.42.1?這是docker0網橋的地址啊,個人容器是綁定的br8的,又不是綁定的docker0的,可是翻看上面的圖,能夠看到br8並無ip地址,那是由於雖然用pipework建立了br8網橋,並且把容器的ip綁定到br8了,可是你並無給br8網橋自己綁定ip,因此br8網橋確定沒ip了,只要給br8再綁定一個ip,應該就能夠利用br8網橋的ip地址登錄了,可是爲何能夠利用docker0的ip來登錄呢?docker ps看到的ssh映射的ip是0.0.0.0

pipework還能夠解析docker容器的名稱,若是pipework識別不了你輸入的docker id,則docker會使用docker inspect來解析,例如

pipework br8 ssh11 192.168.1.11/24

若是想鏈接這些容器,而使用私網地址:

ip addr add 192.168.1.254/254 dev br1

默認狀況下pipework在容器內部建立了一個eth1網絡接口,若是你想改變這個接口的名稱,或者設置多個接口:pipework br8 -i eht2...

傳遞給pipework的地址會被直接傳遞給ip addr工具,所以你能夠直接在ip後面使用CIDR,不要忘記全部的額容器都使用相同的子網掩碼

若是你有outbound的流量,好比容器須要鏈接外部世界,你須要改變容器的默認路由,這些都是能夠被pipework自動解決的,只要在ip地址和掩碼後面加上默認網關的地址便可:

pipework br1 $ssh11 192.168.1.10/24@192.168.1.254

若是你想鏈接容器到真實的物理網卡也是很容易的,好比你要鏈接容器ssh11到eth3上面:

pipework eht3 $ssh11 50.19.169.157/24

    這個用到了macvlan,因此你能夠把多個容器綁定到同一個物理網卡上

有時候你但願額外的網卡在起來正常運轉前你的服務已經啓動,pipework腳本提供了一個參數--wait,它會直到你的網卡啓動後,纔會啓動服務

還可使用dhcp代替指定的ip:

 

pipework eth1 $ssh11 dhcp

還能夠指定網卡的MAC地址:

 

pipework eth0 $ssh11 192.168.1.6/24 xx:xx:xx:xx:xx:xx

pipework能夠作的事情不少,就不一一介紹了,有興趣的能夠看官網例子。

相關文章
相關標籤/搜索