小白到运维工程师自学之路 第六十六集 (docker 网络模型)

一、概述

Docker网络模型是指Docker容器在网络中的通信方式和组织结构。Docker容器通过网络连接,使得容器之间可以相互通信,并与主机和外部网络进行交互。

在Docker中,有几种不同的网络模型可供选择:

1、主机模式(Host mode):容器与主机共享网络命名空间,容器中的网络直接映射到主机网络上。这意味着容器可以使用主机上的网络配置,并且容器中的服务可以通过主机的IP地址和端口进行访问。

2、桥接模式(Bridge mode):Docker会创建一个虚拟的网络桥接接口,称为docker0,容器加入这个桥接接口后,可以通过桥接接口与其他容器和宿主机进行通信。每个容器都分配一个唯一的IP地址,并且可以使用Docker提供的DNS服务进行容器之间的域名解析。

3、Overlay模式(Overlay mode):用于在多个主机上创建一个覆盖网络,允许分布式容器在不同的主机上进行通信。此模式使用虚拟的网络隧道和路由来连接不同的主机上的容器,并提供透明的跨主机通信。

4、MacVLAN模式(MacVLAN mode):此模式允许将容器直接连接到物理网络上,每个容器会分配一个唯一的MAC地址,并与主机网络共享IP地址。这样容器就可以像主机上的其他设备一样与网络进行交互。

5、None模式(None mode):在此模式下,容器不会与任何网络进行连接,完全与外部网络隔离。

这些网络模型可以根据应用场景和要求选择合适的模式来配置Docker容器的网络连接。

二、网络模型

1、主机模式(Host mode)

Docker底层使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptables规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Root Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。出于安全考虑不推荐使用这种网络模式。

我们在192.168.77.123/24的机器上用Host模式启动一个含有WEB应用的Docker容器,监听TCP 80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用192.168.200.111:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

docker run -itd --net=host --name=host busybox  
docker exec -it host ifconfig

小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第1张图片

小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第2张图片 

 可以看到容器和宿主机的IP是一样的

2、container模式

这个模式可以指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

使用--net=container:container_id/container_name,多个容器使用共同的网络看到的ip是一样的。

docker run -itd --name=con1 busybox
docker exec -it con1 ifconfig
docker run -itd --net=container:con1 --name=con2 busybox
docker exec -it con2 ifconfig

小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第3张图片

可以看到两个容器的IP是一样的

3none模式

在这种模式下,Docker容器拥有自己的Network Namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

使用--net=none指定,这种模式下不会配置任何网络。

docker run -itd --name=none --net=none busybox
docker exec -it none ifconfig

小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第4张图片

 4bridge模式

bridge模式是Docker默认的网络设置,属于一种NAT网络模型,Docker daemon在启动的时候就会建立一个docker0网桥(通过-b参数可以指定),每个容器使用bridge模式启动时,Docker都会为容器创建一对虚拟网络接口(veth pair)设备,这对接口一端在容器的Network Namespace,另一端在docker0,这样就实现了容器与宿主机之间的通信。

                                         小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第5张图片

在bridge模式下,Docker容器与外部网络通信都是通过iptables规则控制的,这也是Docker网络性能低下的一个重要原因。使用iptables -vnL -t nat可以查看NAT表,在Chain Docker中可以看到容器桥接的规则。

小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第6张图片

 5、Overlay模式

这是Docker原生的跨主机多子网的网络模型,当创建一个新的网络时,Docker会在主机上创建一个Network Namespace,Network Namespace内有一个网桥,网桥上有一个vxlan接口,每个网络占用一个vxlan ID,当容器被添加到网络中时,Docker会分配一对veth网卡设备,与bridge模式类似,一端在容器里面,另一端在本地的Network Namespace中。

容器A、B、C都在主机A上面,而容器D、E则在主机B上面,现在通过Overlay网络模型可以实现容器A、B、D处于同一个子网,而容器C、E则处于另一个子网中。

小白到运维工程师自学之路 第六十六集 (docker 网络模型)_第7张图片

以上就是docker网络模型

如有错误欢迎各位大佬批评指正,我们共同进步

你可能感兴趣的:(运维,docker,网络)