一個分佈式應用,多個容器之間每每須要通訊,好比 HTTP 服務容器每每須要與數據庫容器進行通訊。容器的通訊方式有如下幾種:docker
docker run
起一個容器時帶上 --link
參數指定該容器與其餘容器進行相關聯 (即將廢棄,原理就不描述了)docker network
系統來創建通訊Docker Network 有多種驅動模式,默認爲 bridge,即橋接模式。bridge network 原理是新建 network 時創建一個網橋(網關),全部加入此 network 的容器須要彼此通訊時經過該網橋進行轉發。每個 bridge network(包含網關及其下的容器)都有一個獨立的 IP 網段,不一樣網段間的容器沒法通訊,這也就是指定 bridge network 進行容器間網絡隔離的原理。數據庫
$ docker network ls NETWORK ID NAME DRIVER SCOPE 9c9d4fd4f950 bridge bridge local 3ce82c0caf70 host host local f1a111712ad4 none null local
Docker 內置了一個默認 bridge network(名爲 bridge,第一行),全部未指定 network 的容器,默認鏈接到此 network 中,其網段爲 172.17.0.X
。因此,兩個未進行任何鏈接操做的容器是能夠經過 IP 地址互相通訊的,由於他們同在一個 network 下,但通信只能經過 IP 地址進行(好比 ping 172.17.0.5
),不能夠經過容器名通訊(好比 ping container-name
)。但自定義建立的網絡能夠經過容器名進行通訊。網絡
圖中 docker0
即爲默認 bridge 網絡的網橋,它負責連通全部未指定 network 的容器,而且連通外網。分佈式
$ docker network create NAME
-d
參數,默認建立 bridge 驅動模式的 network。docker network connect
指令將容器鏈接到一個 network,也能夠在起容器(docker run
指令)時加入 --network
參數指定即將建立的容器加入到哪一個 network,還能夠經過 docker network disconnect
命令將容器移出自定義的 network。