㈠ 如何給docker容器設置ip
要重新再獲得被分配IP地址,可以在客戶端主機的DOC下(在[開始]-[運行]里輸入「cmd」或點擊附件里的[命令提示符]就可以進入)
輸入命令 ipconfig/release (釋放掉你獲得的IP)
然後 ipconfig/renew(重新到DHCP伺服器那裡獲得IP)
A類是第1段1-126,B類第1段是128-191,C類第1段就是192-223
A、B類被作為外網地址,C類被用做區域網地址。
你要連通外網後A、B類的都是網路經營商擁有的,你得花錢租的。
DHCP有一定的記憶性,如果只連一台計算機,肯定經常出現總分配同1個地址,或差不多的地址,以求網路的穩定,並節省消耗。
㈡ docker網路問題 怎麼解決
網路基礎 Docker 現有的網路模型主要是通過使用 Network namespace、Linux Bridge、iptables、veth pair 等技術實現的。(出處8) Network namespace:它主要提供了網路資源的隔離,包括網路設備、IPv4/IPv6 協議棧、IP 路由表、防火牆、/proc/net 目錄、/sys/class/net 目錄、埠(socket)等。 Linux Bridge:功能相當於物理交換機,為連在其上的設備(容器)轉發數據幀,如 docker0 網橋。 Iptables:主要為容器提供 NAT 以及容器網路安全。 veth pair:兩個虛擬網卡組成的數據通道。在 Docker 中,用於連接 Docker 容器和 Linux Bridge。一端在容器中作為 eth0 網卡,另一端在 Linux Bridge 中作為網橋的一個埠。 容器的網路模式 用來設置網路介面的 docker run --net 命令,它的可用參數有四個: none:關閉了 container 內的網路連接。容器有獨立的 Network namespace,但並沒有對其進行任何網路設置,如分配 veth pair 和網橋連接,配置 IP 等。 bridge:通過 veth 介面來連接其他 container。這是 docker 的默認選項。 host:允許 container 使用 host 的網路堆棧信息。容器和宿主機共享 Network namespace。 container:使用另外一個 container 的網路堆棧信息。kubernetes 中的 pod 就是多個容器共享一個 Network namespace。 我們需要從中選一個作為我們的網路方案,實際上只有 bridge 和 host 兩種模式可選。(想了解這四個參數,請翻到附錄B之 Network settings。) 在 docker 默認的網路環境下,單台主機上的容器可以通過 docker0 網橋直接通信,如下圖(圖作者馮明振)所示:
㈢ docker 容器配置IP
你沒有確定什麼用VISTA
進行配置我用的網路配置管理來解釋:!
我們知道,在微軟的Vista系統中的網路功能得到了顯著的改善,特別是在之前版本的系統設置已經非常不同的,這讓許多剛剛安裝了Vista系統的新手虧損,感覺設置是非常困難的。在這里,我教你如何創建和Vista下管理虛擬專用網(VPN)。
一,創建一個連接
第一次啟動Vistat系統,然後單擊「開始/連接到」菜單,在當前系統中顯示所有可用的網路連接,然後點擊下面的「設置連接或網路「鏈接,就會彈出」網路連接「窗口,在其中的四個選項列表,連接到網路,因為它是建立一個VPN連接,選擇」連接到工作區「,然後單擊「下一步」按鈕。
然後選擇「使用我的Internet連接(VPN)」項,單擊「下一步」按鈕,然後輸入VPN的IP地址登錄和目標名稱,在這里可以設置是否使用智能卡,允許其他人使用此連接,並立即連接到VPN。分配給您的用戶名和密碼
最後輸入時,它會自動連接到點擊「下一步」按鈕,VPN,然後創建VPN連接。
二,VPN日常維護
VPN建立的時候,通常你需要連接,你可以用同樣的方法撥號連接,然後單擊「開始/連接到」菜單中,然後,您可以看到所有可用的側從中挑選合適的VPN連接,您可以雙擊該VPN網路連接列表後,立即連接。
但管理選項「連接到網路」中的撥號連接實在有限,無法建立連接更多的管理,甚至刪除現有的連接都無法使用。因此,如何管理VPN連接它的「網路連接」?
首先在「網路連接」對話框中,單擊「打開網路和共享中心」鏈接,進入「網路和共享中心」窗口。在這里,您可以網上的「網路連接」的管理,其中包括「重命名」,「刪除」,「創建快捷方式」,「創建副本」,等你甚至可以改變連接的連接設置。
如果你覺得VPN鏈接放置在桌面上,只需選擇在「網路連接」窗口中所需的VPN連接,然後單擊「創建快捷方式」按鈕,系統會自動彈出「Windows可以不能在當前位置創建快捷方式,使桌面上的快捷方式?「的提示,點擊」是「按鈕後,就可以在桌面上創建VPN的快捷方式。
㈣ 如何在 Docker 容器之間設置網路
讓我們先來看看 weave 怎麼工作:先創建一個由多個 peer 組成的對等網路,每個 peer 是一個虛擬路由器容器,叫做「weave 路由器」,它們分布在不同的宿主機上。這個對等網路的每個 peer 之間會維持一個 TCP 鏈接,用於互相交換拓撲信息,它們也會建立 UDP 鏈接用於容器間通信。一個 weave 路由器通過橋接技術連接到本宿主機上的其他容器。當處於不同宿主機上的兩個容器想要通信,一台宿主機上的 weave 路由器通過網橋截獲數據包,使用 UDP 協議封裝後發給另一台宿主機上的 weave 路由器。
每個 weave 路由器會刷新整個對等網路的拓撲信息,可以稱作容器的 MAC 地址(如同交換機的 MAC 地址學習一樣獲取其他容器的 MAC 地址),因此它可以決定數據包的下一跳是往哪個容器的。weave 能讓兩個處於不同宿主機的容器進行通信,只要這兩台宿主機在 weave 拓撲結構內連到同一個 weave 路由器。另外,weave 路由器還能使用公鑰加密技術將 TCP 和 UDP 數據包進行加密。
准備工作
在使用 weave 之前,你需要在所有宿主機上安裝 Docker 環境,參考這些教程,在 Ubuntu 或 CentOS/Fedora 發行版中安裝Docker。
Docker 環境部署完成後,使用下面的命令安裝 weave:
$ wget https://github.com/zettio/weave/releases/download/latest_release/weave
$ chmod a+x weave
$ sudo cp weave /usr/local/bin
注意你的 PATH 環境變數要包含 /usr/local/bin 這個路徑,請在 /etc/profile 文件中加入一行(LCTT 譯註:要使環境變數生效,你需要執行這個命令: source /etc/profile):
export PATH="$PATH:/usr/local/bin"
在每台宿主機上重復上面的操作。
Weave 在 TCP 和 UDP 上都使用 6783 埠,如果你的系統開啟了防火牆,請確保這兩個埠不會被防火牆擋住。
在每台宿主機上啟動 Weave 路由器
當你想要讓處於在不同宿主機上的容器能夠互相通信,第一步要做的就是在每台宿主機上啟動 weave 路由器。
第一台宿主機,運行下面的命令,就會創建並開啟一個 weave 路由器容器(LCTT 譯註:前面說過了,weave 路由器也是一個容器):
$ sudo weave launch
第一次運行這個命令的時候,它會下載一個 weave 鏡像,這會花一些時間。下載完成後就會自動運行這個鏡像。成功啟動後,終端會輸出這個 weave 路由器的 ID 號。
下面的命令用於查看路由器狀態:
$ sudo weave status
第一個 weave 路由器就緒了,目前為止整個 peer 對等網路中只有一個 peer 成員。
你也可以使用 docker 的命令來查看 weave 路由器的狀態:
$ docker ps
第二台宿主機部署步驟稍微有點不同,我們需要為這台宿主機的 weave 路由器指定第一台宿主機的 IP 地址,命令如下:
$ sudo weave launch <first-host-IP-address>
當你查看路由器狀態,你會看到兩個 peer 成員:當前宿主機和第一個宿主機。
當你開啟更多路由器,這個 peer 成員列表會更長。當你新開一個路由器時,要指定前一個宿主機的 IP 地址,請注意不是第一個宿主機的 IP 地址(LCTT 譯註:鏈狀結構)。
現在你已經有了一個 weave 網路了,它由位於不同宿主機的 weave 路由器組成。
把不同宿主機上的容器互聯起來
接下來要做的就是在不同宿主機上開啟 Docker 容器,並使用虛擬網路將它們互聯起來。
假設我們創建一個私有網路 10.0.0.0/24 來互聯 Docker 容器,並為這些容器隨機分配 IP 地址。
如果你想新建一個能加入 weave 網路的容器,你就需要使用 weave 命令來創建,而不是 docker 命令。原因是 weave 命令內部會調用 docker 命令來新建容器然後為它設置網路。
下面的命令是在宿主機 hostA 上建立一個 Ubuntu 容器,然後將它放到 10.0.0.0/24 網路中,分配的 IP 地址為 10.0.0.1:
hostA:~$ sudo weave run 10.0.0.1/24 -t -i ubuntu
成功運行後,終端會顯示出容器的 ID 號。你可以使用這個 ID 來訪問這個容器:
hostA:~$ docker attach <container-id>
在宿主機 hostB 上,也創建一個 Ubuntu 容器,IP 地址為 10.0.0.2:
hostB:~$ sudo weave run 10.0.0.2/24 -t -i ubuntu
訪問下這個容器的控制台:
hostB:~$ docker attach <container-id>
這兩個容器能夠互相 ping 通,你可以通過容器的控制台檢查一下。
如果你檢查一下每個容器的網路配置,你會發現有一塊名為「ethwe」的網卡,你分配給容器的 IP 地址出現在它們那裡(比如這里分別是 10.0.0.1 和 10.0.0.2)。
Weave 的其他高級用法
weave 提供了一些非常巧妙的特性,我在這里作下簡單的介紹。
應用分離
使用 weave,你可以創建多個虛擬網路,並為每個網路設置不同的應用。比如你可以為一群容器創建 10.0.0.0/24 網路,為另一群容器創建 10.10.0.0/24 網路,weave 會自動幫你維護這些網路,並將這兩個網路互相隔離。另外,你可以靈活地將一個容器從一個網路移到另一個網路而不需要重啟容器。舉個例子:
首先開啟一個容器,運行在 10.0.0.0/24 網路上:
$ sudo weave run 10.0.0.2/24 -t -i ubuntu
然後讓它脫離這個網路:
$ sudo weave detach 10.0.0.2/24 <container-id>
最後將它加入到 10.10.0.0/24 網路中:
$ sudo weave attach 10.10.0.2/24 <container-id>
現在這個容器可以與 10.10.0.0/24 網路上的其它容器進行通信了。這在當你創建一個容器而網路信息還不確定時就很有幫助了。
將 weave 網路與宿主機網路整合起來
有時候你想讓虛擬網路中的容器能訪問物理主機的網路。或者相反,宿主機需要訪問容器。為滿足這個功能,weave 允許虛擬網路與宿主機網路整合。
舉個例子,在宿主機 hostA 上一個容器運行在 10.0.0.0/24 中,運行使用下面的命令:
hostA:~$ sudo weave expose 10.0.0.100/24
這個命令把 IP 地址 10.0.0.100 分配給宿主機 hostA,這樣一來宿主機 hostA 也連到了 10.0.0.0/24 網路上了。顯然,你在為宿主機選擇 IP 地址的時候,需要選一個沒有被其他容器使用的地址。
現在 hostA 就可以訪問 10.0.0.0/24 上的所有容器了,不管這些容器是否位於 hostA 上。好巧妙的設定啊,32 個贊!
總結
如你所見,weave 是一個很有用的 docker 網路配置工具。這個教程只是它強悍功能的冰山一角。如果你想進一步玩玩,你可以試試它的以下功能:多跳路由功能,這個在 multi-cloud 環境(LCTT 譯註:多雲,企業使用多個不同的雲服務提供商的產品,比如 IaaS 和 SaaS,來承載不同的業務)下還是很有用的;動態重路由功能是一個很巧妙的容錯技術;或者它的分布式 DNS 服務,它允許你為你的容器命名。如果你決定使用這個好東西,歡迎分享你的使用心得。
http://linux.cn/article-5556-1.html
㈤ 怎麼設置Docker容器網路不能外網
怎麼設置Docker容器網路不能外網
在你的宿主機啟動docker的時候會多出一個 docker0 的虛擬網卡,然後容器都通過這個和外面通信。
㈥ 如何在 docker 容器之間設置網路
在使用weave之前,你需要在所有宿主機上安裝Docker環境,參考這些教程,在Ubuntu或CentOS/Fedora發行版中安裝Docker。Docker環境部署完成後,使用下面的命令安裝weave:$wget/zettio/weave/releases/download/latest_release/weave$chmoda+xweave$sudocpweave/usr/local/bin注意你的PATH環境變數要包含/usr/local/bin這個路徑,請在/etc/profile文件中加入一行(LCTT譯註:要使環境變數生效,你需要執行這個命令:source/etc/profile):exportPATH="$PATH:/usr/local/bin"在每台宿主機上重復上面的操作。Weave在TCP和UDP上都使用6783埠,如果你的系統開啟了防火牆,請確保這兩個埠不會被防火牆擋住。在每台宿主機上啟動Weave路由器當你想要讓處於在不同宿主機上的容器能夠互相通信,第一步要做的就是在每台宿主機上啟動weave路由器。第一台宿主機,運行下面的命令,就會創建並開啟一個weave路由器容器(LCTT譯註:前面說過了,weave路由器也是一個容器):$sudoweavelaunch第一次運行這個命令的時候,它會下載一個weave鏡像,這會花一些時間。下載完成後就會自動運行這個鏡像。成功啟動後,終端會輸出這個weave路由器的ID號。下面的命令用於查看路由器狀態:$sudoweavestatus第一個weave路由器就緒了,目前為止整個peer對等網路中只有一個peer成員。你也可以使用docker的命令來查看weave路由器的狀態:$dockerps第二台宿主機部署步驟稍微有點不同,我們需要為這台宿主機的weave路由器指定第一台宿主機的IP地址,命令如下:$sudoweavelaunch當你查看路由器狀態,你會看到兩個peer成員:當前宿主機和第一個宿主機。當你開啟路由器,這個peer成員列表會更長。當你新開一個路由器時,要指定前一個宿主機的IP地址,請注意不是第一個宿主機的IP地址(LCTT譯註:鏈狀結構)。現在你已經有了一個weave網路了,它由位於不同宿主機的weave路由器組成。把不同宿主機上的容器互聯起來接下來要做的就是在不同宿主機上開啟Docker容器,並使用虛擬網路將它們互聯起來。假設我們創建一個私有網路10.0.0.0/24來互聯Docker容器,並為這些容器隨機分配IP地址。如果你想新建一個能加入weave網路的容器,你就需要使用weave命令來創建,而不是docker命令。原因是weave命令內部會調用docker命令來新建容器然後為它設置網路。下面的命令是在宿主機hostA上建立一個Ubuntu容器,然後將它放到10.0.0.0/24網路中,分配的IP地址為10.0.0.1:hostA:~$sudoweaverun10.0.0.1/24-t-iubuntu成功運行後,終端會顯示出容器的ID號。你可以使用這個ID來訪問這個容器:hostA:~$dockerattach在宿主機hostB上,也創建一個Ubuntu容器,IP地址為10.0.0.2:hostB:~$sudoweaverun10.0.0.2/24-t-iubuntu訪問下這個容器的控制台:hostB:~$dockerattach這兩個容器能夠互相ping通,你可以通過容器的控制台檢查一下。如果你檢查一下每個容器的網路配置,你會發現有一塊名為「ethwe」的網卡,你分配給容器的IP地址出現在它們那裡(比如這里分別是10.0.0.1和10.0.0.2)。Weave的其他高級用法weave提供了一些非常巧妙的特性,我在這里作下簡單的介紹。應用分離使用weave,你可以創建多個虛擬網路,並為每個網路設置不同的應用。比如你可以為一群容器創建10.0.0.0/24網路,為另一群容器創建10.10.0.0/24網路,weave會自動幫你維護這些網路,並將這兩個網路互相隔離。另外,你可以靈活地將一個容器從一個網路移到另一個網路而不需要重啟容器。舉個例子:首先開啟一個容器,運行在10.0.0.0/24網路上:$sudoweaverun10.0.0.2/24-t-iubuntu然後讓它脫離這個網路:$sudoweavedetach10.0.0.2/24最後將它加入到10.10.0.0/24網路中:$sudoweaveattach10.10.0.2/24現在這個容器可以與10.10.0.0/24網路上的其它容器進行通信了。這在當你創建一個容器而網路信息還不確定時就很有幫助了。將weave網路與宿主機網路整合起來有時候你想讓虛擬網路中的容器能訪問物理主機的網路。或者相反,宿主機需要訪問容器。為滿足這個功能,weave允許虛擬網路與宿主機網路整合。舉個例子,在宿主機hostA上一個容器運行在10.0.0.0/24中,運行使用下面的命令:hostA:~$sudoweaveexpose10.0.0.100/24這個命令把IP地址10.0.0.100分配給宿主機hostA,這樣一來宿主機hostA也連到了10.0.0.0/24網路上了。顯然,你在為宿主機選擇IP地址的時候,需要選一個沒有被其他容器使用的地址。現在hostA就可以訪問10.0.0.0/24上的所有容器了,不管這些容器是否位於hostA上。好巧妙的設定啊,32個贊
㈦ docker 容器的網路設為host, 其他容器怎麼訪問
容器設置為host網路模式,是復用了主機網路來運行容器,直接訪問主機 IP 就可以了。
㈧ docker desktop中的容器與宿主機的區域網絡通信
兩台docker容器做datanode,當時配置Docker網路時,使用了Bridge模式,docker0網段(172.0.1.x),宿主機網段(192.1.1.x),使用外部客戶端請求下載HDFS文件,去指定的datanode上拉去數據時,外部客戶端無法連接到內部的docker容器,拋出的等待超時異常,並重試下載,更換請求的下載地址為可連接的宿主機datanode後, 才成功下載數據。
於是,想要對docker的網路配置進行修改,將docker容器的IP地址設置成與宿主機同網段,並且相互連通。
這里先要來說一下docker網路的四種方式:
1.Host模式:
Host 模式並沒有為容器創建一個隔離的網路環境。
該模式下的Docker 容器會和Host宿主機共享同一個網路namespace, Docker Container可以和宿主機一樣,使用宿主機的eth0,實現和外界的通信。
Host模式特點包括:
容器沒有隔離的 network namespace
容器的 IP 地址同 Docker host 的 IP 地址
注意:容器中服務埠號不能與Host宿主機上已經使用的埠號相沖突
host 模式能夠和其它模式共存
2.Container模式
Container網路模式是 Docker 中一種較為特別的網路的模式。處於這個模式下的 Docker 容器會共享其他容器的網路環境,因此,至少這兩個容器之間不存在網路隔離,而這兩個容器又與宿主機以及除此之外其他的容器存在網路隔離。
3.None模式
None 網路就是什麼都沒有的網路。掛在這個網路下的容器除了 lo,沒有其他任何網卡。需要我們自行去配置。
㈨ 如何用Docker 管理 Linux Container 容器與網路設置
當前Ubuntu 系統下的 Docker 的安裝包只提供64位。如果你想運行32位的 Docker,你需要。
安裝 Docker
通過 apt-get 安裝 Docker 簡直是小菜一碟。
$ sudo apt-get install docker.io
如果你不是 root 組的用戶,你可以把自己加入到 docker 用戶組。下面的命令可以讓沒有 root 許可權的用戶使用 Docker:
$ sudo usermod -a -G docker $USER
重新登錄,以便讓你的用戶組許可權生效。
下一步是編輯 Docker 配置文件,確定 Docker 可執行文件的路徑:
$ sudo vi /etc/default/docker.io
DOCKER= /usr/bin/docker.io
重啟 Docker 服務:
$ sudo service docker.io restart
管理 Docker Container 容器
如果你想在新的 Docker 容器下創建一個新的 Ubuntu 操作系統,你首先需要 pull 一個 的 Docker 鏡像。下面的命令可以通過網路下載 Docker 鏡像:
$ docker pull ubuntu
你可以使用下面的命令啟動 Docker 裡面的 Ubuntu 系統。最後的參數 /bin/bash 表示一旦容器啟動,首先會執行簡單的 bash。
$ docker run -i -t ubuntu /bin/bash
上面的命令會立即啟動 Ubuntu container 容器(這是一個完美的容器!),然後它會提供一個 shell 提示符運行環境給你。現在開始你可以通過這個沙箱環境訪問一個完整的 Ubuntu 系統了。輸入 exit 命令退出 Docker 容器。
你也可以用下面的命令進入不同的系統。比如 Fedora:
$ docker.io run -i -t fedora /bin/bash
如果系統中還不存在 Fedora Docker 鏡像,這個命令會自動下載它,然後啟動這個 Fedora 的 Docker 容器。如果你想要開啟指定版本的系統,比如 Ubuntu 13.04,你可以使用下面的命令:
$ docker.io run -i -t ubuntu:13.04 /bin/bash
Container 容器網路設置
Docker 使用 Linux 橋接技術與其他容器通信,以及連通外網。安裝完 Docker 後你應該可以看到 docker0 這個網橋,這是 Docker 默認創建的。你創建的每個容器都會通過這個網橋連接到網路。自定義 Linux 網橋
如果你想自定義網橋,你可以執行以下步驟。你可以在這個網橋後面分配一個子網,並為這個子網分配地址。下面的命令會為 Docker 子網分配 10.0.0.0/24 地址段:
$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0
然後在 /etc/default/docker.io 文件的 DOCKER_OPTS 變數里添加 -b=br0 選項,並重啟 Docker 服務:
$ sudo service docker.io restart
到目前為止,任何創建的容器都會連上 br0 網橋,它們的 IP 地址會從 10.0.0.0/24 中自動分配(譯註:在10.0.0.2到10.0.0.254之間隨機分配)。
其他自定義設置
你可以通過 /etc/default/docker.io 文件的 DOCKER_OPTS 變數設置其他一些屬性:
-dns 8.8.8.8 -dns 8.8.4.4 : 為容器指定 DNS 伺服器。
-icc=false : 將容器與其他容器隔離出來
疑難解答
1、當你運行 docker.io 命令時,你可能會遇到以下問題:
dial unix /var/run/docker.sock: no such file or directory
這個錯誤可能是由於 Docker 後台進程沒有啟動。檢查下 Docker 後台進程的狀態,確認它已經處於啟動狀態:
$ sudo service docker.io status$ sudo service docker.io start
㈩ docker容器怎樣實現綁定公網IP/浮動IP
有多種方法:
1、把埠用 --publish forward 進容器里,或者說把埠發布出來。如 docker run -p 80:80 nginx
2、把某個虛擬或物理 interface bridge 進容器里,可以用一個叫 pipework 的工具:
3、直接不對容器網路做虛擬化/隔離,用 --net=host
准備工作
在使用 weave 之前,你需要在所有宿主機上安裝 Docker 環境,參考這些教程,在 Ubuntu 或 CentOS/Fedora 發行版中安裝 Docker。
Docker 環境部署完成後,使用下面的命令安裝 weave:
$ wget https://github.com/zettio/weave/releases/download/latest_release/weave
$ chmod a+x weave
$ sudo cp weave /usr/local/bin
注意你的 PATH 環境變數要包含 /usr/local/bin 這個路徑,請在 /etc/profile 文件中加入一行(LCTT 譯註:要使環境變數生效,你需要執行這個命令: source /etc/profile):
export PATH="$PATH:/usr/local/bin"
在每台宿主機上重復上面的操作。
Weave 在 TCP 和 UDP 上都使用 6783 埠,如果你的系統開啟了防火牆,請確保這兩個埠不會被防火牆擋住。
在每台宿主機上啟動 Weave 路由器
當你想要讓處於在不同宿主機上的容器能夠互相通信,第一步要做的就是在每台宿主機上啟動 weave 路由器。
第一台宿主機,運行下面的命令,就會創建並開啟一個 weave 路由器容器(LCTT 譯註:前面說過了,weave 路由器也是一個容器):
$ sudo weave launch
第一次運行這個命令的時候,它會下載一個 weave 鏡像,這會花一些時間。下載完成後就會自動運行這個鏡像。成功啟動後,終端會輸出這個 weave 路由器的 ID 號。
下面的命令用於查看路由器狀態:
$ sudo weave status
第一個 weave 路由器就緒了,目前為止整個 peer 對等網路中只有一個 peer 成員。
你也可以使用 docker 的命令來查看 weave 路由器的狀態:
$ docker ps
第二台宿主機部署步驟稍微有點不同,我們需要為這台宿主機的 weave 路由器指定第一台宿主機的 IP 地址,命令如下:
$ sudo weave launch <first-host-IP-address>
當你查看路由器狀態,你會看到兩個 peer 成員:當前宿主機和第一個宿主機。
當你開啟更多路由器,這個 peer 成員列表會更長。當你新開一個路由器時,要指定前一個宿主機的 IP 地址,請注意不是第一個宿主機的 IP 地址(LCTT 譯註:鏈狀結構)。
現在你已經有了一個 weave 網路了,它由位於不同宿主機的 weave 路由器組成。
把不同宿主機上的容器互聯起來
接下來要做的就是在不同宿主機上開啟 Docker 容器,並使用虛擬網路將它們互聯起來。
假設我們創建一個私有網路 10.0.0.0/24 來互聯 Docker 容器,並為這些容器隨機分配 IP 地址。
如果你想新建一個能加入 weave 網路的容器,你就需要使用 weave 命令來創建,而不是 docker 命令。原因是 weave 命令內部會調用 docker 命令來新建容器然後為它設置網路。
下面的命令是在宿主機 hostA 上建立一個 Ubuntu 容器,然後將它放到 10.0.0.0/24 網路中,分配的 IP 地址為 10.0.0.1:
hostA:~$ sudo weave run 10.0.0.1/24-t -i ubuntu
成功運行後,終端會顯示出容器的 ID 號。你可以使用這個 ID 來訪問這個容器:
hostA:~$ docker attach <container-id>
在宿主機 hostB 上,也創建一個 Ubuntu 容器,IP 地址為 10.0.0.2:
hostB:~$ sudo weave run 10.0.0.2/24-t -i ubuntu
訪問下這個容器的控制台:
hostB:~$ docker attach <container-id>
這兩個容器能夠互相 ping 通,你可以通過容器的控制台檢查一下。
如果你檢查一下每個容器的網路配置,你會發現有一塊名為「ethwe」的網卡,你分配給容器的 IP 地址出現在它們那裡(比如這里分別是 10.0.0.1 和 10.0.0.2)。
Weave 的其他高級用法
weave 提供了一些非常巧妙的特性,我在這里作下簡單的介紹。
應用分離
使用 weave,你可以創建多個虛擬網路,並為每個網路設置不同的應用。比如你可以為一群容器創建 10.0.0.0/24 網路,為另一群容器創建 10.10.0.0/24 網路,weave 會自動幫你維護這些網路,並將這兩個網路互相隔離。另外,你可以靈活地將一個容器從一個網路移到另一個網路而不需要重啟容器。舉個例子:
首先開啟一個容器,運行在 10.0.0.0/24 網路上:
$ sudo weave run 10.0.0.2/24-t -i ubuntu
然後讓它脫離這個網路:
$ sudo weave detach 10.0.0.2/24<container-id>
最後將它加入到 10.10.0.0/24 網路中:
$ sudo weave attach 10.10.0.2/24<container-id>
現在這個容器可以與 10.10.0.0/24 網路上的其它容器進行通信了。這在當你創建一個容器而網路信息還不確定時就很有幫助了。
將 weave 網路與宿主機網路整合起來
有時候你想讓虛擬網路中的容器能訪問物理主機的網路。或者相反,宿主機需要訪問容器。為滿足這個功能,weave 允許虛擬網路與宿主機網路整合。
舉個例子,在宿主機 hostA 上一個容器運行在 10.0.0.0/24 中,運行使用下面的命令:
hostA:~$ sudo weave expose 10.0.0.100/24
這個命令把 IP 地址 10.0.0.100 分配給宿主機 hostA,這樣一來宿主機 hostA 也連到了 10.0.0.0/24 網路上了。顯然,你在為宿主機選擇 IP 地址的時候,需要選一個沒有被其他容器使用的地址。
現在 hostA 就可以訪問 10.0.0.0/24 上的所有容器了,不管這些容器是否位於 hostA 上。