DOCKER中的通讯

DOCKER中的通讯

Scroll Down

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

查看几台主机是否互通。