docker利用namespaces和cgroups實現了應用隔離和資源控制,那麼網絡層優點如何實現的呢?是直接使用宿主機的網卡設備,仍是獨立創造出本身的網絡設備?以及容器如何與外界通訊,下面咱們經過簡單的說明以及示例,討論下單機模式下docker的網絡模式。docker
docker單機模式下,主要有四種網絡模式,能夠在建立容器的時候經過--network參數指定,這四種網絡模式以下:網絡
一、--network=bridge:網橋模式,這是docker默認的網絡模式,這種模式下,容器建立的時候,會生成一個獨立的網卡設備eth0,可是這個網卡設備沒法直接同外部通訊,須要經過網絡設備對veth,將容器內的eth0與docker0網橋連通,而後docker0與宿主機的eth0經過轉發綁定端口映射,實現容器內部同外部的通訊。spa
容器建立語法:docker run -d --name container_name --network bridge -p xxx:xxx image_name,因爲是默認的,因此不指定--network參數默認就是這種模式3d
示意圖以下:blog
二、--network=container:這種模式,docker在建立容器的時候會指定使用已經存在的容器的網卡設備做爲新建容器的網卡設備。這中模式須要注意,因爲是多個容器共用同一個eth0,因此須要注意端口衝突問題。資源
容器建立語法:docker run -d --name container_name --network container:已經存在的容器名稱 -p xxx:xxx image_name集羣
示意圖以下:容器
三、--network=host:這種模式,建立容器的時候,不會新建網卡設備,而是使用宿主機的網卡設備eth0,在這種模式下,容器直接使用宿主機的IP,一樣要注意端口的衝突問題。高可用
容器建立語法:docker run -d --name container_name --network host -p xxx:xxx image_namenetwork
示意圖以下:
四、--network=none:這種模式下,容器沒法與外界通訊,只能使用容器內部的迴環(127.0.0.1)在容器內部通訊。
容器建立語法:docker run -d --name container_name --network none image_name
示意圖以下:
以上是單機模式下docker的網絡模式,在實際使用中,爲了高可用,都是在集羣模式下,相關的網絡模式將在後面繼續討論。不足之處,歡迎指正。