docker|关于docker那点事儿——docker网络模式
docker网络模式
- 前言
- 一、容器网卡、网桥docker0、veth关系
- 二、docker的4种网络模式
-
- bridge模式
- host模式
- container模式
- none模式
前言
可以说每一次技术的革新都离不开最底层、最复杂也是最核心的两个东西,那就是网络和存储。不管是虚拟化还是容器化都与这两点密不可分。本篇文章主要介绍docker网络模式,通信原理及优缺点一、容器网卡、网桥docker0、veth关系 在介绍docker的4种网络模型之前,先介绍下容器内网卡与宿主机docker0关系。
Docker daemon启动时会创建一个虚拟网桥设备 docker0(在主机上看来是一个网卡),默认地址为 172.17.1.1/16,容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址,以此来实现网络通信。当然要确保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 | 无网卡信息,用户可根据自己需求自定义网络环境 |
文章图片
缺点:宿主机意外的其他主机无法与容器进行通信;
???容器的端口均需要在宿主机映射出来,所有的网络规则都通过nat转发来实现,效率相对较低;
host模式 host模式容器可以直接使用宿主机的ip地址与外界通信,就像应用直接跑在主机上一样,弥补了bridge模式的不足。
文章图片
启动一个容器查看容器的网卡信息,结果与主机网卡信息一致
文章图片
缺点:网络环境隔离性差,容器不再拥有独立的网络栈;
???容器与宿主机共享端口范围,可能出现端口被占用情况;
container模式 container模式容器与容器共享网络栈,两个容器可以更高效的通信
文章图片
文章图片
【docker|关于docker那点事儿——docker网络模式】查看两个容器的网卡配置发现一模一样
文章图片
其本质就是将一个容器network namespace加入了一个已存在容器的network namespace
文章图片
缺点:与bridge模式一样,宿主机意外的主机无法访问到容器。
none模式 none模式是我们使用最少的,该模式除了lo网卡,其他网络设备均没有定义。这种模式更倾向于开发者去开发新的网络模式,如host模式与container模式就是在此模式开发而来。
文章图片
文章图片
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 醒不来的梦
- 关于自我为中心的一点感想
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 关于Ruby的杂想
- 关于读书的思考
- 关于this的一些问题(1)
- 2019-08-29|2019-08-29 iOS13适配那点事