docker中如何進行互通
單容器通訊
NONE
none優點是可以生成隨機碼,缺點是無法通訊。
docker run -it --network none 鏡像ID或者名稱
HOST
host優點是性能比較好,缺點是會有端口衝突的問題,可以使用於對性能有要求的容器。
docker run -it --network host 鏡像ID或者名稱
bridge
我們創建容器的時候會發現我們有一個docker0的虛擬橋接網卡,可以根據這個橋接卡進行通訊。
查看當前主機下的虛擬橋接網卡
brctl show
新建一個my_net的橋接卡
docker network create --driver bridge my_net
查看橋接卡的信息
docker network ls
查看my_net這塊網卡的詳細信息
docker network inspect my_net
創建並開啓一個名爲test的容器並連接上my_net這塊網卡
docker run -itd --name test --network my_net busybox
創建可自定義ip的橋接卡
創建一個叫my_net2並可以自定義ip網關的橋接卡。
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
創建並啓動容器
docker run -itd --network my_net2 --name test3 busybox
驗證是否可以通訊
直接創建可自定義IP的容器
創建並啓動容器 並將ip自定義設置
docker run -itd --network my_net2 --ip 172.22.16.8 鏡像ID或名稱
一個容器可以同時連接兩塊橋接卡
給容器test1新增加一塊網卡
docker network connect 虛擬網卡名稱 容器ID或名稱
多容器通訊
開啓網絡混雜模式 需要通訊的主機都需要進行配置
ip link set 網卡名稱 promisc on
查看網卡信息
ip link show
創建一個網卡 需要通訊的主機都需要進行配置
docker network create -d macvlan --subnet 172.16.86.0/24 --gateway 172.16.86.1 -o parent=eno16777736 mac_net1
開啓一個容器 需要通訊的主機都需要進行配置
docker run -itd --name bbox2 --ip 172.16.86.11 --network mac_net1 busybox
查看模塊信息
modinfo 8021q
安裝模塊
modprobe 8021q
查看安裝與否
modprobe --first-time 8021q
修改網卡配置文件
vim ifcfg-eno16777736
修改BOOTPROTO=manual
複製網卡配置文件
cp -p ifcfg-eno16777736 ifcfg-eno16777736.10
cp -p ifcfg-eno16777736 ifcfg-eno16777736.20
修改配置文件
vim ifcfg-eno16777736.10
修改配置文件
BOOTPROTO=none
NAME=eno16777736.10
DEVICE=eno16777736.10
IPADDR=192.168.10.1
PREFIX=24
NETWORK=192.168.10.0
ONBOOT=yes
VLAN=yes
修改配置文件
vim ifcfg-eno16777736.20
修改配置文件
BOOTPROTO=none
NAME=eno16777736.20
DEVICE=eno16777736.20
IPADDR=192.168.10.1
PREFIX=24
NETWORK=192.168.10.0
ONBOOT=yes
VLAN=yes
開啓子接口網卡
ifup eno16777736.10
ifup eno16777736.20
創建網卡
docker network create -d macvlan --subnet 192.168.10.0/24 --gateway 192.168.10.1 -o parent=eno16777736.10 mac_net10
docker network create -d macvlan --subnet 192.168.20.0/24 --gateway 192.168.20.1 -o parent=eno16777736.20 mac_net20
創建子接口網卡容器
docker run -itd --name box10 --ip 192.168.10.10 --network mac_net10 busybox
docker run -itd --name box20 --ip 192.168.20.10 --network mac_net20 busybox
需要通訊的主機都需要進行配置 記得更換IP
開啓轉發功能
iptables -t nat -A POSTROUTING -o eno16777736.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eno16777736.20 -j MASQUERADE
iptables -A FORWARD -i eno16777736.20 -o eno16777736.10 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eno16777736.10 -o eno16777736.20 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eno16777736.10 -o eno16777736.20 -j ACCEPT
iptables -A FORWARD -i eno16777736.20 -o eno16777736.10 -j ACCEPT