Docker - 網路


Docker 網路是指使 Docker 容器能夠相互通訊以及與外部世界通訊的機制和配置。這允許容器交換資料、共享資源並與外部網路互動,就像在獨立機器上執行的任何傳統應用程式一樣。Docker 提供不同的網路驅動程式和功能來建立隔離的容器網路、定義網路拓撲和管理網路流量。

在建立和執行具有相互通訊元件的多容器應用程式時,Docker 網路至關重要。這還使我們能夠將 Web 伺服器連線到資料庫容器或在更復雜的網路架構中將微服務連結在一起。預設情況下,Docker 建立一個橋接網路,其中該主機上的所有容器都透過該橋接網路連線,並且可以相互通訊。但是,Docker 還支援其他網路驅動程式,用於覆蓋網路等內容,例如多主機通訊,以及用於直接訪問主機網路堆疊的主機網路。

Docker 中的網路型別

Docker 提供多個網路驅動程式,可以使用這些驅動程式根據特定需求建立不同型別的網路。每個驅動程式都是獨一無二的,提供一組不同的功能和功能,使您能夠調整容器之間的通訊和隔離。

驅動程式 描述
bridge 預設網路驅動程式。
host 刪除容器與 Docker 主機之間的網路隔離。
none 完全隔離容器與主機和其他容器。
overlay 覆蓋網路將多個 Docker 守護程式連線在一起。
ipvlan IPvlan 網路提供對 IPv4 和 IPv6 地址的完全控制。
macvlan 為容器分配 MAC 地址。

橋接網路(預設)

  • 這是安裝 Docker 時自動建立的預設網路。
  • 提供相同主機上容器之間基本的隔離。
  • 每個橋接網路容器都有一個 IP 地址,允許它透過其 IP 地址或容器名稱在同一網路上的容器之間進行通訊。
  • 容器也可以使用主機的網路連線來訪問外部網路。

主機網路

  • 它消除了容器與主機之間的網路隔離。
  • 容器使用主機的網路名稱空間、IP 地址和網路埠。
  • 如果容器需要訪問主機網路介面或需要非常低的網路訪問延遲,這將非常有用。

無網路

  • 它提供與所有其他網路的完全隔離。
  • 無網路上的容器沒有網路介面。
  • 方便用於執行不需要任何網路訪問的容器。

覆蓋網路

  • 它專為 Docker Swarm 叢集中的多主機網路而設計。
  • 允許在不同 Docker 主機上執行的容器相互通訊。
  • 它在多個主機上建立虛擬覆蓋網路。

Macvlan 網路

  • 為容器分配 MAC 地址,從而使其在網路上看起來像實際裝置。
  • 這在您需要將 Docker 容器整合到需要特定 MAC 地址的現有網路中或容器應該直接與某些物理裝置通訊的情況下很有用。

IPvlan 網路

  • 它提供對容器的 IPv4 和 IPv6 地址的更精細控制。
  • 它提供不同的模式(如 L2 或 L3)以滿足不同的隔離和路由需求。

應根據特定用例、所需的隔離級別、通訊級別以及與外部網路的整合來選擇正確的網路驅動程式。

重要的 Docker 網路命令

要管理 Docker 容器中的網路,您可以使用多個網路命令來建立、管理和檢查網路。這些命令可用於配置和維護 Docker 容器中的連線。以下是一些關鍵的 Docker 網路命令:

建立網路

您可以使用 docker network create 命令建立 Docker 網路。它允許您指定網路的驅動程式和選項。

$ docker network create my_network
Create a Network 1

使用此命令,您還可以指定網路驅動程式(例如,bridge、overlay)。

$ docker network create --driver bridge my_bridge_network
Create a Network 2

列出網路

如果您想列出主機上的所有網路,可以使用 docker network ls 命令。此命令的輸出將是所有網路的列表,以及它們的名字和驅動程式。

$ docker network ls
List Networks

檢查網路

在使用 Docker 中的網路時,您可能需要獲取與主機中網路相關的資訊。docker network inspect 命令可幫助您獲取與特定網路相關的詳細資訊。

它提供了重要的詳細資訊,例如網路的配置、連線的容器和 IP 範圍。

$ docker network inspect my_network
Inspect a Network

將容器連線到網路

如果您已經建立了一個網路並希望將其連線到正在執行的容器,則可以使用 docker network connect 命令。這將允許容器與命令中提到的網路上的其他容器通訊。

$ docker network connect my_network my_container
Connect a Container to a Network

斷開容器與網路的連線

如果網路與容器相關聯,並且您希望將其與容器斷開連線,則可以使用 docker network disconnect 命令。它將刪除容器與指定網路的連線。

$ docker network disconnect my_network my_container
Disconnect a Container from a Network

刪除網路

如果不再需要網路,則可以使用 docker network rm 命令將其從系統中刪除。藉助此命令,您只能刪除當前未使用任何容器的網路。

$ docker network rm my_network
Remove a Network

修剪未使用的網路

如果您想刪除所有未使用的 Docker 網路以釋放資源,則可以使用 docker network prune 命令。在刪除所有網路之前,此命令會提示您確認。

$ docker network prune
Prune Unused Networks

其他網路命令

建立覆蓋網路

$ docker network create --driver overlay my_overlay_network

建立 Macvlan 網路

$ docker network create --driver macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 -o parent=eth0 my_macvlan_network
Additional Network Commands

結論

在本章中,我們詳細討論了 Docker 網路。我們瞭解了 Docker 中不同型別的網路驅動程式以及如何使用各種 Docker 網路命令來管理容器連線。這些命令允許您在 Docker 環境中建立、配置和管理網路。

Docker 網路常見問題解答

1. 如何將容器連線到 Docker 中的同一網路?

您可以透過將 --network 標誌傳遞給 docker run 命令或在 docker-compose.yml 中配置網路來實現。您只需在使用 --network 標誌呼叫時使用要連線容器到的網路的名稱即可。在 Docker Compose 中,您新增一個網路部分並定義配置。

2. Docker 中的橋接網路和覆蓋網路有什麼區別?

橋接網路是 Docker 中的預設網路,並根據 IP 提供相同主機上容器之間簡單的通訊。覆蓋網路用於 Swarm 模式,以啟用跨多個主機的容器之間的通訊 - 每個 Swarm 建立一個跨越 Swarm 的虛擬網路。

3. 如何在 Docker 容器上公開埠?

在啟動容器時,您可以使用 –p 或 --publish 選項公開 Docker 容器上的埠。格式很簡單:hostPort:containerPort,其中您希望在主機機器上公開 hostPort,而 containerPort 是應用程式在容器中偵聽的內容。

4. 如何排查 Docker 中的網路問題?

如果您在 Docker 網路方面遇到一些問題,您需要首先使用 Docker inspect 檢查容器的網路配置。您還可以檢查容器日誌中是否存在與網路相關的任何錯誤訊息。如有必要,您可以使用 docker network 命令列出、檢查和診斷 Docker 網路的問題。

廣告