。
在创建docker时,docker会默认创建三种网络模式:bridge host none。
使用docker info查看

Docker网络 模式 | 配置 | 说明 |
| host模式 | –net=host | 容器和宿主机共享宿主机的ip和端口。容器不会虚拟出自己的网卡 |
| container模 式 | -net=container:NAME_or_ID | 容器和另外一个容器共享一个ip端口 |
| none模式 | –net=none | 容器有独立的Network namespace,并没有对 其进行任何网络设置, 如分配veth pair 和网桥连接,配置IP等。该模式关闭了容器的网络功能 |
| bridge模式 | –net=bridge | 默认为该模式)。此模式会为每一个容器分 配、设置IP等, 并将容器连接到一个docker0虚拟网桥,通过 docker0网桥 以及Iptables nat表配置与宿主机通信。 |
| Macvlan network | 无 | 容器具备Mac地址,使其显示为网络上的物理 设备 |
| Overlay | 无 | (覆盖网络):利用VXLAN实现的bridge模式 |
bridge模式
默认的网络模式。bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容 器通过宿主机的NAT规则后可以访问外网。
在该模式下,docker使用veth pair,会在自己的宿主机上创建一个虚拟网卡veth0,在另一个容器里创建一个网卡veth0,并把veth0改为eth0。这样实现docker和容器的沟通。
Bridge桥接模式的缺陷:
1.最明显的是,该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网 段。导致的结果是宿主机以外的世界不能直接和容器进行通信。2.虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在 宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。3.另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
注意:veth设备是成双成对出现的,一端是容器内部命名为eth0,一端是加入到网桥并命名的veth(通常命名 为veth),它们组成了一个数据传输通道,一端进一端出,veth设备连接了两个网络设备并实现了数据 通信。
host模式相当于Vmware中的NAT模式,与宿主机在同一个网络中,但没有独立IP地址。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿 主机的IP和端口。host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就 不能再用了,网络的隔离性不好。
Container网络模式一种特殊host 网络模式
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共 享。两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
none模式使用none模式。这种类型的网络没有办法联网,自己跟自己玩。封闭的网络能很好的保证容器的安全性。
overlay 网络模式主要用于docker集群部署。 应用场景:需要管理成百上千个跨主机的容器集群的网络时。
macvlan 网络模式macvlan网络模式,最主要的特征就是他们的通信会直接基于mac地址进行转发。这时宿主机其实充当一个二层交换机。容器之间可以直接通过IP互通,通过宿主机上内建的虚拟网络设备(创建macvlan网络时自动创建), 但与主机无法直接利用IP互通。




