关于Container技术和Docker的文章非常多,因为这是一个颠覆性的技术。

而笔者还要写这篇文章的目的是想用更通俗的语言来帮助大家快速地理解Container技术和Docker,特别是Container技术的影响。

我们先从Docker谈起吧。Docker是过去一年最火爆的技术之一(不相信的人可以查一下google trends的引用量),Docker是什么呢,白话点说,就是一个Container的管理工具。那Container是什么呢,白话点说,就是一个更轻量级的虚拟机,但是这个虚拟机没有操作系统和设备(操作系统是共享的)。

一个没有操作系统和设备的虚拟机怎么会如此火爆呢?不是因为container技术本身有多牛逼(虽然这个技术确实挺牛逼的),而是因为container技术目前解决了软件行业的最大问题之一:应用的共享,配置管理和维护(还有应用的隔离,效率等等,后面再讲),不管是在物理机环境还是云环境。

白话点说,就是有个container技术,你无论在云环境,还是其它环境安装一个SAP系统都和在appstore上安装一个微信差不多简单。这个很吸引人吧。所以不管你是软件开发公司,集成公司,服务公司,电商,还是云计算公司,都跑来跟风(包括google,亚马逊,易贝,微软,IBM。。。)。大公司里,不跟风的,也就我们HP等为数不多的公司了。

那Container如何做到实现应用的部署和隔离呢?它把应用和应用关联的lib库都装在container里面,这个container可以在某个操作系统上跑,而container内的东西和container外的东西是隔离的。大家很快会想到,这不就是虚拟机吗?Container和虚拟机看上去差不多,但是还是有些不同的。

和虚拟机相比,container不仅更轻量,而且配置简化了很多(不用考虑操作系统和设备的配置)。这样做有2个好处,一个是写应用的人不用管操作系统的事了(我只会写JAVA,不懂Linux,没关系,你把JAVA相关的配置搞好就好了),因为应用都在container里面。另一个好处是,你的container既可以部署在笔记本的操作系统上,也可以部署到云环境,只要操作系统一样,其它区别都没关系。并且不需要安装,解压等等(这个类似于虚拟机,但是虚拟机要考虑虚拟机容器的不同,而对于container,只要操作系统一样就行了)。从配置管理来看,Container可以做增量的管理(这个就不展开了)。

刚才是从应用共享和部署的角度看container技术。从更大的影响来讲,container技术会影响我们整个软件的开发和管理方式,我拿汽车做一个类比,我们过去的企业级软件(或者叫复杂软件),软件生产的很多工作都是装配和调试,由于IT系统配置相关的复杂性(和汽车相似,一大堆零部件),软件的管理和维护也非常复杂,软件的发布会牵涉到一大堆部门,软件的开发,集成,和其它工具的集成,还有运维,测试等等。由于软件本身是需要改进和升级的,在这种基于装配和调试的生产方式下,软件的管理和维护工作不仅复杂而且工作量大。而基于container和Docker技术,未来应用软件的主要工作会转变为整个部件的替换,装配工作在开发阶段就一次完成了。管理工作的复杂性必然大大降低。软件产品的工业化水平也会大大提高。

另一方面,站在程序员的角度,过去软件的管理和共享,主要是在代码层面,例如github,未来的管理和共享,是在应用层面,类似于google app store。程序员和最终用户的距离会非常近。最终用户也有可能自己搭建SAP这样的系统,这种变化的影响会非常深远。

 另外,从效率的角度,container也可以更有效地利用机器资源,这对于云计算的服务商来说,是至关重要的。关于container,可以展开的东西实在太多。希望我的文章对大家学习container技术能起到抛砖引玉的作用。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