首页 > 代码库 > 京东云、新浪微博等专家畅谈Docker未来格局:开放与竞争(上)

京东云、新浪微博等专家畅谈Docker未来格局:开放与竞争(上)

田琪(@摇摆巴赫)是京东资深架构师,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”

当中提到,开发人员构建分布式系统非常困难,原因在于工具不够充分,我们要为分布式系统专门建立对应的工具集。详细而言。包含:
1. runtime (How do I run my code repeatably on different
    解决在不同机器执行同样代码的问题:即Docker Runtime。
2.packaging & distribution (How do I ship my code across many different machines)
    解决代码分发部署问题,介绍docker distribution tools项目,地址:https://github.com/docker/distribution。
3. service compostion (How do I organize my application in scalable services)
    解决应用的分布与扩展性方面的问题:介绍Docker Compose项目。
4. machine management (How do I deploy many machine to run my code)
    解决机器管理等问题:介绍Docker Machine项目。


5. clustering (How do I stop worrying about individual machines)
    介绍Docker Swarm项目。
6. networking
    介绍Docker网络方面的解决方式,介绍了非常多厂商的网络解决方式,这里提到的比較重要的观点是。Docker网络解决方式的目标是不动你原有的infrastructure,容器网络问题应该在应用层解决。
7. 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…

8.Build better plumbing
    想要构建一个好的开发人员平台须要非常多小的构件支持,这里介绍Docker用到的这些构件,比方namespace、cgroup、device mapper等,而且介绍Docker自己创造的构件。包含:storage、oscontainers、networking等。重点介绍项目:Notary,项目地址:https://github.com/docker/notary 一个内容管理和安全验证的项目;OS Container。介绍了RunC项目,项目地址:https://runc.io
9. 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,商业版支持安全认证,訪问权限控制及审计功能。
  • 介绍微软公司在容器方面进行的工作,宣传微软已经将容器技术整合进入自己的开发工具。平台。操作系统及云等平台上。这里国外开发人员跟国内开发人员相似,对微软也都是比較调侃的态度。从现场观众的反映比較easy看得出来。

  • 最后现场演示了一个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的client实现过于复杂。运维和操作成本比較高。

另外一个印象较深的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环节,相关内容稍后公布,敬请期待。

感谢刘世杰@猎聘网的记录与整理,臧秀涛@infoq的校对与公布。其他多位编辑组志愿者对本文亦有贡献。读者能够通过搜索“ArchNotes”或长按以下图片。关注“高可用架构”公众号。查看很多其他架构方面内容,获取通往架构师之路的宝贵经验。

转载请注明来自“高可用架构(ArchNotes)”公众号。


技术分享

下篇

传送门

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

京东云、新浪微博等专家畅谈Docker未来格局:开放与竞争(上)