1. 程式人生 > >Docker的四種網路模式

Docker的四種網路模式

docker run建立Docker容器時,可以用–net選項指定容器的網路模式,Docker有以下4種網路模式:
 bridge模式:使用–net =bridge指定,預設設定;
 host模式:使用–net =host指定;
 none模式:使用–net =none指定;
 container模式:使用–net =container:NAMEorID指定。
下面我們分別來講解docker的四種網路模式:
1) bridge模式:
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的一端,另一端(veth 491226e)連線在docker0網橋上:
這裡寫圖片描述
列出當前主機網橋:
這裡寫圖片描述
2) host模式:
如果啟動容器的時候使用host模式,那麼這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網絡卡,配置自己的IP等,而是使用宿主機的IP和埠。
使用host模式啟動容器:
這裡寫圖片描述
使用host模式啟動容器後可以發現,使用ip addr檢視網路環境時,看到的都是宿主機上的資訊。這種方式創建出來的容器,可以看到host上的所有網路裝置。
容器中,對這些裝置有全部的訪問許可權。因此docker提示我們,這種方式是不安全的。如果在隔離良好的環境中(比如租戶的虛擬機器中)使用這種方式,問題不大。
3) none模式:
在none模式下,Docker容器擁有自己的Network Namespace,但是,並不為Docker容器進行任何網路配置。也就是說,這個Docker容器沒有網絡卡、IP、路由等資訊。需要我們自己為Docker容器新增網絡卡、配置IP等。
使用–net =none模式啟動容器:
這裡寫圖片描述

4) container模式:
這個模式指定新建立的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新建立的容器不會建立自己的網絡卡,配置自己的IP,而是和一個指定的容器共享IP、埠範圍等。同樣,兩個容器除了網路方面,其他的如檔案系統、程序列表等還是隔離的。兩個容器的程序可以通過lo網絡卡裝置通訊。
使用–net =container模式啟動容器:
這裡寫圖片描述
這裡寫圖片描述
通過該例子可以看出來,兩者的網路完全相同。
參考:http://www.docker.org.cn/dockerppt/111.html
http://blog.csdn.net/halcyonbaby/article/details/42112141