3.1 bridge-network 基礎
Bridge 網路 是 Docker 中的預設網路驅動,用於建立一個隔離的網路,讓容器能互相通信。這個網路允許容器通過 IP 地址和主機名稱進行通信,提供了一個方便的方式來組織多容器應用的不同組件之間的交互。
Bridge 網路 在主機級別上建立了一個私有內部網路,該網路與主機的外部網路隔離。連接到此網路的容器可以彼此通信,但在未設置端口轉發的情況下無法直接從外部訪問。
自動創建 bridge-network
默認情況下,Docker 在安裝時會創建 bridge-network,而未指定特定網路的容器會自動連接到該網路。
創建和使用容器於 bridge-network 的範例
1. 在 bridge-network 中啟動容器:
在這個範例中,我們啟動了兩個容器:一個是帶有 Nginx 的 container1,另一個是帶有 Busybox 的 container2。兩個容器都連接到默認的 Bridge 網路。
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. 檢查容器的 IP 地址:
要檢查容器的 IP 地址,可以使用 docker inspect 指令。
這些指令將輸出容器的 IP 地址,這些地址可以用於它們之間的通信。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. 通過 IP 地址進行容器之間的通信:
為了檢查容器之間的通信,可以使用 ping 指令,從 container2 ping container1。
如果容器正確連接到 bridge-network,則 ping 指令 會成功。
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
說明: Bridge 網路為需要互相通信的本地應用提供了一個簡單的解決方案,同時保持與外部網路的隔離。通過 IP 地址的 ping 是檢查網路連接的基本方法,但對於更複雜的應用程序,可能需要配置 DNS 或其他網路驅動程序。
3.2 使用主機名稱
使用主機名稱來連結容器
除了使用 IP 位址之外,Docker 也允許使用容器名稱來進行連結。這樣可以簡化配置,因為容器的名稱是固定的,而 IP 位址可能在容器重新啟動時發生變化。
基於主機名稱的連結範例
1. 使用 bridge 網路啟動容器:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. 驗證基於主機名稱的連結:
使用 ping 命令 從容器 appserver ping webserver:
docker exec appserver ping -c 4 webserver
建立自訂的 bridge 網路
除了使用預設的 bridge 網路 之外,你還可以建立自訂的 bridge 網路,以更好地控制容器之間的互動。
自訂網路的建立範例
1. 建立自訂網路:
docker network create --driver bridge my_bridge_network
2. 在自訂網路中啟動容器:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. 驗證基於主機名稱的連結:
docker exec appserver ping -c 4 webserver
3.3 多主機範例
一些實際應用的例子
範例 1: 網頁伺服器與數據庫
建立檔案 docker-compose.yml 用於網頁伺服器和數據庫:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
啟動 Docker Compose:
docker compose up -d
檢查容器之間的連接:
docker compose exec web ping -c 4 db
範例 2: 微服務架構
建立檔案 docker-compose.yml 用於微服務應用:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
啟動 Docker Compose:
docker compose up -d
檢查容器之間的連接:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION