libnetwork

本文详细介绍了Docker的libnetwork库,包括sandbox、endpoint、network和CNM对象的概念。讨论了如何通过NetworkController创建和管理网络,以及Driver如何实现不同网络模式,如bridge、overlay和host等。还涵盖了endpoint的加入、离开和删除过程,以及Docker的网络命令,如docker network create、connect、disconnect和rm。最后提到了CNI和CNM的区别,CNI专注于将容器添加到网络和从网络中删除容器的接口。
摘要由CSDN通过智能技术生成
CNM模型定义了libnetwork的工作原理
原来docker的网络相关的代码是直接在docker中的,网络功能也比较简单,对网络的诟病也是比较多,随着docker越来越向平台化发展,将功能组件逐渐从docker中解耦, docker从1.7把网络相关的代码从docker的代码中剥离出来新建了一个libnetwork项目,引入了CNM的网络模型。
CNM网络模型主要引入三个概念: sandbox, endpoint和network。 Sandbox代表的是一个独立的网络栈,有自己的网络接口,路由表等,每个容器有一个sandbox,也就是有个独立的网络栈。在不同的系统下,sandbox的实现不一样,在linux系统下是通过network namespace来实现的,在FreeBSD下是Jail。 Endpoint是sandbox连接到network的端点,也就是一个网络接口,我们容器里面看到的eth0 eth1这样的网口,一个sandbox可以加入到多个网络中,也就有多个endpoint,也就是有多个网口,endpoint的实现也有很多,用得最多的就是veth设备对。 Network用来连接不同的sandbox,实现容器间的通信,是一系列endpoint的集合。Network的实现有很多种,如linux bridge, ovs, vxlan等

sandbox:独立的网络栈

endpoint:连接网络的网口

network:容器互联通信

CNM对象
NetworkController: libnetwork网络管理器,提供API
Driver:  network的具体底层实现,提供api给network
Network:  cnm中network的具体实现,networkcontroller提供了api来创建/删除network
Endpoint:cnm中endpoint的具体实现,是容器内网口的抽象描述
Sandbox: cnm中sandbox的具体实现,代表了容器网络的配置如路由表,网络接口等。每个Sandbox有一个olssandbox。

networkController  比如docker启动的时候就会新建一个network controller, docker通过调用network controller的api来完成网络的管理。
Driver   不同的网络模式对应不同的driver, 我们常见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值