专访马全一: Docker正走在成为领域标准的路上
凭借其方便的可移植性和开源 Linux 容器引擎,Docker在云计算领域的人气飙升。其实使用 Linux 容器技术并不是什么新鲜事,国内的各大互联网公司内部都有基于 Linux 容器引擎的平台在为业务部门提供服务。一个开源的项目能否在商业上取得成功,很大程度上依赖三件事 —— 成功的 User Case, 活跃的开放社区和一个好故事。
嘉宾简介:
马全一, Docker 中文社区创始人之一,致力于在国内推广 Docker 开源技术。此前关注Python、NodeJS,也曾从事过 SAP的 FI/CO顾问等工作。在负责游戏后端平台研发的过程中了解到Docker技术后开始潜心钻研并从事 Docker 社区的活动。
Docker中文社区创办于2013年年底,主要提供 Docker 技术文章的中文翻译, DockerCon 视频字幕的制作,并在国内的主要城市组织 Docker Meetup 活动,方便国内用户了解学习Docker的相关技术和讨论交流。
以下为51CTO记者对马全一老师的专访录音整理。
请简单介绍一下您个人经历,什么时候开始想到创办Docker中文社区的?
马全一:虽然在大学学习的是生物专业,但是毕业后一直从事研发的工作。先后做Delphi、Python、Java 和 NodeJS的开发,也从是过 SAP FI/CO 和 ITSM 的顾问。创办 Docker 中文社区之前,在一家游戏公司负责游戏后端服务的研发团队,当时我们在找一个合适用于 mBaaS 的 PaaS云平台的时候发现了Docker,我觉得 Docker 能比 PaaS 平台做更多的事情。从 2013 年底开始,我们就专注于做 Docker 中文社区。从目前 Docker 的发展来看,我们的选择正确的, Docker 是 2013 年到 2014 年最火的开源项目,在云计算领域掀起了 Container 技术的热潮。
是什么使Docker如此吸引您,愿意专心钻研Docker这项技术?
马全一:我觉得Docker可以解决开发者和运维人员非常头疼的事情,就是应用程序的版本管理。做软件开发的时候,一个产品要上生产环境之前,需要从软件的某个版本的源代码 Build 构建一个应用程序部署到生产环境, 一些配置文件的改动需要通过 DevOps 的工具处理。当版本升级时必须重复上面的过程, Docker 通过使用 Linux 容器和 Union FileSystem 带来了新的解决方案,Docker 公司把它称为 ContainerOps。
我个人觉得这是一个新的机会,ContainerOps未来可能是一个革命性的理念。所以才专心研究 Docker 技术,做 Docker 开源技术的推广。
Docker中文社区是什么时候成立的?主要致力于哪方面的工作?
马全一:是在 2014 年二月份开始创办 Docker 中文社区,社区主要是做 Docker开源技术的推广,而且针对 Docker Hub 的闭源产品,我们也有写一个开源的替代产品。我们的目标很简单,就是让开发者都了解并且去使用 Docker 。我们觉得一个这样有革命性的产品,让大家都去接受和使用它肯定会有一个过程的。开始我们在社区中组织整理翻译很多英文的技术文章,随后组织一些meetup的活动,特别是在北京、上海、深圳这样开发者聚集的城市。开始时了解 Docker 的人很少,Meetup 的活动让更多人知道 Docker 。深圳的 Meetup 活动在当地 OSChina 的协助下举办,有三百余人到场参与,会场的通道都站满了热情的开发者。现在我们在社区里组织翻译一了业内第一本 Docker 技术书籍, 由 James Turnbull 编写的 《The Docker Book》。 目前中文译版已经上市 《第一本 Docker 书》,在各大电商网站都可以找到。
我们做Docker 技术的研发和社区,主要是看重 Docker 对 DevOps 带来的巨大改变,看重的是 ContainerOps 带来的巨大机会。对于 Container 容器在云计算领域的巨大机会,我认为云计算的厂商都会推出支持 Docker 或者 CoreOS 的方案。但是基于 Container 的 ContainerOps 平台还是空缺,这就是我们要在 2015 年要致力做的事情。
就您了解到的状况来看,Docker目前的应用状况是怎么样的?
马全一:我觉得Docker在国内的互联网公司已经有一些开始尝试了,但还没有大规模的使用。因为 Docker 出来的时间也不长,大家可能知道Docker,看新闻的时候会关注一下,只是知道它比较火,但具体是什么东西好多概念都混在一起。实际对于整体国内的开发者来讲,Docker 其实还是比较陌生的。
对于 Docker 技术我们也有很多意想不到的地方。 譬如 Docker 和微软深度合作,这个是大家谁也没有想到的,我在这个新闻之后困惑了很长时间。Windows 的 Container方案布局已经在 Azure 云计算中研发了一段时间,现在和 Docker 结合在一起的知,对云计算领域的还是有一定影响的。
Docker其实不是新技术,您觉得是什么原因,让它取得这么大的成功?
马全一:我觉得主要有两个原因。
第一个原因是云计算的时代到来。从整个趋势来讲,云计算发展到这个程度,原来大家对虚拟机的需求比较明确,现在有一些应用的场景,传统的全虚拟化方案并不合适,因为它比较厚重,这时候大家就会想起来一直在用的轻量级虚拟化的解决方案。
Docker 未来可能会成为软件分发的事实标准,成为系统在不同云计算平台之间迁移的最佳方案,这可能为云计算的市场带来一些冲击。
第二是 Docker 的 Container 引擎选择了使用 Union FileSystem的文件系统,让原来的很多文件,变成一层一层的结构。 在改动的时候,只需要把修改的部分增量在文件系统上就可以。LXC 最早的 Linux Container 解决方案,当然现在有了和它类似的 LXD 。它们和 Docker 不一样,Docker 是一种 Application Container 的实现,使用了精简的文件系统为 Application 的运行提供依赖,所以它更适合分发 Application。也许某一天连 Mobile 的 Application 也可以采用这种方式分发。
Docker不只适用于 Linux,在别的操作系统里,它的性能会有什么差异吗?
马全一:这个是没办法比较性能差异的。我们可以把Docker看作一个统一的接口,核心是一个 Container Engine 。 那 Windows 的容器是实现了 Docker 的接口定义,所以没有办法比较这之间性能的差异。
Docker出来了以后,在开放应用的时候,是不是不用再考虑多用户了?
马全一:使用 Docker的时候是运行了 Container 内的程序,至于这个程序要服务一个人还是几个人,是由程序的性质来决定,跟Docker没有关系。
Docker虽然有很多优势,但毕竟出来的时间不长,肯定还有不成熟的地方,像您刚才说一个是安全、一个是网络,这可能是它比较明显的两个短板。您觉得未来在解决这个问题的时候,有什么办法?
马全一:现在很多大公司都对 Docker 进行支持,和 Docker 公司进行了合作。其实从Docker是不是安全,还是要看在什么场景下使用。如果在公司内部,那其实不用很担心这个问题。 但是 Docker 已经受到越来越多的关注,如果是做为 Container 的公共服务,其实问题还是比较大的。安全还是相对的,但是各大厂商还是在努力的解决这个问题。
Docker 运行起来是很多层,Selinux 可以对每一层做了一个安全的控制,可以实现一个较安全的运行期环境, 但是因为Selinux本身比较复杂,能做好这个控制的人不多,至少是一个解决 Docker 安全问题的办法。
谷歌出了Kubernetes 的项目,它是管理大规模 Container 的解决方案,后面肯定还会有更多类似的产品出现。现在 Waeve 这样的项目就是提供解决网络问题,也拿到了融资。
SDN和Docker这两个结合在一起,会对Docker有什么帮助吗?
马全一:SDN跟Docker结合在一起的时候,我觉得可能会对Docker在网络上的问题有一些帮助。SDN也不能完全解决问题,有些还要靠 Docker 自己,要看它未来的版本在网络方面如何改进。
对CoreOS和Docker的分手这件事您怎么看?这对Docker和行业未来的发展会带来什么影响?
马全一:CoreOS 对 Docker 的发展是做出了巨大贡献,按照 CoreOS 官方的说法,他们认为 Docker有一些无法避免的缺陷,所以 CoreOS 决定自己推出 Container Runtime。 Rocket 的实现基础和 Docker 一样的,都是基于 Linux 的 Namespace 和 Cgroup 特性。
CoreOS 的 Rocket 出来以后,对Docker 的发展都会是一个促进,代码会更稳定一些,功能会更加完善。目前 Docker 的代码改动比较快,API 的版本升级比较频繁。当我依赖于 Docker 的代码或者 API 开发的时候就比较痛苦。但是它作为一个快速成长的项目,这个过程是必然的。那现在有产品和 Docker 竞争了,这是一个相互促进的事情。
而且我觉得以后很多类似 Rocket 的产品出现和 Docker 竞争。像OpenStack 一样,国内有很多公司都有自己的OpenStack版本,做到最后跟主干分支分的太远,新的特性加不进来,旧的东西又在不停维护。其实我觉得 Docker 和 OpenStack 的代码量来看,Docker相对来说还是比较简单的。