分享好友 最新动态首页 最新动态分类 切换频道
Docker 的插件式设计
2024-12-27 05:18

Docker 的插件式设计

 

在之前的『闲话云计算』一文中曾提到过:构成云计算的『干细胞』是 计算、存储和网络 。Docker 作为云计算领域的新生力量,自然少不了对这三要素的关注,我们来具体看看他是怎么设计的。

众所周知,Docker 提供了容器的运行环境,通过LXC对CPU计算资源进行隔离,运行在每一台OS之上, 计算资源 是他最容易控制和管理的,但对 网络存储 的支持在之前一直不是特别理想,直到1.7之后的版本推出了 插件(Plugin) 的概念才有所改善。有了插件系统提供的能力,开发者可以根据Docker的运行周边环境,定制属于自己的网络和存储方案,对Engine进行扩展,满足自己容器化的需求。比如,阿里云上的 Docker 容器就可以使用 VPC网络插件 ,给容器分配虚拟IP,实现容器在VPC内的网络互联;还可以使用 OSS 存储插件 ,实现容器对 OSS Bucket 的访问,扩展容器的存储能力。

这就是Docker,对『计算』的完全掌控,对『存储』和『网络』的基本支持,同时通过插件扩展存储和网络的边界,与现有云计算的成果无缝融合。 除了有存储Volume、网络Network,Docker还提供了认证Authorization、IP地址管理IPAM等插件类型。

下面主要介绍下 Docker存储插件 的设计和实现。

图片来源: slideshare

Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。

Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。

当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

VolumePlugin所定义的 API接口 有8个:

  • /VolumeDriver.Create
  • /VolumeDriver.Remove
  • /VolumeDriver.Mount
  • /VolumeDriver.Path
  • /VolumeDriver.Unmount
  • /VolumeDriver.Get
  • /VolumeDriver.List
  • /VolumeDriver.Capabilities

在Docker官方文档中列出的Volume Plugins有近 20个 。

OSS 是阿里云的对象存储服务,解决文件类存储的需求。有一个基于 OSS 的文件系统的实现,叫 ossfs 。可以把某个 OSS Bucket 挂载到OS中的一个分区上,这样就好像访问本地文件一样,访问 OSS 文件。

在这个基础上,编写了一个Docker数据卷的插件,使用该插件,可以创建 ossfs 数据卷,并Bind到容器中使用。

为了对插件有一个直观的认识,我们从实践出发,拿OSSFS插件举例,追踪接口调用,来帮助我们理解整个过程,加深理解。

OSSFS插件并不是这次的重点,因此它的启动过程以及内部实现细节并不在这次讨论范围,会逐一略过。我用的是阿里云容器服务自带的OSSFS插件,插件启动后会生成一个unix socket文件 。

为了便于监控插件API的日志,我们通过socat搭建一个代理,伪造一个新的socket文件 ,对这个代理的请求会被输出到终端上。

这时,在Docker Daemon看来我们就拥有了两个插件,ossfs和ossfs2,不过二者本质上是同一个web service。

创建Volume

下面,使用插件ossfs2创建数据卷 ,目的是为了获取请求日志。

在刚才的socat命令下,可以看到打印日志,摘取如下:

2016/08/02 17:04:49.780139 length=143 from=0 to=142 POST /Plugin.Activate HTTP/1.1 Host:

User-Agent: Go-http-client/1.1

Content-Length: 1

Accept: application/vnd.docker.plugins.v1.2+json

< 2016/08/02 17:04:49.780763 length=165 from=0 to=164

HTTP/1.1 200 OK

{"Implements": ["VolumeDriver"]}

2016/08/02 17:04:49.781068 length=162 from=143 to=304 POST /VolumeDriver.Get HTTP/1.1 {"Name":"ff001"} < 2016/08/02 17:04:49.781364 length=229 from=165 to=393

HTTP/1.1 500 Internal Server Error

{"Mountpoint":"","Err":"Invalid ossfs options.","Volumes":null,"Volume":null}

