2013年初,一个名字从云计算领域横空出世,并在整个IT行业激起千层浪。这就是Docker——一个孕育着新思想的“容器”。Docker选择容器作为核心和基础,依靠容器技术支撑的Docker迅速成为国内外各大云计算厂商以及开发者手中的至宝。在一片热火朝天之后,新的革命已经悄然来到。
回首历史,云计算时代蕴育出了众多的云计算平台,虽然在服务类型或平台功能上有所差异,但它们的本质上如出一辙,都与NIST1对于云计算平台的定义有着密切的关系。
云计算是一种按使用量付费的模式,该模式提供可用的、便捷的、按需的网络访问, 纳入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件、服务),统一管理的资源能够被快速提供,大大减少了资源管理工作开销,你甚至可以再也不用理会那些令人头痛的传统服务供应商了。
经典云计算架构包括了IaaS(Infrastructure as a Service,基础设施即服务)、PaaS(Platform as a Service,平台即服务)、SaaS(Software as a Service,软件即服务)三层服务,如图1-1所示。
图1-1 云平台经典架构
IaaS层为基础设施运维人员服务,提供计算、存储、网络及其他基础资源,云平台使用者可以在上面部署和运行包括操作系统和应用程序在内的任意软件,无需再为基础设施的管理而分心。
PaaS层为应用开发人员服务,提供支撑应用运行所需的软件运行时环境、相关工具与服务,如数据库服务、日志服务、监控服务等,让应用开发者可以专注于核心业务的开发。
SaaS层一般为用户服务,提供了一套完整可用的软件系统,让一般用户无需关注技术细节,只需通过浏览器、应用客户端等方式就能使用部署在云上的应用服务。
同时,随着计算机技术推陈出新,应用的规模愈发庞大,逻辑愈发复杂,迭代更新愈发频繁,应用开发所需的统一规范和原有开发模式杂乱无章成了追求进步的主要障碍。在尖锐的矛盾中,云时代应用生命周期管理机制(Application Lifecycle Management,ALM)和十二要素应用规范(The Twelve-Factor App)2应运而生。
所有理论设计和预想一定是美好的,只是对于一个新的理论而言,如何经受住实践的考验,并将美好的愿景转化为生产力才是重中之重。IaaS的发展主要以虚拟机为最小粒度的资源调度单位,出现了资源利用率低、调度分发缓慢、软件堆栈环境不统一等一堆问题。PaaS在IaaS基础上发展而来,众多PaaS已经意识到可以利用容器技术解决资源利用率问题,但是PaaS通常在应用架构选择、支持的软件环境服务方面有较大的限制,这带来了应用与平台无法解耦、应用运行时环境局限性强、运维人员控制力下降的问题。
可见不论IaaS还是PaaS都有各自适用的场景,但依旧存在诸多缺陷,人们亟需一个真正可用的解决方案诞生。
每一场革命背后都有着深刻的历史背景和矛盾冲突,新陈代谢是历史的必然结果,新生取代陈旧得益于理念的飞跃和对时代发展需求的契合,很显然Docker抓住了这个契机。
Docker是什么?
基于官方的定义,Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。它是一个跨平台、可移植并且简单易用的容器解决方案。Docker的源代码托管在GitHub上,基于Go语言开发并遵从Apache 2.0协议。Docker可在容器内部快速自动化地部署应用,并通过内核技术(namespaces、cgroups等)为容器提供资源隔离与安全保障。
我们应该看看Docker的发展历程。
每一个传奇都需要一个这样的开头,很久很久以前:Docker项目由Solomon Hykes所带领的团队发起,在Docker公司的前身dotCloud内部启动孕育,代码托管于Github。
2013年3月:Docker正式发布开源版本,GitHub中Docker代码commit盛况空前,风头之劲一时无两。见图1-2。
图1-2 GitHub上Docker项目统计图
2013年11月:REHL 6.5正式版发布,集成了对Docker的支持,拉开了业界各大厂商竞相支持Docker的序幕。
2014年4月到6月:云技术市场上的三大巨头Amazon、Google及MicroSoft Azure相继宣布支持Docker,并着手开发基于容器的全新产品。
2014年6月:DockerCon 2014大会召开,会上来自Google、IBM、Amazon、Red Hat、Facebook及Twitter等全球领先企业的演讲嘉宾组成了豪华的阵容。此时, Docker自开源版本后又经历了15个月左右的飞速发展,Docker 1.0版本正式发布。
2014年8月:VMware宣布与Docker建立合作关系,标志了虚拟化市场形成了新的格局。
2014年10月:微软宣布将整合Docker进入下一代的Windows Server中。
2014年10月15日:Azure和Docker共同举办了Docker全球开发者大会,并宣布双方建立战略合作伙伴关系。
2014年底:Google率先发布容器引擎Google Container Engine(GCE),整合了Docker、Google自有容器技术和在DockerCon2014大会上发布的Kubernetes,致力于为用户提供完善的基于Docker应用打造的云计算平台;Amazon发布EC2 Container Service(ECS),它是一项高度可扩展、高性能、免费的容器管理服务,并能够在托管的Amazon EC2实例集群上轻松地发布、管理和扩展Docker容器,使得Amazon Web Services(AWS)用户能够使用AWS上的容器轻松地运行和管理分布式应用。
2015年4月:Docker公司宣布完成了9500万美元的D轮融资。此前,他们已完成三轮融资,包括1500万美元的B轮融资及4000万美元的C轮融资。
截至2015年5月:GitHub中Docker的贡献者多达近千人,被关注和喜爱(Star)多达两万一千余次(相比之下,此时Linux源码多年来积累的被关注次数为两万两千余次),并有近五千多个开发分支(Fork),Docker成为了GitHub上排名前20的明星项目。
Docker官方存储应用镜像的容器仓库也获得了大量开发者支持,其镜像仓库里已有四万五千余个不同应用功能的公共镜像。最受欢迎的Ubuntu、MySQL、Nginx、WordPress镜像,下载量已达到三四百万次。这些数字还在保持不断的增长!
在国内一线城市,几乎每一两周就有一场关于Docker的讨论大会,Docker永远不会让你孤独。
从此以后的未来:Docker已经给云计算带来了深远的影响,这是一次真正的计算机技术革命,来吧,拥抱变化!
一个软件项目的成功常常需要依托其衍生的生态系统,围绕或基于核心技术而构建的相关项目日臻丰富和完善,软件本身的功能和易用性也随之增加,Docker的迅猛发展与其强大的生态系统息息相关。首先我们从图1-3中整体上来审视一下它3。
图1-3 Docker生态系统
如图1-3,围绕Docker的生态系统自下而上分别覆盖了IaaS层和PaaS层所涉及的各类问题,包括资源调度、编排、部署、配置管理、网络管理、应用开发和部署平台、应用开发工具、应用服务供应以及大数据分析等云计算相关的服务。除了基于Docker技术解决构建分布式平台无法回避的经典问题,Docker及其生态系统主要带来了以下几点好处。
容器为用户打开了一扇通往新世界的大门,真正进入这个容器的世界后,却发现新的生态系统如此庞大。在生产使用中,不论个人还是企业,都会提出更复杂的需求。这时,我们需要众多跨主机的容器协同工作,需要支持各种类型的工作负载,企业级应用开发更是需要基于容器技术,实现支持多人协作的持续集成、持续交付平台。即使Docker只需一条命令便可启动一个容器,一旦试图将其推广到软件开发和生产环境中,麻烦便层出不穷,容器相关的网络、存储、集群、高可用等就是不得不面对的问题。从容器到容器云的进化应运而来。
什么是容器云?
定义
容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台。当容器云专注于资源共享与隔离、容器编排与部署时,它是一种IaaS;当容器云渗透到应用支撑与运行时环境时,它是一种PaaS。
容器云并不仅限于Docker,基于rkt容器的CoreOS项目也是容器云。Docker的出现让人们意识到了容器的价值,使得一直以来长期存在但并未被重视的轻量级虚拟化技术得到快速的发展和应用。鉴于Docker的里程碑意义,本书在讨论容器云时,都以分析Docker为支撑技术的容器云为主。
Docker公司本身的技术发展,亦是从一个容器管理工具一步步向容器云发展的历史过程。Docker最初发布时只是一个单机下的容器管理工具,随后Docker公司发布了Compose、Machine、Swarm等编排部署工具,并收购了Socketplane解决集群化后的网络问题。本书提及Docker时,一般指Docker容器核心,并不包含它向容器云迈进的一系列扩展工具,这些工具则将在本书第二部分进行分析。
除了Docker公司之外,业界许多云计算厂商也对基于Docker的容器云做了巨大的投入,以Docker容器为核心的第三方Docker容器云正在迎来春天。第6章将要介绍的Fleet、第7章将要介绍的Flynn和Deis以及第8章的Kubernetes,都是基于Docker技术构建的广为人知的容器云。
从容器到容器云是一种伟大的进化,并依旧在日积月累中不断前行,现在让我们一起进入Docker的世界,感受容器与容器云的魅力。
1National Institute of Standards and Technology,“The NIST Definition of Cloud Computing”论文定义了人们认可的云计算三层服务模型。
2参考自The Twelve-Factor App英文原版(http://12factor.net/)。
3参考自“Docker Ecosystem-MindMeister Mind Map”(https://www.mindmeister.com/389671722/docker-ecosystem)。
from: http://www.ituring.com.cn/tupubarticle/4438