Docker學(xué)習(xí)筆記之Weave實(shí)現(xiàn)跨主機(jī)容器互聯(lián)
Docker的原生網(wǎng)絡(luò)支持非常有限,且沒有跨主機(jī)的集群網(wǎng)絡(luò)方案。目前實(shí)現(xiàn)Docker網(wǎng)絡(luò)的開源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等,其中Weave被評價為目前最靠譜的,那么這里就對Weave的基本原理及使用方法做個總結(jié)。
簡介
Weave是由Zett.io公司開發(fā)的,它能夠創(chuàng)建一個虛擬網(wǎng)絡(luò),用于連接部署在多臺主機(jī)上的Docker容器,這樣容器就像被接入了同一個網(wǎng)絡(luò)交換機(jī),那些使用網(wǎng)絡(luò)的應(yīng)用程序不必去配置端口映射和鏈接等信息。外部設(shè)備能夠訪問Weave網(wǎng)絡(luò)上的應(yīng)用程序容器所提供的服務(wù),同時已有的內(nèi)部系統(tǒng)也能夠暴露到應(yīng)用程序容器上。Weave能夠穿透防火墻并運(yùn)行在部分連接的網(wǎng)絡(luò)上,另外,Weave的通信支持加密,所以用戶可以從一個不受信任的網(wǎng)絡(luò)連接到主機(jī)。
weave其他特性
- 應(yīng)用隔離:不同子網(wǎng)容器之間默認(rèn)隔離的,即便它們位于同一臺物理機(jī)上也相互不通;不同物理機(jī)之間的容器默認(rèn)也是隔離的
- 物理機(jī)之間容器互通:weave connect $OTHER_HOST
- 動態(tài)添加網(wǎng)絡(luò):對于不是通過weave啟動的容器,可以通過weave attach 10.0.1.1/24 $id來添加網(wǎng)絡(luò)(detach刪除網(wǎng)絡(luò))
- 安全性:可以通過weave launch -password wEaVe設(shè)置一個密碼用于weave peers之間加密通信
- 與宿主機(jī)網(wǎng)絡(luò)通信:weave expose 10.0.1.102/24,這個IP會配在weave網(wǎng)橋上
- 查看weave路由狀態(tài):weave ps
- 通過NAT實(shí)現(xiàn)外網(wǎng)訪問docker容器
安裝與啟動
直接從github下載二進(jìn)制文件安裝。
# sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave # sudo chmod a+x /usr/local/bin/weave
啟動weave路由器,這個路由器其實(shí)也是以容器的形式運(yùn)行的。
# weave launch Unable to find image 'zettio/weave' locally ......
此時會發(fā)現(xiàn)有兩個網(wǎng)橋,一個是Docker默認(rèn)生成的,另一個是Weave生成的。
接下來就可以運(yùn)行應(yīng)用容器,使用weave提供的網(wǎng)絡(luò)功能了。
簡單使用
準(zhǔn)備
1. host1: 10.0.2.6
2. host2: 10.0.2.8
3. host1上的應(yīng)用容器1: 192.168.0.2/24 host1上的應(yīng)用容器2: 192.168.1.2/24
4. host2上的應(yīng)用容器1: 192.168.0.3/24
兩臺機(jī)上均安裝Docker及Weave,并均啟動好Weave路由容器。
在兩臺機(jī)上均啟動一個應(yīng)用容器??梢灾苯邮褂?code>weave run命令,也可以先使用docker run
啟動好容器,然后使用weave attach
命令給容器綁定IP地址。
# weave run 192.168.0.2/24 -itd ubuntu bash
或者
# docker run -itd ubuntu bash # weave attach 192.168.0.2/24 $ID
此時發(fā)現(xiàn)兩個容器之間是不通的,需要使用weave connect
命令在兩臺weave的路由器之間建立連接。
# weave connect 10.0.2.8
會發(fā)現(xiàn),此時位于兩臺不同主機(jī)上的容器之間可以相互ping通了。但是處于不同子網(wǎng)的兩個容器是不能互聯(lián)的,這樣我們就可以使用不同子網(wǎng)進(jìn)行容器間的網(wǎng)絡(luò)隔離了。
我們會發(fā)現(xiàn),如果不使用Docker的原生網(wǎng)絡(luò),在容器內(nèi)部是不能訪問宿主機(jī)以及外部網(wǎng)絡(luò)的。此時我們可以使用weave expose 192.168.0.1/24
來給weave網(wǎng)橋添加IP,以實(shí)現(xiàn)容器與宿主機(jī)網(wǎng)絡(luò)連通。但是,此時在容器內(nèi)部依然不能訪問外部網(wǎng)絡(luò)。
我們可以同時使用Docker的原生網(wǎng)絡(luò)和weave網(wǎng)絡(luò)來實(shí)現(xiàn)容器互聯(lián)及容器訪問外網(wǎng)和端口映射。使用外部網(wǎng)絡(luò)及端口映射的時候就使用docker0網(wǎng)橋,需要容器互聯(lián)的時候就使用weave網(wǎng)橋。每個容器分配兩個網(wǎng)卡。
其他特性應(yīng)用隔離:不同子網(wǎng)容器之間默認(rèn)隔離的,即便它們位于同一臺物理機(jī)上也相互不通(使用-icc=false關(guān)閉容器互通);不同物理機(jī)之間的容器默認(rèn)也是隔離的安全性:可以通過weave launch -password wEaVe設(shè)置一個密碼用于weave peers之間加密通信查看weave路由狀態(tài):weave ps問題容器重啟問題
如果使用weave,則就不能再使用docker自帶的auto-restart feature(如docker run –restart=always redis),因?yàn)閣eave是在docker之外為容器配置的網(wǎng)絡(luò),容器重啟的時候docker本身不會做這些事情。因而,還需額外的工具來管理容器的狀態(tài)(比如systemd, upstart等),這些工具要調(diào)用weave命令(weave run/start/attach)來啟動容器。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案
這篇文章主要介紹了Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Docker深度清除鏡像緩存overlay2的實(shí)現(xiàn)
維清理鏡像是通過命令?docker?rm?i?刪除鏡像的,但是這條命令不會刪除docker?build命令產(chǎn)生的緩存文件,本文主要介紹了Docker深度清除鏡像緩存overlay2的實(shí)現(xiàn),感興趣的可以了解一下2023-12-12Docker容器添加映射端口的兩種實(shí)現(xiàn)方法
本文主要介紹了Docker容器添加映射端口的兩種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07