关于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是启动状态。

docker0网桥

关于docker那点事儿——docker网络模式_第1张图片

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

关于docker那点事儿——docker网络模式_第2张图片

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

关于docker那点事儿——docker网络模式_第3张图片
关于docker那点事儿——docker网络模式_第4张图片
关于docker那点事儿——docker网络模式_第5张图片

二、docker的4种网络模式

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

bridge模式

桥接模式也是docker的默认网络模式,就像上述我们讲到的容器网卡以及网桥的关系,就是讲述的桥接模式的工作方式,这里不再赘述。
关于docker那点事儿——docker网络模式_第6张图片

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

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

host模式

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

关于docker那点事儿——docker网络模式_第7张图片

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

关于docker那点事儿——docker网络模式_第8张图片

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

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

container模式

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

关于docker那点事儿——docker网络模式_第9张图片在这里插入图片描述

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

关于docker那点事儿——docker网络模式_第10张图片

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

关于docker那点事儿——docker网络模式_第11张图片

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

none模式

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

关于docker那点事儿——docker网络模式_第12张图片关于docker那点事儿——docker网络模式_第13张图片

你可能感兴趣的:(docker,docker,容器)