docker 容器的网络类型

目录

vmware的三种网卡模式(网络模式)

docker里的四种网络类型 

参考资料:Docker四种网络模式 - 简书 (jianshu.com)

1、桥接模式(默认情况)

2、host模式

3、none模式

4、container模式

创建桥接模式网卡

网卡连接

Overlay的使用

参考文档:Docker Overlay 工作原理 - kevin.Xiang - 博客园 (cnblogs.com)

Overlay的底层原理VXLAN 

vxlan网络通信创建步骤:


docker 删除全部nginx容器 命令

[root@mysql ~]# docker rm $(docker ps -a | awk '/nginx/ {print $NF}')
clay-nginx-2
clay-nginx-1
clay-nginx
[root@mysql ~]# 

vmware的三种网卡模式(网络模式)

        1、桥接模式  bridge  --》 vmware 0

        2、hostonly   --》vmware1

        3、nat模式  --》vmnet8

参考资料:(50条消息) 计算机网络 SNAT/DNAT 部署(三种VMware网卡模式)_snat部署_Claylpf的博客-CSDN博客

docker里的四种网络类型 

参考资料:Docker四种网络模式 - 简书 (jianshu.com)

docker 容器的网络类型_第1张图片

1、桥接模式(默认情况)

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

docker 容器的网络类型_第2张图片

2、host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。 

docker 容器的网络类型_第3张图片

3、none模式

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

这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

docker 容器的网络类型_第4张图片

4、container模式

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

docker 容器的网络类型_第5张图片

因此当我们每启用一个docker容器,宿主机就会自动产生一个虚拟网卡veth

而veth开头的网卡是docker容器上对应的网卡,每启动一个容器就会创建一个虚拟网络接口(网卡)

创建桥接模式网卡

当然我们也可以自己创建一个桥接类型的网卡

[root@mysql ~]# docker network create --driver bridge clay  #创建一个桥接类型的网卡
2d136729908f5685307f14f105f4dc17f8d15278427197073d318126ef5cd210
[root@mysql ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
73c5a59652f4   bridge    bridge    local
2d136729908f   clay      bridge    local
f2c76b408dca   host      host      local
27c1d8f3ca8d   none      null      local
[root@mysql ~]# 

我们使用ip add可以查看增加了 br-2d136729908f这块网卡,而这就代表了桥接模式的网卡

30: br-2d136729908f:  mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:55:f9:46:77 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2d136729908f

我们如何创建docker容器连接到这块新的网卡上去呢

网卡连接

#创建一个容器,定义它连接的网卡是clay网卡
[root@mysql ~]# docker run -d -p 8809:80 --name lpf-nginx-1 --network clay nginx
8811b353441172680020bfd8a2100cf2793bbb9f0f86e836fe63253cd8078e9f
[root@mysql ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                                   NAMES
8811b3534411   nginx     "/docker-entrypoint.…"   9 seconds ago    Up 7 seconds    0.0.0.0:8809->80/tcp, :::8809->80/tcp   lpf-nginx-1
3585af7fab56   nginx     "/docker-entrypoint.…"   18 minutes ago   Up 18 minutes   0.0.0.0:8805->80/tcp, :::8805->80/tcp   clay-nginx-3
98f179ae4afa   nginx     "/docker-entrypoint.…"   19 minutes ago   Up 19 minutes   0.0.0.0:8804->80/tcp, :::8804->80/tcp   clay-nginx-2
905d0e207a1f   nginx     "/docker-entrypoint.…"   19 minutes ago   Up 19 minutes   0.0.0.0:8803->80/tcp, :::8803->80/tcp   clay-nginx-1
[root@mysql ~]# ip add   #查看网络接口
30: br-2d136729908f:  mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:55:f9:46:77 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2d136729908f
       valid_lft forever preferred_lft forever
    inet6 fe80::42:55ff:fef9:4677/64 scope link 
       valid_lft forever preferred_lft forever
32: veth591b578@if31:  mtu 1500 qdisc noqueue master br-2d136729908f state UP group default 
    link/ether 86:a9:4a:28:9b:8d brd ff:ff:ff:ff:ff:ff link-netnsid 3
    inet6 fe80::84a9:4aff:fe28:9b8d/64 scope link 
       valid_lft forever preferred_lft forever

docker 容器的网络类型_第6张图片

Overlay的使用

overlay是来实现跨主机docker容器之间的通信

docker 容器的网络类型_第7张图片需要使用swarm来进行,它是docker的一个集群化管理软件

Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案

参考文档:Docker Overlay 工作原理 - kevin.Xiang - 博客园 (cnblogs.com)

Overlay的底层原理VXLAN 

vlan: 虚拟局域网  :可以隔离广播,对网络进行隔离

        一个vlan一个网段(不到5000个可以使用的vlan)

而vxlan: 其实就是对传统vlan的扩展

VXLAN是一种虚拟化网络技术,全称为Virtual eXtensible LAN,可以实现虚拟网络之间的互连,将底层物理网络和上层虚拟化网络进行隔离。VXLAN可以扩展现有的局域网(LAN)范围,在数据中心内构建规模更大、可扩展性更好的虚拟网络。

VXLAN使用了24位的VNI(VXLAN Network Identifier)标识符,可以支持1600万个唯一的网络标识。这样可以在大规模虚拟化环境中提供足够的标识符,使得不同的虚拟网络之间相互独立,且可以跨越多个物理网络互联。

VXLAN可以通过隧道技术将虚拟网络封装在物理网络之中,使得虚拟机可以像在同一个物理网络内一样直接通信。同时,它还支持多路径ECMP等负载均衡技术,提高了网络的带宽利用率和容错能力。

通过VXLAN技术,用户可以更加灵活地配置和管理虚拟网络。它允许用户在同一物理网络基础上创建多个虚拟网络,并按照需要动态调整虚拟网络的大小和位置。此外,它还支持网络功能虚拟化 (NFV),可以快速实现网络功能的部署和调整。

总之,VXLAN是一种基于隧道技术的虚拟化网络技术,可以扩展现有的局域网范围,提高数据中心内虚拟网络的可扩展性和灵活性。

vxlan网络通信创建步骤:

docker 容器的网络类型_第8张图片 

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