1. 程式人生 > >Docker | 網路 |(二)

Docker | 網路 |(二)

                         --昨夜西風凋碧樹,獨上高樓,望盡天涯路

none、host、bridge和joined解決了單個Docker Host內容器通訊的問題。

目前Docker的跨主機網路方案主要有:(1)Docker原生的overlay和macvlan;(2)第三方方案:flannel、weave和calico

  • libnetwork和CNM

libnetwork是docker容器網路庫,最核心的內容是其定義的Container Network Model(CNM),這個模型對容器網路進行了抽象,由一下三類組成:

1.Sandbox

Sandbox是容器的網路棧,包含容器的interface、路由表和DNS設定。Linux Network Namespace是Sandbox的標準實現。Sandbox可以包含來自不同Network的Endpoint。

2.Endpoint

Endpoint的作用是將Sandbox接入Network。Endpoint的作用是將Sandbox接入Network。Endpoint的典型實現是veth pair。一個Endpoing只能屬於一個網路,也只能屬於一個Sandbox。

3.Network

Network包含一組Endpoint,同一個Network的Endpoint可以直接通訊。Network的實現可以是Linux Bridge、VLAN等。

libnetwork CNM定義了docker容器的網路模型,按照該模型開發出的driver就能與docker dameon協同工作,實現容器網路。docker原生的driver包括none、bridge、host、overlay和macvlan,第三方driver包括flannel、weave、calico。

  • overlay

Docker overlay網路需要一個key-value資料庫用於儲存網路狀態資訊,包括Network、Endpoint、IP等。Consul、Etcd、和Zookeeper都是支援Docker的key-value軟體。