Docker網路模型深度解析

TechSynapse發表於2024-08-28

Docker 的網路模型是 Docker 容器之間以及與宿主機之間進行通訊的基礎。Docker 提供了幾種不同的網路模式,包括 bridge(橋接模式,預設模式)、host(主機模式)、none(無網路模式)、container(容器模式)以及自定義網路(如 overlay 網路,用於 Docker Swarm)。這裡,我們將詳細解析 bridge 網路模式,並提供一個實際的程式碼示例,展示如何建立容器並讓它們在同一橋接網路上通訊。

1. Bridge 網路模式

Bridge 網路是 Docker 預設的網路模式。Docker 會在宿主機上建立一個虛擬的橋接網路介面(通常是 docker0),然後將容器連線到這個橋接網路上。每個容器都會被分配一個唯一的 IP 地址,並且可以透過 IP 地址或者容器名(在 Docker 內部 DNS 解析的幫助下)相互通訊。

2. 示例:建立兩個容器並讓它們通訊

步驟 1: 建立第一個容器

我們將建立一個執行 Web 伺服器的容器(比如 Nginx),並將其命名為 web-server

bash複製程式碼

docker run --name web-server -d -p 8080:80 nginx

這裡,-d 參數列示在後臺執行容器,-p 8080:80 表示將容器的 80 埠對映到宿主機的 8080 埠,nginx 是要執行的映象名稱。

步驟 2: 建立第二個容器

我們將建立一個簡單的容器,使用 curl 命令來訪問前面建立的 Web 伺服器。為了展示容器間的直接通訊,我們將不使用宿主機的埠對映。

首先,我們需要一個包含 curl 的映象。這裡,我們使用 alpine 映象,它是一個非常輕量級的 Linux 發行版,包含了許多常用的命令列工具。

bash複製程式碼

docker run --rm -it --name curl-client alpine sh

在容器的 shell 中,我們可以直接執行 curl 命令來訪問 web-server 容器。由於它們都在同一個橋接網路上,我們可以直接使用容器名 web-server 來訪問它(Docker 會處理 DNS 解析)。

bash複製程式碼

/ # curl web-server

由於 web-server 容器執行的是 Nginx,因此上面的命令應該會返回 Nginx 的預設歡迎頁面。

3. 退出 curl-client 容器

curl-client 容器的 shell 中,你可以透過輸入 exit 命令來退出容器。由於使用了 --rm 引數,這個容器會在退出後自動刪除。

4. 驗證和除錯

如果你想要檢視 Docker 的網路配置,可以使用 docker network ls 來列出所有網路,並使用 docker network inspect <network_name> 來檢視特定網路的詳細資訊。對於橋接網路,預設的網路名稱通常是 bridge,但你也可以透過 docker network create 命令建立自定義的橋接網路。

5. 結論

以上示例展示瞭如何在 Docker 的橋接網路模式下建立兩個容器,並使它們能夠相互通訊。這是 Docker 容器間通訊的基礎,對於構建分散式應用和微服務架構至關重要。透過調整網路設定,你可以實現更復雜的網路拓撲和隔離策略。

相關文章