Docker network 介紹 - ianchen0119/Introduce-to-5GC GitHub Wiki
本文目標:
- 理解 Docker Container 的網路種類
- 如何實作各類 Docker Network
- 常用指令集合
Docker 網路的種類
為了因應各種使用場景,Docker 發展出了四種不同的 Network,本節會詳細介紹它們的特色以及適用的場景。
橋接式網路
橋接器可以將網路中的多個網段在 Data Link Layer(OSI模型第2層)上連接起來。 而 Docker 也提供了類似的功能,讓我們可以把兩個 Container 的網路環境橋接起來。
以上圖來看,web 以及 db 這兩個容器的網路會被橋接在一塊,彼此互通且共用一個內部 IP。
在學習建立橋接式網路之前,先來看看 Docker network 要如何使用:
$ docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.
藉由 --help
選項可以得知,若要建立一個網路,需使用 docker network create
。
新增完網路 test_net
後,可以使用 docker network inspect
取得更詳細的資訊:
若使用完畢,可以使用 docker network rm
移除已建立的網路:
使 Container 連至 Network
若 Container 仍未啟動,可以在使用 docker run
時加上 --network
選項連上指定的網路:
docker run --name web --network test_net -d -p 80:80 YOUR_IMAGE_NAME
--name
指定 container 的名稱。--network
指定要連上的網路名稱。-d
表示--detach
,讓 Container 在背景運作。-p
表示 PORT FORWARDING,可以將 Container 的 Port 映射到主機上。
詳細操作可以參考 Docker docs。
此外,若 Container 已經在運作階段,我們可以改用 docker network connect
達到相同的目的:
docker network conntect test_net YOUR_CONTAINER_NAME
反之,若要讓 Container 與網路斷開連結,則可以使用 docker network disconnect
:
docker network disconnect test_net YOUR_CONTAINER_NAME
當兩個以上的 Container 都連線至同一個網路後,可以使用
docker network inspect test_net
確認網路狀態。
覆蓋網路
如上圖,覆蓋網路可以令處於不同 Docker daemon 下的 Container 互相通訊。
覆蓋網路的建立方式要比橋接式網路複雜,詳細說明可以參考 Docker Docs。
Host network
若使用 Host network,Container 與 Host 之間的網路環境會是互通的:
docker run --rm -d --network host --name my_nginx nginx
Maclvan networks
Maclvan 允許使用者能將實體網卡設定多個 mac address,並將這些 address 分配給 Container 使用,使其在 network 上顯示為 physical address 而非 virtual address。maclvan 希望能讓某些只能連到物理設備的應用程序能夠正常運作。
關於設定 Maclvan 的方式可以參考:https://docs.docker.com/network/macvlan/。
總結
本篇文章介紹了 Docker 的網路模型,有了 Docker Network 我們就能將多個運作中的 Container 相連,使多個元件可以在分離的執行環境中互相溝通。 不過,當整個專案的網路拓墣來到一定的規模時,要啟動每一個 Container 並且設定 Docker Network 就顯得有些沒效率了,因此,之後的文章會使用 docker-compose 這個專案快速的幫我們建置理想的執行環境,所有實驗或是實作都可以基於 docker-compose 專案進行修改,大大的提升開發效率~!