docker的四種網絡模式(十三)

目錄

1,概述

2,bridge模式

3,host模式

4,none模式

5,container模式


1,概述

docker run創建Docker容器時,可以用–net選項指定容器的網絡模式,Docker有以下4種網絡模式: 

bridge模式:使--net =bridge指定,默認設置; 

host模式:使--net =host指定; 

none模式:使--net =none指定; 

container模式:使--net =container:NAMEorID指定。 

可以使用docker network ls來查看

                                             

下面我們分別來講解docker的四種網絡模式: 


2bridge模式

bridge模式是Docker默認的網絡設置,此模式會爲每一個容器分配Network Namespace、設置IP等,並將並將一個主機上的Docker容器連接到一個虛擬網橋上。當Docker server啓動時,會在主機上創建一個名爲docker0的虛擬網橋,此主機上啓動的Docker容器會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。接下來就要爲容器分配IP了,Docker會從RFC1918所定義的私有IP網段中,選擇一個和宿主機不同的IP地址和子網分配給docker0,連接到docker0的容器就從這個子網中選擇一個未佔用的IP使用。如一般Docker會使用172.17.0.0/16這個網段,並將172.17.42.1/16分配給docker0網橋(在主機上使用ifconfig命令是可以看到docker0的,可以認爲它是網橋的管理端口,在宿主機上作爲一塊虛擬網卡使用)。 

具體操作: 

啓動容器:(由於是默認設置,這裏沒指定網絡–net =bridge,可以看到容器內創建了eth0 

                                           

使用ping命令連接Host網絡發現,容器與Host網絡是連通的: 

                                          

eth0實際上是veth pair的一端,另一端(veth945c)連接在docker0網橋上: 

                                         


3host模式

如果啓動容器的時候使用host模式,那麼這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。 

使用host模式啓動容器: 

                                         

使用host模式啓動容器後可以發現,使用ip addr查看網絡環境時,看到的都是宿主機上的信息。這種方式創建出來的容器,可以看到host上的所有網絡設備。 

容器中,對這些設備有全部的訪問權限。因此docker提示我們,這種方式是不安全的。如果在隔離良好的環境中(比如租戶的虛擬機中)使用這種方式,問題不大。 


4none模式

none模式下,Docker容器擁有自己的Network Namespace,但是,並不爲Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己爲Docker容器添加網卡、配置IP等。 

使用--net =none模式啓動容器: 

                                         


5container模式

這個模式指定新創建的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口範圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的。兩個容器的進程可以通過lo網卡設備通信。 

使用--net =container模式啓動容器: 

                                         

通過該例子可以看出來,兩者的網絡完全相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章