容器网络-多种网络模式

 最近公司使平台网络更加灵活,满足更多网络需求,所以研究docker的几种网络模式,在此记录一下,便于后期查看。
 
 
一、docker安装完成后默认的创建了host 、bridge、none三种网络模式:其中none这次不是研究的重点
 
uploading.4e448015.gif正在上传… 重新上传 取消
 
1、none 网络使用场景一般比较少见,主要应用于安全性比较高的场景,且不需要与外部进行通信的任务。
 
示例:使用--network 指定网络模式简写 --net
docker run -dit --net=none --name= bbox3 busybox 运行一个docker容器 指定none模式
 
docker exec -it f6e86cecb64c /bin/sh   进入容器查看 只有lo回环地址
 
uploading.4e448015.gif转存失败重新上传取消
 
验证  ping www.baidu.com:
 
uploading.4e448015.gif转存失败重新上传取消
 
验证  ping 127.0.0.1:
 
uploading.4e448015.gif转存失败重新上传取消
 
uploading.4e448015.gif转存失败重新上传取消
 
无需和外部网络进行通信的场景
 
 
2、 使用host网络的容器,和宿主机共享网络栈 ,容器的端口和IP,容易发生冲突,多个容器无法对外暴露相同的端口。有点效率高
 
      指定host模式的容器,可以通过宿主机的ip和端口访问容
 
示例:使用--network 指定网络模式简写 --net
 
docker run -dit --net=host --name= nginx1 nginx 运行一个docker容器 指定host模式(通常请求下,宿主机访问访问容器内部得做端口的映射才可以)
 
docker run -dit --net=host --name=bbox4 busybox
 
uploading.4e448015.gif转存失败 重新上传 取消
 
docker exec -it 292abce5491b /bin/sh   进入容器查看 然后在宿主机执行ifconfig 对比下面内容
 
docker exec -it 5d8581b971f4 /bin/sh 
uploading.4e448015.gif转存失败 重新上传 取消
 
宿主机ifconfig
 
uploading.4e448015.gif转存失败重新上传取消
 
     host主机模式能够支撑容器的跨主机通信(因为容器和宿主机使用的是同一network namespace,引申为不同的容器之间的通信实际上是宿
 
主机之间的通信)【但是存在弊端,同一宿主机上的多个容器不能使用同一端口,这种模式并没有充分发挥到容器的隔离特性,容器和容器之间共
 
享宿主机共享栈】
 
主要用于跨主机的容器之间的通信(一般大规模部署的情况下,这种模式不常用)
 
3、 bridge模式(容器的默认网络模式,这里不做过多的解释,直接上图,自己画了一个图)
    
    总的概括就是docker0网桥+两个虚拟网卡的实现方式.容器间通过网桥的方式传递数据包。
 
uploading.4e448015.gif转存失败重新上传取消
 
 
4、 macvlan模式:一些传统的应用或者监控应用需要直接使用主机的物理网络、可以采取macvlan模式,macvlan是直接在HOST网卡上创建多个子网卡,并分配独立的IP和mac地址,把子网卡分配给容器实
 
例、从而实现容器实例和物理网络的直通,并同时保持了容器实例的隔离性。    host主机收到数据包后,根据不同的mac地址将数据包转发到不同的子网
 
1、拉取镜像

docker pull busybox

docker images
 
如果之前创建过network,可以通过下面的命令进行删除
 
删除掉之前创建的network,重新执行下面的命令,发现可以了

删除network:docker network rm networkid(docker network ls 查询得出)
 
 
---------------------------------------------------------------------------------------------------

master和node节点执行:(创建相同的macvlan网络)

docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=ens160 macvlan_1
 
--------------------------------------------------------------------------------------------------

master执行:后台创建容器

docker run -it -d --network macvlan_1 --ip=10.0.0.155  busybox /bin/sh

node执行:    后台创建容器

docker run -it -d --network macvlan_1 --ip=10.0.0.156 busybox  /bin/sh
 
进入node节点 容器内部
 
docker exec -it 容器id /bin/sh
 
ping 10.0.0.155
 
相反:在master可以ping node节点的容器
 
结论:同一macvlan之间,跨主机的容器能够相互通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值