Docker默认网络管理
在進行Docker安裝時,Docker就會自動創(chuàng)建三種網(wǎng)絡(luò)。客戶端可以通過網(wǎng)絡(luò)管理指令進行查看,具體操作指令如下。
$ docker network ls
? 上述指令用于列舉Docker中的所有網(wǎng)絡(luò),執(zhí)行后的效果如圖1所示。
圖1 Docker默認網(wǎng)絡(luò)
從圖1可以看出,Docker中默認的三種網(wǎng)絡(luò)分別為bridge、host和none,其中名為bridge的網(wǎng)絡(luò)就是默認的bridge驅(qū)動網(wǎng)絡(luò),也是容器創(chuàng)建時默認的網(wǎng)絡(luò)管理方式,配置后可以與宿主機通信從而實現(xiàn)與互聯(lián)網(wǎng)通信功能,而host和none屬于無網(wǎng)絡(luò),容器添加到這兩個網(wǎng)絡(luò)時不能與外界網(wǎng)絡(luò)通信。
下面通過一個示例來演示默認的bridge網(wǎng)絡(luò)管理方式,其執(zhí)行過程如下。
(1)創(chuàng)建并啟動容器。在終端窗口中執(zhí)行如下指令。
$ docker run -itd --name=networktest ubuntu
上述指令在后臺啟動了一個鏡像名稱為ubuntu的容器,并為啟動后的容器命名為networktest。
(2)使用網(wǎng)絡(luò)查看指令查看網(wǎng)絡(luò)詳情,具體操作指令如下。
$ docker network inspect bridge
上述指令用于核查名稱為bridge的網(wǎng)絡(luò)詳情,需要指明網(wǎng)絡(luò)名稱或者網(wǎng)絡(luò)ID,執(zhí)行上述指令后,效果如圖2所示。
從圖2可以看出,執(zhí)行上述指令后就會顯示出bridge網(wǎng)絡(luò)的所有詳細信息,其中就包括了使用默認的bridge網(wǎng)絡(luò)管理方式啟動的名稱為networktest的容器。
需要注意的是,這里介紹的三種網(wǎng)絡(luò)bridge、host和none都是在非集群環(huán)境下Docker提供的默認網(wǎng)絡(luò),而在Docker Swarm集群環(huán)境下,除了這三種默認網(wǎng)絡(luò)外,Docker還提供了docker_gwbridge和ingress兩種默認網(wǎng)絡(luò)。
小提示:
在上一章中已經(jīng)啟動了多個容器,并且都是默認使用bridge網(wǎng)絡(luò)進行管理的。為了不對本章節(jié)相關(guān)講解和測試造成干擾,建議先將前面章節(jié)創(chuàng)建的容器全部移除。
雖然Docker提供的默認網(wǎng)絡(luò)的使用比較簡單,但是為了保證各容器中應(yīng)用的安全性,在實際開發(fā)中更推薦使用自定義的網(wǎng)絡(luò)進行容器管理。
在Docker中,可以自定義bridge網(wǎng)絡(luò)、overlay網(wǎng)絡(luò),也可以創(chuàng)建network plugin(網(wǎng)絡(luò)插件)或者遠程網(wǎng)絡(luò)以實現(xiàn)容器網(wǎng)絡(luò)的完全定制和控制。接下來將分別針對這幾種自定義網(wǎng)絡(luò)進行講解。
為了保證容器的安全性,我們可以使用基于bridge的驅(qū)動創(chuàng)建新的bridge網(wǎng)絡(luò),這種基于bridge驅(qū)動的自定義網(wǎng)絡(luò)可以較好的實現(xiàn)容器隔離。
? 需要說明的是,這種用戶自定義的基于bridge驅(qū)動的網(wǎng)絡(luò)對于單主機的小型網(wǎng)絡(luò)環(huán)境管理是一個不錯的選擇,但是對于大型的網(wǎng)絡(luò)環(huán)境管理(如集群)就需要考慮使用自定義overlay集群網(wǎng)絡(luò)。
? 在Docker Swarm集群環(huán)境下可以創(chuàng)建基于overlay驅(qū)動的自定義網(wǎng)絡(luò)。為了保證安全性,Swarm集群使自定義的overlay網(wǎng)絡(luò)只適用于需要服務(wù)的群集中的節(jié)點,而不會對外部其他服務(wù)或者Docker主機開放。
? 如果前面幾種自定義網(wǎng)絡(luò)都無法滿足需求時,就可以使用Docker提供的插件來自定義網(wǎng)絡(luò)驅(qū)動插件。自定義網(wǎng)絡(luò)插件會在Docker進程所在主機上作為另一個運行的進程。
自定義網(wǎng)絡(luò)驅(qū)動插件與其他插件遵循相同的限制和安裝規(guī)則,所有插件都使用Docker提供的插件API,并且有一個包含安裝、啟動、停止和激活的生命周期。由于自定義網(wǎng)絡(luò)插件使用較少,所以讀者只需了解即可。
上一節(jié)已經(jīng)對Docker中幾種常用的自定義網(wǎng)絡(luò)進行了簡單介紹,本小節(jié)將針對非集群環(huán)境下基于bridge驅(qū)動的自定義網(wǎng)絡(luò)進行詳細講解。
? 在Docker主機上可以使用docker network create指令來創(chuàng)建網(wǎng)絡(luò),具體操作指令如下。
$ docker network create --driver bridge isolated_nw
? 執(zhí)行上述指令可以創(chuàng)建一個基于bridge驅(qū)動的名稱為isolated_nw的網(wǎng)絡(luò)。其中–driver(可簡寫為-d)用于指定網(wǎng)絡(luò)驅(qū)動類型,isolated_nw就是新創(chuàng)建的網(wǎng)絡(luò)名稱。需要說明的是,–driver bridge可以省略,省略時Docker會默認使用基于bridge驅(qū)動來創(chuàng)建新的網(wǎng)絡(luò)。
? 創(chuàng)建完網(wǎng)絡(luò)后,可以使用docker network ls指令查看創(chuàng)建的網(wǎng)絡(luò)是否成功,效果如圖1所示。
從圖1可以看出,新創(chuàng)建的isolated_nw網(wǎng)絡(luò)已經(jīng)在列表中展示出來,這說明新的bridge網(wǎng)絡(luò)創(chuàng)建成功。
除docker network ls指令外,還可以使用docker network inspect指令查看新建網(wǎng)絡(luò)的詳細信息。
自定義網(wǎng)絡(luò)創(chuàng)建成功后,就可以使用該網(wǎng)絡(luò)啟動一個容器,具體操作指令如下。
$ docker run --network=isolated_nw -itd --name=nwtest busybox
執(zhí)行上述指令后,會創(chuàng)建一個名為nwtest的容器,指令中的–network參數(shù)指定了該容器的網(wǎng)絡(luò)連接為自定義的isolated_nw。
通過docker inspect nwtest指令可以查看啟動后的容器詳情,來核查其網(wǎng)絡(luò)管理方式,效果如圖2所示。
從圖2可以看出,名為nwtest的容器使用的就是自定義的isolated_nw網(wǎng)絡(luò)進行容器網(wǎng)絡(luò)管理的。
名為nwtest的容器使用的只有自定義的isolated_nw一種網(wǎng)絡(luò)管理方式,我們還可以繼續(xù)為該容器添加其他網(wǎng)絡(luò)管理方式,具體操作指令如下。
$ docker network connect bridge nwtest
執(zhí)行上述指令后,會為容器nwtest另添加一種默認的bridge網(wǎng)絡(luò)管理方式。再次使用docker inspect nwtest指令查看該容器網(wǎng)絡(luò)詳情,效果如圖3所示。
從圖3可以看出,執(zhí)行完為容器添加網(wǎng)絡(luò)管理的指令后,容器nwtest就擁有了兩種網(wǎng)絡(luò)管理方式,分別為默認的bridge網(wǎng)絡(luò)和自定義的isolated_nw網(wǎng)絡(luò)。
? 容器既可以連接網(wǎng)絡(luò),也可以斷開網(wǎng)絡(luò)。這里以斷開nwtest容器的自定義網(wǎng)絡(luò)isolated_nw為例進行演示,斷開網(wǎng)絡(luò)連接的指令如下。
$ docker network disconnect isolated_nw nwtest
? 斷開網(wǎng)絡(luò)連接的指令與連接網(wǎng)絡(luò)的指令類似,在使用時也需要指定網(wǎng)絡(luò)名稱和容器名稱。
小提示:
一個容器可以有一到多個網(wǎng)絡(luò)連接,當使用斷開網(wǎng)絡(luò)連接的指令將一個容器內(nèi)的所有的網(wǎng)絡(luò)連接方式全部斷開后,雖然容器還在運行,但是容器內(nèi)部的應(yīng)用將無法被外界訪問。
? 當不再需要某個網(wǎng)絡(luò)時,可以將該網(wǎng)絡(luò)移除,但在移除網(wǎng)絡(luò)之前,一定要先將所有與該網(wǎng)絡(luò)連接的容器斷開。移除自定義網(wǎng)絡(luò)的指令如下。
$ docker network rm isolated_nw
? 執(zhí)行上述指令后,就可以移除名稱為isolated_nw的自定義網(wǎng)絡(luò)。當網(wǎng)絡(luò)移除成功后,會返回網(wǎng)絡(luò)名稱。為了驗證網(wǎng)絡(luò)是否移除成功,可以使用docker network ls指令列舉所有網(wǎng)絡(luò)進一步確認。
總結(jié)
以上是生活随笔為你收集整理的Docker默认网络管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker Registry本地私有仓
- 下一篇: 情人节特效.羞答答的玫瑰静悄悄的开效果.