关于docker那点事儿——docker网络模式

前言

可以说每一次技术的革新都离不开最底层、最复杂也是最核心的两个东西,那就是网络和存储。不管是虚拟化还是容器化都与这两点密不可分。本篇文章主要介绍docker网络模式,通信原理及优缺点

一、容器网卡、网桥docker0、veth关系

在介绍docker的4种网络模型之前,先介绍下容器内网卡与宿主机docker0关系。

Docker daemon启动时会创建一个虚拟网桥设备 docker0(在主机上看来是一个网卡),默认地址为 172.17.1.1/16,容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址,以此来实现网络通信。当然要确保docker0是启动状态。

docker0网桥

在这里插入图片描述

当我们启动容器时,ip地址会在docker0地址的基础上递增,第一个启动的容器ip地址为172.100.100.2,第二个启动的容器ip地址为172.100.100.3,以此类推

在这里插入图片描述

当我们启动一个容器时,容器会创建一对虚拟网卡,也就是veth pair。一边在主机上会出现一个veth开头的虚拟网卡,另一边在docker中生成eth0虚拟网卡,网卡只在该容器network namespace中可见。每一个宿主机的veth网卡都对应容器中的eth0网卡,veth网卡都桥接到docker0以此来实现网络通信。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、docker的4种网络模式

模式命令(docker run)简述
bridge模式–net=bridge容器默认模式,容器默认连接到docker0网桥上,通过iptables规则来实现通信
host模式–net=host容器与主机共享网络,使用主机网卡端口等信息
container模式–net=container:NAME_or_ID容器与其他容器共享网络,使用已存在容器的网卡信息,两个容器通过lo回环网卡进行通信
none模式–net=none无网卡信息,用户可根据自己需求自定义网络环境

bridge模式

桥接模式也是docker的默认网络模式,就像上述我们讲到的容器网卡以及网桥的关系,就是讲述的桥接模式的工作方式,这里不再赘述。
在这里插入图片描述

缺点:宿主机意外的其他主机无法与容器进行通信;

   容器的端口均需要在宿主机映射出来,所有的网络规则都通过nat转发来实现,效率相对较低;

host模式

host模式容器可以直接使用宿主机的ip地址与外界通信,就像应用直接跑在主机上一样,弥补了bridge模式的不足。

在这里插入图片描述

启动一个容器查看容器的网卡信息,结果与主机网卡信息一致

在这里插入图片描述

缺点:网络环境隔离性差,容器不再拥有独立的网络栈;

   容器与宿主机共享端口范围,可能出现端口被占用情况;

container模式

container模式容器与容器共享网络栈,两个容器可以更高效的通信

在这里插入图片描述在这里插入图片描述

查看两个容器的网卡配置发现一模一样

在这里插入图片描述

其本质就是将一个容器network namespace加入了一个已存在容器的network namespace

在这里插入图片描述

缺点:与bridge模式一样,宿主机意外的主机无法访问到容器。

none模式

none模式是我们使用最少的,该模式除了lo网卡,其他网络设备均没有定义。这种模式更倾向于开发者去开发新的网络模式,如host模式与container模式就是在此模式开发而来。

在这里插入图片描述在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值