目錄

Network 手動配置

Docker Network 可以調整非常多設定,而在使用 Network 連結 container 使用的是預設的 bridge 模式,這個模式符合大多數開發階段的情境,所以通常不會調整它。但如果想要將 Docker 活用在更多地方的話,那就勢必要了解 Docker Network 是如何配置的。

對網路架構不熟,因此單純就從 docker 指令來了解架構。

安裝好 Docker 後,可以使用 docker network ls 指令來查看目前的網路設定配置:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2017cca0027d        bridge              bridge              local
1b1c05935480        host                host                local
8b9319cd142e        none                null                local

預設的 bridge 網路配置,即很多文章會提到的 docker0。

使用 docker network create,預設會是 bridge 模式:

$ docker network create my-net
78ad7c4ad6a0f9a42dcd7c08c874fd532140ea0a7c07bca2c28889b97fe49c47

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2017cca0027d        bridge              bridge              local
1b1c05935480        host                host                local
78ad7c4ad6a0        my-net              bridge              local
8b9319cd142e        none                null                local

它能滿足大多數的情境,所以才會做為預設設定。

當使用 container 設定成 host 時,Docker 會與 host 共享網路資源,但檔案系統依然是分開獨立的。

注意:下面這個範例需要在 Linux 上才能 work。

# 啟動 Nginx 並開啟 80 port,注意這裡沒有 -p 參數
docker run -d -it --net=host nginx:alpine

# 確認 localhost 80 port 正常
curl http://localhost

# 啟動新的 Nginx 但這次就無法啟動,因為 80 port 被佔走了
docker run --rm -it --net=host nginx:alpine

因不需要做 port forwarding,其實蠻方便的。但缺點就是 container 開了任何 port,都會佔用到 host 資源,反之亦然,這樣隔離性就會降低。

host 類似,不同點在於網路配置會與指定的 container 共享。

# 啟動 web server
docker run -d -it --name web nginx:alpine

# 啟動 BusyBox 並把它網路設定成 web
docker run --rm -it --net=container:web busybox

# 這裡的回傳的結果即 Nginx container 回應
wget -q -O - http://localhost

特色也跟 host 一樣,某些情境非常好用,但隔離性就會變差。

顧名思義,它就是沒有設定網路,必須要手動為它配置網卡才能正常運作。

清楚知道 Network,才能順利在許多 host 的環境下串接 container。它甚至就像一個迷你的 VPC 一樣,可以建構出簡單網路架構的私有雲。

對開發階段來說,善用 Network 也有辦法模擬出一般線上實際環境,對於除錯會非常有幫助。