天天看點

虛拟化技術—docker容器—網絡模式

Docker作為目前最火的輕量級容器技術,有很多令人稱道的功能,如Docker的鏡像管理。然而,Docker同樣有着很多不完善的地方,網絡方面就是Docker比較薄弱的部分。是以,我們有必要深入了解Docker的網絡知識,以滿足更高的網絡需求。這裡先介紹Docker自身的4種網絡工作方式。

1、 Docker的4種網絡模式

我們在使用docker run建立Docker容器時,可以用--net選項指定容器的網絡模式,Docker有以下4種網絡模式:

§ host模式,使用--net=host指定。

§ container模式,使用--net=container:NAME_or_ID指定。

§ none模式,使用--net=none指定。

§ bridge模式,使用--net=bridge指定,預設設定。

下面分别介紹一下Docker的各個網絡模式。

1.1、host模式

Docker使用了Linux的Namespaces技術來進行資源隔離,如PID Namespace隔離程序,Mount Namespace隔離檔案系統,Network Namespace隔離網絡等。一個Network Namespace提供了一份獨立的網絡環境,包括網卡、路由、Iptable規則等都與其他的Network Namespace隔離。一個Docker容器一般會配置設定一個獨立的Network Namespace。但如果啟動容器的時候使用host模式,那麼這個容器将不會獲得一個獨立的Network Namespace,而是和主控端共用一個Network Namespace。容器将不會虛拟出自己的網卡,配置自己的IP等,而是使用主控端的IP和端口。

例如,我們在192.168.137.100/24的機器上用host模式啟動一個含有web應用的Docker容器,監聽tcp80端口。當我們在容器中執行任何類似ifconfig指令檢視網絡環境時,看到的都是主控端上的資訊。而外界通路容器中的應用,則直接使用192.168.137.100/24即可,不用任何NAT轉換,就如直接跑在主控端中一樣。但是,容器的其他方面,如檔案系統、程序清單等還是和主控端隔離的。

1.2、container模式

這個模式指定新建立的容器和已經存在的一個容器共享一個Network Namespace,而不是和主控端共享。新建立的容器不會建立自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口範圍等。同樣,兩個容器除了網絡方面,其他的如檔案系統、程序清單等還是隔離的。兩個容器的程序可以通過lo網卡裝置通信。

1.3、none模式

這個模式和前兩個不同。在這種模式下,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等資訊。需要我們自己為Docker容器添加網卡、配置IP等。

1.4、bridge模式

bridge模式是Docker預設的網絡設定,此模式會為每一個容器配置設定Network Namespace、設定IP等,并将一個主機上的Docker容器連接配接到一個虛拟網橋上。

<a href="http://s5.51cto.com/wyfs02/M01/8A/36/wKioL1gq9arw8RFdAAAfMLoIfY4904.png" target="_blank"></a>

本文轉自 sykmiao 51CTO部落格,原文連結:http://blog.51cto.com/syklinux/1873221,如需轉載請自行聯系原作者

繼續閱讀