2016/08/02 17:04:49.781708 length=316 from=305 to=620 POST /VolumeDriver.Create HTTP/1.1 {"Name":"ff001","Opts":{"ak id":"xxxx","ak secret":"xxxxxx","bucket":"mytestbucket","url":"vpc100-oss-cn-hangzhou.aliyuncs.com"}} < 2016/08/02 17:04:49.849440 length=188 from=394 to=581

HTTP/1.1 200 OK

{"Mountpoint":"","Err":"","Volumes":null,"Volume":null}

2016/08/02 17:04:49.867860 length=163 from=621 to=783 POST /VolumeDriver.Path HTTP/1.1 {"Name":"ff001"} < 2016/08/02 17:04:49.872552 length=220 from=582 to=801

HTTP/1.1 200 OK

{"Mountpoint":"/mnt/i/ossfs/mytestbucket","Err":"","Volumes":null,"Volume":null}

2016/08/02 17:04:51.984118 length=148 from=784 to=931 POST /VolumeDriver.List HTTP/1.1 {} < 2016/08/02 17:04:51.985414 length=316 from=802 to=1117

{"Mountpoint":"","Err":"","Volumes":[{"Name":"ff001","Mountpoint":"/mnt/i/ossfs/mytestbucket"}],"Volume":null}

所有的请求都是POST方法,URI、request body和response body我都已经加粗。简单解释下, 接口是Plugin的公共接口,是做第一次Handshake,Plugin会返回类型是Volume还是Network等。一个Volume的创建过程,会先通过 判断名称是否存在,然后执行 做数据卷的初始化,接着通过 接口获取Volume的本地路径。最后的 是用来查询这个插件下有哪些Volume的,是被其他客户端发起的,跟这次的创建过程并无关系。

至此,一个Volume就创建完成了,但还没有被容器使用。

使用Volume

下面我们看看,在容器使用Volume时,Plugin提供了哪些接口。执行下面命令:

创建并启动一个容器,挂载数据卷 到容器内的 目录,然后执行命令 查看目录下文件,命令退出后容器停止。

在ossfs2.sock处抓取到请求日志如下:

2016/08/02 17:35:18.680407 length=164 from=13610 to=13773 POST /VolumeDriver.Mount HTTP/1.1 {"Name":"ff001"} < 2016/08/02 17:35:18.680923 length=220 from=24348 to=24567

HTTP/1.1 200 OK

{"Mountpoint":"/mnt/i/ossfs/mytestbucket","Err":"","Volumes":null,"Volume":null}

2016/08/02 17:35:19.143549 length=166 from=13774 to=13939 POST /VolumeDriver.Unmount HTTP/1.1 {"Name":"ff001"} < 2016/08/02 17:35:19.144880 length=188 from=24568 to=24755

HTTP/1.1 200 OK

{"Mountpoint":"","Err":"","Volumes":null,"Volume":null}

启动容器时,Daemon会请求Plugin的 接口,然后与容器内的目录绑定,容器停止时会请求 接口。

删除Volume

我们使用以下命令删除Volume

当有容器在使用Volume时,删除会失败(Daemon中有记录)。成功删除时,会打印以下日志:

2016/08/02 18:29:23.833416 length=162 from=34688 to=34849 POST /VolumeDriver.Get HTTP/1.1 {"Name":"ff001"} < 2016/08/02 18:29:23.833928 length=249 from=59892 to=60140

HTTP/1.1 200 OK

{"Mountpoint":"","Err":"","Volumes":null,"Volume":{"Name":"ff001","Mountpoint":"/mnt/i/ossfs/mytestbucket"}}

2016/08/02 18:29:23.834274 length=165 from=34850 to=35014 POST /VolumeDriver.Remove HTTP/1.1 {"Name":"ff001"} < 2016/08/02 18:29:24.027498 length=188 from=60141 to=60328

HTTP/1.1 200 OK

{"Mountpoint":"","Err":"","Volumes":null,"Volume":null}

