走进docker-聊聊docker网络
容器网络概念
- 首先了解下linux的网络构成概念
-
命名空间
: Linux在网络栈中引入网络命名空间,将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信;Docker利用这一特性,实现不容器间的网络隔离。 -
Veth设备对
:实现不同命名空间通信 -
Iptables/Netfilter
: Iptables/Netfilter:Netfilter负责在内核中执行各种挂接的规则(过滤、修改、丢弃等),运行在内核模式中;Iptables模式是在用户模式下运行的进程,负责协助维护内核中Netfilter的各种规则表;通过二者的配合来实现整个Linux网络协议栈中灵活的数据包处理机制。 -
网桥
:网桥是一个二层网络设备,通过网桥可以将linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信 -
路由
:Linux系统包含一个完整的路由功能,当IP层在处理数据发送或转发的时候,会使用路由表来决定发往哪里。
- 运行Docker容器默认使用的是bridge网络,Docker还包含其他网络模型,容器网络模型主要包含了3个概念
- network: 网络模型
- 单主机网络模式(none、host、bridge,joined container)
- 多主机网络模式(overlay、macvlan、flannel)
- sandbox:沙盒,它定义了容器内的虚拟网卡、DNS和路由表,是network namespace的一种实现,是容器的内部网络栈
- endpoint:端点,用于连接sandbox和network
- 这里我们先介绍下Docker常用的网络模式:
网络模式 | 简介 |
---|---|
Host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 |
Bridge | 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。 |
none | 该模式关闭了容器的网络功能,不分配子网跟ip |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。 |
overlay | 容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信 |
luxurong@hb13520 ~ % docker network ls
NETWORK ID NAME DRIVER SCOPE
5a9f0bc5a93a bridge bridge local
5239b7670d4f composetest_default bridge local
0487feea0278 host host local
ddfec4c499d9 none null local
62e4405853d2 testcompose_default bridge local
- 如何创建并且使用自定义网络驱动?
#创建网络
ocker network create --driver bridge my-net
#my-net网络
docker run --network=my-net ......
网络的创建是非常的简单,至此大家了解了几种常见的网络模型。
详解Docker驱动原理差异性
主机ip:
- Host网络
该模式与宿主机在同一个网络中,但没有独立IP地址。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
- Container网络
在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。kubernetes的pod就是使用的这一模式。
-
None网络 不指定网络,需要手动去配置网卡信息。
-
Bridge网络
Bridge网络使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)。通过docker0网桥以及Iptables nat表配置与宿主机通信;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
5.overlay 网络
使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.9.3这个ip地址,在这个overlay网络模式里面,有一个类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。 Docker里实现采用会有一个服务发现consul,,会定义一个ip地址池,比如10.0.9.0/24之类的,上面会有容器,容器的ip地址会从上面去获取,获取完了后,会通过eth1进行通信,贼这实现跨主机的东西。
结束
下篇讲解Docker-Swarm如何在微服务项目中使用!
欢迎关注公众号! 公众号回复:
入群
,扫码加入我们交流群!