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 專案進行修改,大大的提升開發效率~!