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 容器間通訊的基礎,對於構建分散式應用和微服務架構至關重要。透過調整網路設定,你可以實現更復雜的網路拓撲和隔離策略。