一个 ,一个 就完成了删除时的接口调用。

最新文章
引流推广简历模板范文怎么写
姓名:许芊羽自我介绍:我是一名来自湖北省的应届毕业生,毕业于湖北文理学院,主修市场营销专业。在校期间,我积极参加校园活动,曾担任紫荆志愿者协会会长一职,组织和参与了多项公益活动。通过这些经历,我发现自己热爱团队协作和社交沟
青岛关键词推广优化攻略,全方位策略揭秘
青岛关键词推广优化策略全解析,涵盖精准定位、内容优化、数据分析等关键步骤。通过合理布局关键词,提高搜索引擎排名,实现精准营销。注重内容质量,优化用户体验,助力企业提升品牌影响力。随着互联网的快速发展,网络营销已成为企业推广
豆包Ai登顶国内第一,概念股梳理(名单建议收藏)
在A股市场,人工智能(AI)题材的热度持续升温,尤其是豆包概念股,在Kimi概念股、智谱概念股之后,成为了市场上的新宠。近日,抖音豆包AI概念全面发酵,中科蓝讯、乐鑫科技、省广集团、天龙集团、掌阅科技等一批字节跳动概念股大幅上涨。多
香港雷锋老牌论坛,重要性解释落实方法_WearOS10.466
h2引言/h2p随着数字技术的飞速发展,智能手机及可穿戴设备在全球范围内普及率逐年攀升,WearOS系统作为智能手表领域的重要组成部分,其发展趋势及影响力不容忽视,香港雷锋老牌论坛一直关注WearOS的最新动态,本文旨在深入探讨其在WearOS10
掌握SEO核心策略,高效提升网站搜索引擎排名指南
掌握SEO规则,掌握搜索引擎优化核心策略,助力网站排名提升。通过优化关键词、提高内容质量、改善网站结构等手段,有效提升网站在搜索引擎中的排名,吸引更多户。随着互联网的不断发展,搜索引擎优化(SEO)已经成为网站推广的重要手段,SE
源码html网站模板_源码html网页模板
源码HTML网站模板构建专业网页的基石,在当今数字化时代,拥有一个专业的网站是企业或个人品牌成功的关键。源码HTML网站模板作为构建网站的基础工具,提供了一个快速、高效的方式来创建具有吸引力的网页。本文将探讨源码HTML网站模板的重要
硅基周报 | OpenAI连开12天发布会;谷歌向平行宇宙借算力;字节想要打造“AI时代的抖音”
· 英伟达涉嫌反垄断,疑似下架天猫所有商品国家市场监督管理总局12月9日消息,因英伟达公司涉嫌违反《中华人民共和国反垄断法》及相关审查决定公告,市场监管总局依法对其开展立案调查。此次涉及的是英伟达2020年收购迈络思的交易。2 019
高德地图搜不到地址怎么办-商家新开门店地图定位
高德地图搜不到地址,可能有以下几种原因,解决办法如下:1. 地址输入有误:确认输入的地址是否正确,可以对照地图软件的其他信息,或者询问当地居民获得更准确的信息。2. 地址数据不全:某些偏僻或者新兴地区的地址数据可能尚未完全录入,
能源矿产检测 矿产成分检测 矿石元素检测
能源矿产检测 矿产成分检测 矿石元素检测 矿石能源一般属于不可再生能源,属于现代工业的基础原料。矿石检测主要是指利用分析检测仪器对矿石材料进行分析检测,确定矿石材料成分和品位,为企业进行矿石开采研究提供分析技术支持。能源属于
百度小说排行榜2021前十名完结
现如今,小说越来越多,但似乎找到一本心仪的小说却变得越来越难,面对浩如烟海的小说,从哪里知道什么更适合自己呢?小编为你提前排雷,帮你找到自己心中的最爱,大家有什么意见与建议可以在评论区中一起交流,一起建立起一个小书虫们的交
相关文章
推荐文章
发表评论
0评