真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Docker網(wǎng)絡之單host網(wǎng)絡的示例分析-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關Docker網(wǎng)絡之單host網(wǎng)絡的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司主要為客戶提供服務項目涵蓋了網(wǎng)頁視覺設計、VI標志設計、全網(wǎng)整合營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應式成都網(wǎng)站建設、手機網(wǎng)站制作、微商城、網(wǎng)站托管及網(wǎng)頁維護、WEB系統(tǒng)開發(fā)、域名注冊、國內外服務器租用、視頻、平面設計、SEO優(yōu)化排名。設計、前端、后端三個建站步驟的完善服務體系。一人跟蹤測試的建站服務標準。已經(jīng)為成都軟裝設計行業(yè)客戶提供了網(wǎng)站營銷服務。

一、Docker默認網(wǎng)絡

在新安裝docker的主機上執(zhí)行

docker network ls

便能看到docker默認安裝的所有網(wǎng)絡,分別是none網(wǎng)絡、host網(wǎng)絡和bridge網(wǎng)絡。

1.1 none 網(wǎng)絡

none網(wǎng)絡就是什么都沒有的網(wǎng)絡。掛在這個網(wǎng)絡下的容器除了lo,沒有其他任何網(wǎng)卡。容器run時,可以通過添加--network=none參數(shù)來指定該容器使用none網(wǎng)絡。那么這樣一個只有l(wèi)o的網(wǎng)絡有什么用呢?此處CloudMan指出:

none網(wǎng)絡應用與隔離場景,一些對安全性要求高并且不需要聯(lián)網(wǎng)的應用可以使用none網(wǎng)絡。

比如某個容器的唯一用途是生成隨機密碼,就可以放到none網(wǎng)絡中避免密碼被竊取。

我可以理解none網(wǎng)絡肯定是用于隔離的,然而我好奇的是生成的隨機密碼如何發(fā)送到外部呢?如何被外部調用呢?這是我沒有想明白的問題。有知道的希望不吝賜教!謝謝!

1.2 host 網(wǎng)絡

連接到host網(wǎng)絡的容器共享Docker宿主機的網(wǎng)絡棧,即容器的網(wǎng)絡配置與host宿主機完全一樣。可以通過添加--network=host參數(shù)來指定該容器使用host網(wǎng)絡。

在容器中可以看到host的所有網(wǎng)卡,并且連hostname也是host的。host網(wǎng)絡的使用場景又是什么呢?

直接使用Docker host的網(wǎng)絡大的好處就是性能,如果容器對網(wǎng)絡傳輸效率有較高要求,則可以選擇host網(wǎng)絡。當然不便之處就是犧牲一些靈活性,比如要考慮端口沖突問題,Docker host上已經(jīng)使用的端口就不能再用了。

Docker host的另一個用途是讓容器可以直接配置 host 網(wǎng)路。比如某些跨host的網(wǎng)絡解決方案,其本身也是以容器方式運行的,這些方案需要對網(wǎng)絡進行配置。

相當于該容器擁有了host主機的網(wǎng)絡,那么其ip等配置也相同,相當于主機中套了一個與外部一模一樣的容器,可以直接通過host的ip地址來訪問該容器。

1.3 bridge 網(wǎng)絡

在不指定--network參數(shù)或者--network=bridge的情況下創(chuàng)建的容器其網(wǎng)絡類型都是bridge。

Docker在安裝時會在宿主機上創(chuàng)建名為docker0的網(wǎng)橋,所謂網(wǎng)橋相當于一個虛擬交換機,如果使用上述兩種方式run的容器都會掛到docker0上。

容器和docker0之間通過veth進行連接,veth相當于一根虛擬網(wǎng)線,連接容器和虛擬交換機,這樣就使得docker0與容器連通了。

二、自定義容器網(wǎng)絡

理論上有了上述三種網(wǎng)絡已經(jīng)足夠滿足普通用戶的需求,但是有時候可能用戶需要指定自己的網(wǎng)絡,以此來適應某些配置,如ip地址規(guī)劃等等。

2.1 創(chuàng)建自定義網(wǎng)絡

Docker提供三種user-defined網(wǎng)絡驅動:bridge,overlay和macvlan。overlay和macvlan用于創(chuàng)建跨主機的網(wǎng)絡,會在下一篇文章介紹。所以本文介紹創(chuàng)建bridge自定義網(wǎng)絡。命令如下:

docker network create -d bridge --subnet 172.10.0.0/24 --gateway 172.10.0.1 my_net

-d bridge表示自定義網(wǎng)絡的驅動為bridge,--subnet 172.10.0.0/24 --gateway 172.10.0.1分別指定網(wǎng)段和網(wǎng)關。

這樣就創(chuàng)建好了一個自動一網(wǎng)絡,可以通過以下命令查看此網(wǎng)絡的信息:

docker network inspect my_net

會得到此網(wǎng)絡的配置信息,my_net是剛剛創(chuàng)建的網(wǎng)絡名稱,如果為bridge就是查看docker創(chuàng)建的默認bridge網(wǎng)絡信息。

每創(chuàng)建一個自定義網(wǎng)絡便會在宿主機中創(chuàng)建一個網(wǎng)橋(docker0是創(chuàng)建的默認網(wǎng)橋,其實原理是一致的,而且也是對等的。)。名字為br-<網(wǎng)絡短ID>,可以通過brctl show命令查看全部網(wǎng)橋信息。

