容器技术为啥能这样火

近几年,容器技术的发展呈火爆态势,俨然一颗快速升起的新星。从目前发展趋势看,容器技术的发展正在改变传统的虚拟机应用和软件开发与部署方式。相对虚拟化技术,容器技术对系统资源的占用率更低,是一种原生应用架构。在软件开发与部署方面,容器技术通过打包应用及其依赖包,将应用变成一种标准化的、可移植的、自管理的组件,能在任何主流系统中开发、调试和运行。除此之外,面对蓬勃发展的工业互联网应用需求,容器和微服务的完美组合,满足了碎片化工业场景的应用需求,工业PaaS平台开发能力也得以重构。

为什么追捧容器技术

在英文中容器被译为“Container”,与“集装箱”使用的是同一个单词,解释为一种可以装货的容器或盒子。对于容器的概念,有人会觉得难以理解。但是如果将容器换做集装箱,理解起来会更简单。从本质上讲,“容器”和“集装箱”没有太大区别,不同的是容器打包的是“应用及其依赖的包”,让应用变成一种标准化的组件,摆脱与系统之间的紧耦合关系,能在任何主流系统中开发、调试和运行。

2013年,随着开源应用容器引擎Docker第一个版本的发布,容器这种能够打包应用和隔离运行环境的技术就引起了开发者的高度关注。由此推动容器技术就进入了快速发展期,这背后的动力源自于越来越多的碎片化工业应用和分布式部署需求。

回顾十年前,那时候的制造企业更多关注的是ERP、PLM、CRM等大型应用软件的开发和部署,这些软件模块多,功能复杂,开发周期长,实施过程复杂,而且采用集中式应用部署方式。在平台的选择上,主要以传统服务器为主,应用软件和平台系统之间是紧耦合关系,并不存在应用迭代和平台迁移需求。

但近年来,随着智能制造的推进,企业开始关注工厂的智能化转型,在工业生产领域,不同企业的工厂生产特点各不相同,而且呈现出的是零散和碎片化的个性化应用需求,部署环境也存在多样性,如虚拟化服务器、公有云、私有云等。因此,要像ERP、PLM、CRM等软件开发和应用那样,利用传统的软件开发手段针对极具个性化的工业应用场景打造通用化的应用软件,其实并不可行。而且在传统的应用开发和部署模式下,应用软件与部署环境之间存在紧耦合依赖关系,对应用在运行过程中的动态迁移,以及不同服务在不同环境中的适配带来了巨大挑战。因此,像容器这种能通过打包应用及依赖包,实现“一次开发,到处运行”的技术受到了用户的积极追捧。

主流容器技术Docker

近年来,以Docker为代表的容器技术已经深入人心,无论是传统IT企业还是互联网企业,商业巨擘亦或是初创公司,大家都以饱满的热情投入到Docker容器技术的讨论和探索中来,围绕Docker相关的技术,不仅有像微软、IBM、Amazon和Google等国际著名云厂商支持Docker技术,国内像腾讯,阿里,百度等也相继加入Docker的阵营。国内基于Docker的成功应用案例也逐渐开始浮出水面。为构建具备弹性扩展能力的PaaS平台提供了很多值得借鉴的宝贵经验。

虚拟机和Docker比较

从结构来看,虚拟机的操作系统和Hypervisor在Docker中已经被Docker引擎所取代。虚拟机实现资源隔离的方式是利用Hypervisor虚拟化服务器的CPU、内存、IO等设备。而Docker就简单得多,Docker引擎可以看成Linux的namespace、cgroup和镜像管理文件系统的封装,Docker并没有和虚拟机一样利用一个完全独立的操作系统实现环境隔离,利用的是目前linux内核本身支持的容器方式实现的资源和环境隔离,简单的来说,Docker就是利用namespace实现的系统环境的隔离,利用cgroup实现资源限制,利用镜像实现根环境的的隔离。

内核虚拟化技术

具体来讲,Docker底层的核心技术包括Libcontainer(LXC),这是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。LXC的两大组件包括命名空间(Namespaces),由IBM贡献,以及控制组(Control groups),由Google贡献。