docker - 關於network的一些理解

docker 提供給咱們多種(4種)網絡模式,咱們能夠根據本身的需求來使用。例如咱們在一臺主機(host)或者同一個docker engine上面運行continer的時候,咱們就能夠選擇bridge網絡模式;而當咱們須要在多臺host上來運行多個container來協同工做的時候,overlay模式就是咱們的首選。html

 

當咱們完成docker engine的安裝之後,docker會在每個engine上面生成一個3種網絡,他們是:bridge, none 還有host。node

 

 

默認網絡模式 - bridge

 

首先來侃一侃docker0. 之因此說它是默認的網絡,是因爲當咱們運行container的時候沒有「顯示」的指定網絡時,咱們的運行起來的container都會加入到這個「默認」 docker0 網絡。他的模式是bridge。docker

 

 

無網絡模式 - none

顧名思義,全部加入到這個網絡模式中的container,都"不能」進行網絡通訊。貌似有點雞肋。。。網絡

 

宿主網絡模式 - host

這種網絡模式將container與宿主機的網絡相連通,雖然很直接,可是卻破獲了container的隔離性,所以也比較雞肋。。。ide

 

自定義網絡

因爲以前介紹的3種自帶的網絡模式有各自的侷限性,所以,docker推薦你們自定義網絡。經過自定義網絡,咱們能夠實現「服務發現」與「DNS解析」。工具

docker 容許咱們建立3種類型的自定義網絡,bridge,overlay,MACVLAN (目前我尚未用到)。post

 

自定義bridge網絡

與docker0相似,咱們能夠自定義bridge網絡,經過使用自定義bridge網絡,咱們就能夠實如今一臺host上的多個container之間的通訊。他的網絡模型以下(圖片來自docker官網):ui

 

docker_gwbridge

他在本質上仍是一個local的bridge網絡,可是他是咱們實現多個host之間的container通訊的基礎。一般狀況下,當咱們在連接swarm nodes的時候,docker_gwbridge網絡就會被在每個swarm節點上自動建立出來。url

 

自定義Overlay網絡

docker提供給咱們兩種方式來定義overlay網絡,在docker1.12以前,咱們須要依靠第三方的工具( Consul, Etcd, and ZooKeeper (Distributed store))來經過註冊於寄存統一的「key-value」來實現「服務發現」和「DNS解析」,從而達到多個container不一樣host上的的通訊。 可是在docker1.12以後,咱們能夠直接用「原生態」的swarm來實現「服務發現」和「DNS解析」。spa

 

swarm在設計之初是爲了service(一組container)而服務的,所以經過swarm建立的overlay網絡在一開始並不支持單獨的container加入其中。可是在docker1.13, 咱們能夠經過「--attach」 參數聲明當前建立的overlay網絡能夠被container直接加入。

# docker network create --driver=overlay --attachable name=myOverlayNet 

在建立overlay網絡以前,咱們須要先搭建swarm集羣,詳細內容能夠參考我以前的隨筆:

Docker - 運行 containers 使用在 swarm 模式下建立的 overlay 模式的 network

 

Docker 內置的DNS server

在這裏,咱們會很好奇爲何docker可以作到container之間的通訊呢? 答案就是 docker 內置的 DNS server.  關於他的詳細介紹,請參考官網連接。

https://docs.docker.com/engine/userguide/networking/configure-dns/

相關文章
相關標籤/搜索