docker實作跨主機通信
- 背景
- 準備
- docker網卡初始化
- 設定靜態路由
- 測驗網路互通
- 虛擬機a
- 虛擬機b
- 測驗網路
- 虛擬機a-容器
- 虛擬機b-容器
- 清除測驗資料
- 洗掉路由配置
- 洗掉docker網卡
- 寫在后面
背景
為了合理分配資源,需要將多個服務器的docker容器里面的網路實作互通,如a服務器的docker中啟動了服務a,b服務器的docker容器中的b服務需要呼叫a服務里面的介面,同時要保證不占用宿主機埠,就有了跨主機容器網路互通的需求,
準備
虛擬機a
ip: 192.168.101.150
虛擬機b
ip: 192.168.101.170
docker網卡初始化
分別對兩臺服務器中的docker創建網卡,分配ip地址范圍為 10.20.0.0/16 10.21.0.0/16
虛擬機a
docker network create test --driver bridge --ipam-driver default --subnet 10.20.0.0/16
虛擬機b
docker network create test --driver bridge --ipam-driver default --subnet 10.21.0.0/16
設定靜態路由
分別對虛擬機a,虛擬機b設定靜態路由,實作虛擬機a可以直接訪問虛擬機b的docker test網卡里面的容器,虛擬機b可以直接訪問虛擬機a的docker test網卡里面的容器
虛擬機a
route add -net 10.21.0.0 netmask 255.255.0.0 gw 192.168.101.150
#開啟路由轉發
iptables -P FORWARD ACCEPT
虛擬機b
route add -net 10.20.0.0 netmask 255.255.0.0 gw 192.168.101.170
#開啟路由轉發
iptables -P FORWARD ACCEPT
測驗網路互通
虛擬機a
虛擬機a啟動nginx容器
docker run --name nginx --net=test -d nginx:alpine
docker exec -ti nginx sh
ip如下

虛擬機b
虛擬機b啟動nginx容器
docker run --name nginx --net=test -d nginx:alpine
docker exec -ti nginx sh
ip如下

測驗網路
虛擬機a-容器
ping虛擬機b的宿主機ip

ping虛擬機b的docker容器中nginx的ip

curl虛擬機b的docker容器中nginx

ping同虛擬機的docker容器中其他容器的ip


虛擬機b-容器
ping虛擬機a的宿主機ip

ping虛擬機a的docker容器中nginx的ip

curl虛擬機a的docker容器中nginx

清除測驗資料
洗掉路由配置
服務器a
route del -net 10.21.0.0 netmask 255.255.0.0 gw 192.168.101.150
服務器b
route del -net 10.20.0.0 netmask 255.255.0.0 gw 192.168.101.170
洗掉docker網卡
服務器a
# 停掉啟動的容器
docker rm -f nginx
docker rm -f nginx1
docker network rm test
服務器b
docker rm -f nginx
docker network rm test
寫在后面
通過以上場景,就可以實作我們的局域網內的docker容器網路互通,如我們實作docker的cnm規范,然后將路由映射管理起來,則可以實作docker集群化,資源合理使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/387850.html
標籤:其他
上一篇:lamp 架構之lnmp架構
下一篇:三層架構詳解
