Docker网络管理的示例分析
这篇文章主要为大家展示了“Docker网络管理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Docker网络管理的示例分析”这篇文章吧。
创新互联是一家专业提供霍州企业网站建设,专注与成都做网站、成都网站制作、H5场景定制、小程序制作等业务。10年已为霍州众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
一:简介
1. CNM(Container Network Model):定义了构建容器虚拟化网络的模型,同时还提供了可以用于开发多种网络驱动的标准化接口和组件。CNM中主要有沙盒(sandbox),端点(endpoint)和网络(network)三种组件。
2. Docker daemon通过调用libnetwork对外提供的API完成网络的创建和管理等功能。Libnetwork中则使用了CNM来完成网络功能的提供。
二:CNM核心组件
1.沙盒:一个沙盒包含了一个容器网络栈的信息。沙盒可以对容器的接口,路由和DNS设置等进行管理。一个沙盒可以有多个端点和多个网络。
2.端点:一个端点可以加入一个沙盒和一个网络;一个端点只可以属于一个网络并且只属于一个沙盒。
3.网络:一个网络是一组可以直接互相联通的端点。
三:libnetwork内置驱动
1. bridge驱动:此驱动为Docker的默认设置,使用这个驱动的时候,libnetwork将创建出来的Docker容器连接到Docker网桥上。作为最常规的模式,bridge模式已经可以满足Docker容器最基本的使用。然而其与外界的通信使用NAT(Network Address Translation,网络地址转换),增加了通信的复杂性,在复杂场景下使用会有诸多限制。
2. host驱动:使用这种驱动的时候,libnetwork将不为Docker创建网络协议栈(指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议)即不会创建独立的network namespace. Docker容器中的进程处于宿主机的网络环境中,相当于Docker容器和宿主机公用同一个network namespace,使用宿主机的网卡,IP和端口等信息。但是,容器其他方面,如文件系统,进程列表等还是和宿主机隔离的。Host模式很好地解决了容器与外界通信的地址转换问题,可以直接使用宿主机的IP进行通信,不存在虚拟化网络带来的额外性能负担。但是host驱动也降低了容器与容器之间,容器与宿主机之间网络层面的隔离性,引起网络资源的竞争与冲突。因此可以认为host驱动适用于对于容器集群规模不大的场景。
3. overlay驱动:
此驱动采用IETF标准的VXLAN方式,并且是VXLAN中被普遍认为最合适大规模的云计算虚拟化环境的SDN controller模式。在使用的过程中,需要一个额外的配置存储服务,例如Consul,etcd或ZooKeeper.还需要在启动Docker daemon的时候额外添加参数来指定所使用的配置存储服务地址。
4. remote驱动:
这个驱动实际上并未做真正的网络服务实现,而是调用了用户自行实现的网络驱动插件,使libnetwork实现了驱动的可插件化,更好地满足了用户的多种需求。用户只要根据libnetwork提供的协议标准,实现其所要求的各个接口并向Docker daemon进行注册。
5. null驱动:使用这种驱动的时候,Docker容器拥有自己的network namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器除了network namespace自带的loopback网卡外,没有其他任何网卡,IP,路由等信息。需要用户为Docker容器添加网卡,配置IP等。这种模式如果不进行特定的配置是无法正常使用的,但是优点也非常明显,它给了用户最大的自由度来自定义容器的网络环境。
四:举例
示例中,使用Docker默认的bridge驱动进行演示,组成一个网络拓扑的应用。
1. 它有两个网络,backend network为后端网络,frontend network为前端网络,两个网络互不联通
2.Container1和container3各拥有一个端点,并且分别加入到后端网络和前端网络中。而container2则有两个端点。
除了backend和frontend之外,还有3个Docker daemon默认创建的网络,默认网络无法使用docker network rm 进行删除。
docker run -it --name container1 --net backend centos
docker run -it --name container2 --net backend centos
docker run -it --name container3 --net frontend centos
docker
network connect frontend container2
Docker network connect命令会在所连接的容器中创建新的网卡,以完成其与所指定网络的连接。
五:bridge驱动实现机制分析
1. docker0网桥: linux安装完Docker之后,宿主机上多了一块名为docker0的网卡。每个容器中都会有两块网卡l0和eth0. L0是容器的回环网卡;eth0即为容器与外界通信的网卡,它和宿主机上的网桥docker0在同一个网段。
1. iptables规则:Docker安装完成后,将默认在宿主机系统上增加一些iptables规则,以用于Docker容器和容器之间及和外界的通信。
2. Docker容器的DNS和主机名:同一个Docker镜像可以启动多个Docker容器,它们的主机名并不一样,实际上容器中的/etc/hostname,/etc/hosts,/etc/resolv.conf 会被虚拟文件覆盖掉。
以上是“Docker网络管理的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
分享标题:Docker网络管理的示例分析
文章分享:http://scyanting.com/article/pohpgc.html