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