Overview

Bridge network 是利用的是 Docker Host 上的 software bridge 來達成讓 container 可以對外連線的目的,並透過此 bridge 可以讓同一個 bridge 的 container 之間相互進行通訊,同時與未連接到該 bridge 的 container 隔離。並且 docker bridge driver 會自動在 Host 上設定相對應的 rule (iptables, network namespace),讓不同 bridge 上的 container 無法直接互相通訊。

Bridge network 是處理在單一 docker daemon 上運行的 container 之間的相互通訊,若是要處理多個 docker daemon 上的 container 通訊,可以在 OS 級別管理路由,或是使用 Overlay network。

當 docker 啟動時,會自動創建一個預設的 bridge network(預設名稱為 docker0 或 Bridge),docker0 會和 host 中的對外網卡(eth0)相連,解此取得對外連線的能力。除非另外設定,不然預設啟動的 container 將連接到這個 bridge network 並被分配一個 IP。如果想要自定義 Network 也可以自行設定,使用自定義的 bridge network 會比預設的 bridge 好一些。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d605f844-32ea-4558-8c2c-3f6e41d2410d/Untitled.png

假設一個外部 192.168.0.5 的設備要訪問我們的主機的 container_1 ,我們要設定-p,把container 內的 port 暴露出來,這參數會自動設定內外部 network 的轉換 NAT (Network Address Translation )。

舉例來說,當我們使用參數 -p 8080:80 開啟 container_1 port 8080 時,從外部 192.168.0.5 訪問 192.168.0.2:8080 就會透過 NAT 轉到容器的 172.17.0.2:80

Usage

Bridge network 有以下使用方法:

container 與 container 連線

  1. 使用預設 bridge network(不推薦)

  2. 使用自訂 bridge network

    因為 docker 對於自訂的 docker network 會提供 automatic service discovery 的功能,讓 container 之間可以透過 name 或 ID 來與對方通訊

container 與 host 連線

bridge network 就是在 container 之間架起一座橋樑,各自的 container 擁有各自的 IP 並利用 IP 進行互相溝通。

以預設 docker0 為例, host 以 172.17.0.1 來與 container (172.17.0.2 ~ 172.17.255.254) 溝通,也就是透過虛擬網卡來達到和 container 同一區域網路的目的。