5.1 主要類型的自定義網路
Docker 中的自定義網路為容器之間的網路互動提供了靈活的配置和管理選項。它們可以隔離容器、組織容器之間的互動並創建複雜的網路拓撲。在這堂課中,我們將探討如何在 Docker 中創建和配置自定義網路,以及它們的使用範例。
主要類型的自定義網路
Docker 支援幾種類型的自定義網路,每種類型都有其特點,並適用於不同的使用場景:
-
Bridge (橋接網路)
: 提供單一主機上容器之間的隔離和通信。這種類型的網路預設用於不需要與主機外部互動的本地應用程式。 -
Overlay (疊加網路)
: 用於連接不同主機上的容器,例如在 Docker Swarm 或 Kubernetes 集群中運行的容器。它們為分散式應用提供了高擴展性和安全性。 -
Macvlan
: 容許容器直接使用主機的物理網路介面。這對於對性能要求極高的網路應用程式特別有用,也適合需要綁定到特定 MAC 地址的情況。在 Macvlan 網路中的容器可以作為獨立節點與物理網路中的其他設備互動。 -
Host (主機網路)
: 容器使用主機的網路堆疊,這消除了網路虛擬化的額外開銷,但也減少了隔離性。這種類型的網路適用於需要最高網路性能的應用。
5.2 建立與使用橋接 (bridge) 網路
橋接網路 (bridge) 是最常見的一種自定義網路類型,用於隔離同一主機上的容器。連接到同一橋接網路的容器可以通過 IP 地址和主機名稱互相通信。
建立自定義 bridge 網路
要建立自定義 bridge 網路
,請使用指令 docker network create
:
docker network create --driver bridge my_bridge_network
在自定義網路中啟動容器
啟動連接到已建立網路的容器:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
檢查容器之間的連線
你可以用指令 ping
來檢查容器之間的連線:
docker exec container2 ping -c 4 container1
如果容器已正確地連接到網路 my_bridge_network
,指令 ping
將執行成功。
5.3 在Docker Compose
中使用自定義網路
在Docker Compose
中使用自定義網路的範例
Docker Compose 簡化了為多容器應用程式創建和管理網路的過程。你可以在 docker-compose.yml
文件中定義自定義網路。
docker-compose.yml
文件的範例:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
執行 Docker Compose:
docker compose up -d
在這個範例中,兩個服務 (web
和 app
) 都連接到自定義網路 my_bridge_network
。
5.4 設定與使用 macvlan
網路
macvlan
網路允許容器直接使用主機的實體網路介面,這對於對網路性能有高要求的應用程式來說很有用。這種網路中的容器會獲得指定子網內的 IP 地址,讓它們可以和主機一樣在相同的網路中可見。
建立 macvlan
網路
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
在這個命令中:
--subnet
: 定義將容器放置的子網。--gateway
: 設定容器的網關。-o parent
: 指定主機的網路介面,網路將綁定於此。
在 macvlan
網路中啟動容器
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
在這個例子中,兩個容器都連接到 my_macvlan_network
網路,並且可以通過實體網路介面 eth0
訪問外部網路。
5.5 在 Docker Compose
中的使用範例
你也可以在 Docker Compose
中使用 macvlan
網路。例如:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
執行 Docker Compose
:
docker compose up -d
在這個範例中,網路 my_macvlan_network
允許服務 web
與子網 192.168.1.0/24
中的設備互動,包括主機。
實際建議:
- 訪問配置: 確保你的路由器或網路管理員允許使用
macvlan
設定中的子網。 - 隔離: 如果安全性非常重要,使用 VLAN 進行網路分段,確保容器只能訪問必要的資源。
- 測試: 完成配置後,使用
ping
或curl
等指令測試容器與外部網路之間的連接。
5.6 使用網路構建微服務範例
來看看一個例子,其中我們有前端、後端和資料庫,這些都被隔離在不同的網路中,但仍然可以通過網路交叉進行互動。
檔案 docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
運行 Docker Compose
:
docker compose up -d
在這個範例中:
- 服務
frontend
被連接到網路front-tier
和back-tier
,這讓它既能與外部客戶端互動,也能與後端互動。 - 服務
backend
被連接到網路back-tier
和db-tier
,這讓它既能與前端互動,也能與資料庫互動。 - 服務
database
僅被連接到網路db-tier
,這保證了資料庫從外部訪問的隔離。
實用建議:
- 使用隔離: 將網路分開有助於限制服務對資料庫或其他關鍵資源的訪問。
- 檢查連接: 確保服務可以通過共享網路進行互動,可以使用
ping
或curl
命令來測試。 - 優化: 如果你的專案需要在群集或多主機上執行,請使用
overlay
網路。
這個範例說明了如何創建網路隔離,並同時在應用程序的不同層之間實現互動。
GO TO FULL VERSION