2013年初,一个名字从云计算领域横空出世,并在整个IT行业激起千层浪。这就是Docker——一个孕育着新思想的“容器”。Docker选择容器作为核心和基础,依靠容器技术支撑的Docker迅速成为国内外各大云计算厂商以及开发者手中的至宝。在一片热火朝天之中,新的革命已经悄然来临。

1.1 云计算平台

回首历史,云计算时代蕴育出了众多的云计算平台,虽然在服务类型或平台功能上有所差异,但它们的本质上如出一辙,都与NIST对于云计算平台的定义有着密切的关系。

云计算是一种资源的服务模式,该模式可以实现随时随地、便捷按需地从可配置计算资源共享池中获取所需的资源(如网络、服务器、存储、应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销,你甚至可以再也不用理会那些令人头痛的传统服务供应商了。

经典云计算架构包括IaaS(Infrastructure as a Service,基础设施即服务)、PaaS(Platform as a Service,平台即服务)、SaaS(Software as a Service,软件即服务)三层服务

  1. IaaS层:为基础设施运维人员服务,提供计算、存储、网络及其他基础资源,云平台使用者可以在上面部署和运行包括操作系统和应用程序在内的任意软件,无需再为基础设施的管理而分心。
  2. PaaS层:为应用开发人员服务,提供支撑应用运行所需的软件运行时环境、相关工具与服务,如数据库服务、日志服务、监控服务等,让应用开发者可以专注于核心业务的开发。
  3. SaaS层:为一般用户服务,提供了一套完整可用的软件系统,让一般用户无需关注技术细节,只需通过浏览器、应用客户端等方式就能使用部署在云上的应用服务。

同时,随着计算机技术推陈出新,应用的规模愈发庞大,逻辑愈发复杂,迭代更新愈发频繁,应用开发所需统一规范和原有开发模式杂乱无章成了追求进步的主要障碍。在尖锐的矛盾中,云时代应用生命周期管理机制和十二要素应用规范应运而生。

1.2 容器,新革命

每一场革命背后都有深刻的历史背景和矛盾冲突,新陈代谢是历史的必然结果,新生取代陈旧得益于理念的飞跃和对时代发展需求的契合,显然Docker抓住了这个契机。

Docker是什么?
根据官方的定义,Docker是以Docker容器为资源分割和调度的基本单元,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建,发布和运行分布式应用的平台。他是一个跨平台,可移植并且简单易用的容器解决方案。Docker源代码托管到Github上,基于Go语言开发。

容器技术的生态系统自上而下分别覆盖了IaaS层和PaaS层所涉及的各类问题,包括资源调度,编排,监控,配置管理,存储网络管理,安全,容器化应用支撑平台等。除了基于容器技术解决构建分布式平台无法回避的经典问题,容器技术主要带来了以下的好处。
1.持续部署与测试:容器消除了线上和线下的环境差异,保证了应用生命周期的环境一致性和标准化,开发人员使用镜像实现标准开发环境的构建,开发完成后通过封装着完整幻环境和应用的镜像进行迁移。
2.跨云平台支持:最大好处之一就是适配性,越来越多的云平台都支持容器,用户再也无需担心收到云平台的捆绑

image

3.环境标准化和版本控制:基于容器提供的环境一致性和标准化,可以使用git工具等等对容器镜像进行版本控制,相比基于代码的版本控制来说,还能对整个应用环境实现版本控制,一旦出现故障就可以快速回滚。相比于之前的虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。

4.高资源利用率与隔离:容器没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等状态下能运行更多的应用实例,可以更充分地利用系统资源。同时容器拥有不错的资源隔离和限制能力。可以对应用精确地分配对应CPU、内存等等资源,保证了应用之间不会互相影响。

5.易于理解且易用:Docker的英文是处理集装箱的码头工人,标志是鲸鱼运送一大堆集装箱,集装箱就是容器。

6.应用镜像仓库:Docker官方构建了一个镜像仓库,组织和管理形式类似于Github,其积累了成千上万的镜像相当于一个非常有用的应用商店,提供了巨大的便利。

1.3 进化:从容器到容器云

容器为用户打开了一扇通往新世界的大门,真正进入这个容器的世界后,却发现新的生态系统如此庞大。在生产使用中,不论是个人还是企业,都会提出更复杂的需求。这时,我们需要众多跨主机的容器协同工作,需要支持各种类型的工作负载,企业级应用开发更是需要基于容器技术,实现支持多人协作的持续集成、持续交付平台。即使 Docker 只需一条命令便可启动一个容器,一旦试图将其推广到软件开发和生产环境中,麻烦便层出不穷,容器相关的网络、存储、集群、高可用等就是不得不面对的问题。从容器到容器云的进化应运而生。

容器云以容器为资源分割和调度的基本单位,封装整个软件的运行环境,为开发者和系统管理者提供用于构建,发布和运行分布式应用的平台。