docker的自定義網(wǎng)絡與OpenStack中的網(wǎng)絡信息倒是基本一致。所以一通百通,只要docker的明白了,所有虛擬化甚至實體的網(wǎng)絡也就基本都搞清楚了。

2.2 使用自定義網(wǎng)絡

通過以下命令為容器指定自定義網(wǎng)絡:

docker run -it --network my_net --ip 172.10.0.3 busybox

其實這與使用docker默認網(wǎng)絡是一致的,都是添加--network參數(shù)參數(shù),此處也添加了--ip參數(shù)來指定容器的ip地址。

三、不同容器之間的連通性

同一個網(wǎng)絡(默認網(wǎng)絡或者自定義網(wǎng)絡)下的容器之間是能ping通的,但是不同網(wǎng)絡之間的容器由于網(wǎng)絡獨立性的要求是無法ping通的。原因是iptables-save DROP掉了docker之間的網(wǎng)絡,大概如下:

-A DOCKER-ISOLATION -i docker0 -o br-ac4fe2d72b18 -j DROP
-A DOCKER-ISOLATION -i br-ac4fe2d72b18 -o docker0 -j DROP
-A DOCKER-ISOLATION -i br-62f17c363f02 -o br-ac4fe2d72b18 -j DROP
-A DOCKER-ISOLATION -i br-ac4fe2d72b18 -o br-62f17c363f02 -j DROP
-A DOCKER-ISOLATION -i br-62f17c363f02 -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-62f17c363f02 -j DROP

那么如何讓不同網(wǎng)絡之間的docker通信呢?接下來介紹容器間通信的三種方式。

3.1 IP 通信

IP通信就是直接用IP地址來進行通信,根據(jù)上面的分析需要保證兩個容器處于同一個網(wǎng)絡,那么如果不在同一個網(wǎng)絡如何處理呢?

如果是實體機我們很容易理解,只需要為其中一臺服務器添加一塊網(wǎng)卡連接到另一個網(wǎng)絡就可以了。容器同理,只需要為其中一個容器添加另外一個容器的網(wǎng)絡就可以了。使用如下命令:

docker network connect my_net httpd

connect命令能夠為httpd容器再添加一個my_net網(wǎng)絡(假設httpd原來只有默認的bridge網(wǎng)絡)。這樣上面創(chuàng)建的busybox容器就能與此次connect的httpd容器進行通信。

3.2 Docker DNS Server

通過 IP 訪問容器雖然滿足了通信的需求,但還是不夠靈活。因為我們在部署應用之前可能無法確定IP,部署之后再指定要訪問的IP會比較麻煩。對于這個問題,可以通過docker自帶的DNS服務解決。

從Docker 1.10 版本開始,docker daemon 實現(xiàn)了一個內嵌的DNS server,使容器可以直接通過“容器名”通信。

方法很簡單,只要在啟動時用--name為容器命名就可以了。

下面的命令啟動兩個容器bbox1和bbox2:

docker run -it --network=my_net --name=bbox1 busybox
docker run -it --network=my_net --name=bbox2 busybox

然后,bbox2就可以直接ping到bbox1了,但是使用docker DNS有個限制,只能在user-defined網(wǎng)絡中使用。默認的bridge網(wǎng)絡是無法使用的。

3.3 joined 容器

joined 容器是另一種實現(xiàn)容器間通信的方式。joined 容器非常特別,它可以使兩個或多個容器共享一個網(wǎng)絡棧,共享網(wǎng)卡和配置信息,joined容器之間可以通過127.0.0.1直接通信。host網(wǎng)絡使得容器與宿主機共用同一個網(wǎng)絡,而jointed是使得兩個容器共用同一個網(wǎng)絡。

請看下面的例子:

先創(chuàng)建一個httpd容器,名字為web1。

docker run -d -it --name=web1 httpd

然后創(chuàng)建busybox容器并通過--network=container:web1指定jointed容器為web1:

docker run -it --network=container:web1 busybox

這樣busybox和web1的網(wǎng)卡mac地址與IP完全一樣,它們共享了相同的網(wǎng)絡棧。busybox 可以直接用127.0.0.1訪問web1的http服務。

其實也很容易理解,之前的--network參數(shù)指定了默認網(wǎng)絡或者自定義網(wǎng)絡,而此處是指定了一個容器,那么當然意思就是使用這個容器的網(wǎng)絡。這也有點類似上一篇文章講到的共享存儲。

joined 容器非常適合以下場景:

不同容器中的程序希望通過loopback高效快速地通信,比如web server與app server。

希望監(jiān)控其他容器的網(wǎng)絡流量,比如運行在獨立容器中的網(wǎng)絡監(jiān)控程序。

其實就是應用于即需要獨立而又需要兩個容器網(wǎng)絡高度一致的場景。

3.4 容器與外部網(wǎng)絡的連通性

3.4.1 容器訪問外部網(wǎng)絡

容器默認是能訪問外部網(wǎng)絡的。通過NAT,docker實現(xiàn)了容器對外網(wǎng)(此處外網(wǎng)不一定是互聯(lián)網(wǎng))的訪問。

3.4.2 外部網(wǎng)絡訪問容器

通過端口映射的方式實現(xiàn)外部網(wǎng)絡訪問容器,即通過-p參數(shù)實現(xiàn)將容器的端口映射到外部端口。

關于“Docker網(wǎng)絡之單host網(wǎng)絡的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


當前題目:Docker網(wǎng)絡之單host網(wǎng)絡的示例分析-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/dgedei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部