田琪(@摇摆巴赫) DockerCon 2015峰会见闻
田琪(@摇摆巴赫)是京东资深架构师,10年互联网行业从业经验,之前曾分别就职于搜狐、新浪、腾讯等公司,目前负责京东云主机及云数据库的架构及研发工作,对云计算基础技术有深刻理解。
DockerCon 2015于6月22-23号在美国旧金山落下帷幕,这个由Docker公司发起的Docker领域峰会,包括Docker公司CEO在内的多位领域专家发表了精彩演讲。峰会展示着Docker领域的成就,也预示着Docker领域的未来方向。田琪作为国内容器化方向的先行者,受邀参加了此次峰会,峰会上究竟有哪些见闻,Docker未来又将走向何方,田琪在“QCon高可用架构群”中做了分享。本文由群编辑根据分享记录整理而成。
大会第一天
上午
大会第一天上午的内容最多,先是放了一些小动画介绍Docker的发展历程等,开场是Docker公司CEO Ben Golub介绍自己及docker,重点介绍了Docker近期发展的一些数字,以及过去一年的增长量:
贡献者增长了183%
GitHub上关于Docker的项目增长了515%
Docker提供的工作机会增长了1720%
使用Docker构建的应用程序增长了934%
容器的下载量增加了18082%
随后,他介绍了Docker的下一步主要工作,是在多容器运行及管理上将做更多工作。
之后CTO Solomon Hykes登场,主要技术内容都在这里。他首先介绍了他们的宏伟目标:“For the next 5 years, we're going to build a software layer to make the internet programable”;然后介绍了后续具体的目标:“Reinvent the developer toolbox”。
其中提到,开发者构建分布式系统非常困难,原因在于工具不够充分,我们要为分布式系统专门建立相应的工具集,具体而言,包括:
runtime (How do I run my code repeatably on different machines)
解决在不同机器运行相同代码的问题:即Docker Runtime。
packaging & distribution (How do I ship my code across many different machines)
解决代码分发部署问题,介绍docker distribution tools项目,地址:https://github.com/docker/distribution。
service compostion (How do I organize my application in scalable services)
解决应用的分布与扩展性方面的问题:介绍Docker Compose项目。
machine management (How do I deploy many machine to run my code)
解决机器管理等问题:介绍Docker Machine项目。
clustering (How do I stop worrying about individual machines)
介绍Docker Swarm项目。
networking
介绍Docker网络方面的解决方案,介绍了很多厂商的网络解决方案,这里提到的比较重要的观点是,Docker网络解决方案的目标是不动你原有的infrastructure,容器网络问题应该在应用层解决。
extensibility (How do I add my own tools to the tool box)
介绍Docker Plugin项目,下列功能会以plugin形式存在
network plugin
volume plugin
scheduler plugin
service discovery plugin
more to come...
Build better plumbing
想要构建一个好的开发者平台需要很多小的构件支持,这里介绍Docker用到的这些构件,比如namespace、cgroup、device mapper等,并且介绍Docker自己创造的构件,包括:storage、oscontainers、networking等。重点介绍项目:Notary,项目地址:https://github.com/docker/notary 一个内容管理和安全验证的项目;OS Container;介绍了RunC项目,项目地址:https://runc.io
promote open standards
介绍Docker的真正价值不是技术,而是标准,Docker作为事实标准应该提供一个开放公开的标准给大家。然后重点介绍了OCF,Docker开放的标准规范,并介绍了RunC作为这个标准的一个开源实现
这个标准的大体内容主要在这几个方面:
A formal specification
Independent governance
A neutral reference implementation
Support from a broad coalition
An open door to fresh ideas
后面开始演示环节,可惜演示都失败了,然后放提前录好的视频,结果也失败了。个人认为Docker目前的重点工作主要是网络和插件体系的建立。
上午主要的技术方面的内容也就是这些,后面我主要在会场外和厂商及Docker的技术团队聊了下。
厂商方面大多数围绕Docker做云服务,即底层IaaS资源平台独立,上层提供基于Docker的代码分发、部署、CI等工作,大概有不少于10家这样的厂商在会场宣传,竞争看似比国内更激烈。还有一小部分围绕Docker提供product或者solution的公司,这点国内也是这样。重点跟flocker这家公司聊了下,了解下他们做的Docker存储产品,用于解决Docker volume的问题。开始和我聊的小妹明显不是搞技术的,问到存储是否支持快照,是否需要停止容器及live migration等问题就答不太上来了,后来和技术聊还可以。总体他们做的事情是让stateful的容器可以live migration。
后来找到Docker registry的团队技术人员,跟他们介绍了我们最近开源的Docker镜像存储项目speedy(项目地址:https://github.com/jcloudpub/speedy),他们表示很感兴趣,欢迎我们提交driver的驱动给他们。另外问到Docker registry v1什么时候会被废弃,他们表示肯定会被废弃,但只是还没有决定时间。
下午
后续参加了一些小场的分享,印象比较深的有这几个:
Docker Plugins
这场的主题之前是保密的,参加了才知道是讲docker plugin的,主要介绍Docker插件体系是Docker目前重点工作之一,主要内容:
docker的插件体系结构是目前的重点工作,目前支持的插件主要有网络和存储,网络的插件实现支持weave,存储的插件目前支持flocker,后续会支持日志插件。插件会以进程方式存在,使用domain socket通信,协议是json或者http,这样插件可以使用任何语言编写。插件可以通过容器方式部署,演示了一个在线容器迁移的demo,利用flocker及weave插件。
Docker networking
主要介绍了Docker libnetwork项目,将Docker的网络抽象成了endpoint、network、sandbox等实体。
endpoint指服务之间的链接
network是一堆可通信的endpoint的集合
sandbox是一组可连通容器的集合
另外提到服务发现会是libnetwork的基本功能,目前通过DNS实现,将来可以提供其它实现,这里还强调了Docker网络解决方案应该在应用层,不动原有的基础设施层,这样对底层网络没有依赖和改造的成本。
大会第二天
上午
general session议题比较商业,不像第一天比较技术一些,主要内容:
宣传Docker是如何降低企业项目发布迭代周期的,如何使用docker整合dev及ops团队。
介绍docker hub在过去的业绩及增长,介绍docker hub的商业版docker trusted registry,商业版支持安全认证,访问权限控制及审计功能。
介绍微软公司在容器方面进行的工作,宣传微软已经将容器技术整合进入自己的开发工具,平台,操作系统及云等平台上。这里国外开发者跟国内开发者类似,对微软也都是比较调侃的态度。从现场观众的反映比较容易看得出来。
最后现场演示了一个Docker的UI项目,集成了Docker的machine、compose、swarm等项目,管理和部署整个Docker集群。
下午
Shopify公司的人介绍自己公司的服务架构。议题是:routing and discovery at shopify。这个议题非常有新浪微博范,里面很多内容都非常熟悉,基本也都是大型互联网系统架构的一些基本常识,印象比较深的点有这些:
shopify自己开发了一个Toxiproxy的项目来模拟tcp各种延迟及问题来试他们的系统,这个项目的地址是http://github.com/shopify/toxiproxy。他们整个服务体系后端的基础目标:
No single point of failure
Stale reads > no reads
Reads order of magnitude larger than it writes
Fast convergence
介绍Shopify使用DNS来完成服务发现。
最后他们还表达了内部对ZooKeeper的使用及观点,也是觉得zk的客户端实现过于复杂,运维和操作成本比较高。
另外一个印象较深的topic是关于Docker security的主题:least-privilege microservices。
首先亮出他们的核心观点:
“every process must be able to access only the information and resources that are necessary for its legitimate purpose”
首先介绍profile概念,分别介绍不同类型服务所依赖的资源,比如:
前端服务,比如php 依赖后端的众多暴露的API
后端服务,比如MySQL依赖网络
计算服务,比如Hadoop依赖cpu资源,会产生大量的workload
然后引入进程监控概念,通过strace -c -t -p <进程ID>来统计进程所用到的所有syscall,然后提到通过一些手段来限制相应进程用到的syscall。
后续介绍Docker已经存在的一些security方面的限制手段。比如:cgroup、namespace、Linux Security Modules、Linux Capabilities、ulimit、User namespace等。
另外提出在默认发行版中去除一些不需要的包,用户以及命令工具等来提高默认安全性,随后提出通过一个security profile的配置来统一规范容器的安全性,并配套相应的工具。
总体上这个主题内容主要是一些想法并且希望大家一起来指定这个安全的规范以及开发相应的工具。
后面简单介绍下个人参会感受,只代表个人观点。
参加这个会议我个人主要两个目的:
1. 了解Docker正在做什么
2. 了解Docker周边厂商正在做什么
厂商这边和国内也差不多,都是一些云服务相关的,但是竞争更激烈一些,有大约10家做类似服务的公司。Docker本身目前最重要的两个工作,一个是libnetwork的开发,另一个是插件体系的支持。
最大的新闻是Docker推出OCP开放容器项目:
这里面有很多故事的,不是表面那样Docker的人和CoreOS的人握个手,搁置争议,共同开发。实际上Docker一直非常aggressive,视其它生态厂商为竞争对手,从它发布项目的布局不难看出,基本上所有的事情都是打算自己做的。
这个OCP项目的产生我个人认为只是Docker一个妥协无奈的选择而已,Docker本身的核心技术门槛并不高。所以CoreOS搞Rocket,如果Docker继续封闭,其它厂商有可能去拥抱CoreOS的runtime。所以Docker只能被逼开发标准,但是它们同时将libcontainer作为事实标准放入了OCP中,也可以看出动机,也就是Docker只是表面上和CoreOS和解。我觉得Docker项目现在的情况和当初的OpenStack有些相像,最终何去何从我们拭目以待。
号外
在田琪老师分享之后,闫国旗、王渊命和陈飞三位专家也参与了讨论,最后还有Q&A环节,相关内容我们会在整理后于明天发布,敬请期待。
感谢刘世杰的记录与整理,臧秀涛的校对与发布,其他多位编辑组志愿者对本文亦有贡献。读者可以通过搜索“ArchNotes”或长按下面图片,关注“高可用架构”公众号,查看更多架构方面内容,获取通往架构师之路的宝贵经验。转载请注明来自“高可用架构(ArchNotes)”公众号。