终于有人把 Docker 讲清楚了( 五 )


graphdriver的架构如下:

终于有人把 Docker 讲清楚了

文章插图
 
networkdriver的用途是完成Docker容器网络环境的配置 , 其中包括Docker启动时为Docker环境创建网桥;Docker容器创建时为其创建专属虚拟网卡设备;以及为Docker容器分配IP、端口并与宿主机做端口映射 , 设置容器防火墙策略等 。networkdriver的架构如下:
终于有人把 Docker 讲清楚了

文章插图
 
execdriver作为Docker容器的执行驱动 , 负责创建容器运行命名空间 , 负责容器资源使用的统计与限制 , 负责容器内部进程的真正运行等 。在execdriver的实现过程中 , 原先可以使用LXC驱动调用LXC的接口 , 来操纵容器的配置以及生命周期 , 而现在execdriver默认使用native驱动 , 不依赖于LXC 。
具体体现在Daemon启动过程中加载的ExecDriverflag参数 , 该参数在配置文件已经被设为”native” 。这可以认为是Docker在1.2版本上一个很大的改变 , 或者说Docker实现跨平台的一个先兆 。execdriver架构如下:
终于有人把 Docker 讲清楚了

文章插图
 
9、libcontainer
libcontainer是Docker架构中一个使用Go语言设计实现的库 , 设计初衷是希望该库可以不依靠任何依赖 , 直接访问内核中与容器相关的API 。
正是由于libcontainer的存在 , Docker可以直接调用libcontainer , 而最终操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规则等 。这一系列操作的完成都不需要依赖LXC或者其他包 。libcontainer架构如下:
终于有人把 Docker 讲清楚了

文章插图
 
另外 , libcontainer提供了一整套标准的接口来满足上层对容器管理的需求 。或者说 , libcontainer屏蔽了Docker上层对容器的直接管理 。又由于libcontainer使用Go这种跨平台的语言开发实现 , 且本身又可以被上层多种不同的编程语言访问 , 因此很难说 , 未来的Docker就一定会紧紧地和Linux捆绑在一起 。而于此同时 , Microsoft在其著名云计算平台Azure中 , 也添加了对Docker的支持 , 可见Docker的开放程度与业界的火热度 。
暂不谈Docker , 由于libcontainer的功能以及其本身与系统的松耦合特性 , 很有可能会在其他以容器为原型的平台出现 , 同时也很有可能催生出云计算领域全新的项目 。
10、docker container
Docker container(Docker容器)是Docker架构中服务交付的最终体现形式 。
Docker按照用户的需求与指令 , 订制相应的Docker容器:
  • 用户通过指定容器镜像 , 使得Docker容器可以自定义rootfs等文件系统;
  • 用户通过指定计算资源的配额 , 使得Docker容器使用指定的计算资源;
  • 用户通过配置网络及其安全策略 , 使得Docker容器拥有独立且安全的网络环境;
  • 用户通过指定运行的命令 , 使得Docker容器执行指定的工作 。
 
终于有人把 Docker 讲清楚了

文章插图
来源 :http://39sd.cn/732DD




推荐阅读