首页 > 智能制造

容器技术为啥能这样“火”

www.cechina.cn2019.06.26阅读 6848

  近几年,容器技术的发展呈火爆态势,俨然一颗快速升起的新星。从目前发展趋势看,容器技术的发展正在改变传统的虚拟机应用和软件开发与部署方式。相对虚拟化技术,容器技术对系统资源的占用率更低,是一种原生应用架构。在软件开发与部署方面,容器技术通过打包应用及其依赖包,将应用变成一种标准化的、可移植的、自管理的组件,能在任何主流系统中开发、调试和运行。除此之外,面对蓬勃发展的工业互联网应用需求,容器和微服务的完美组合,满足了碎片化工业场景的应用需求,工业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贡献。命名空间(Namespaces)是Linux内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响,包含容器间PID资源隔离、网络隔离、IPC资源隔离、文件目录隔离、主机名和域名隔离、用户和组的隔离。
  控制组(cgroups)主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。可对容器使用的CPU、内存和网络等资源进行管理控制。
  正如所有应用都需要文件系统支撑一样,Docker采用AUFS文件系统,一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Docker的AUFS文件系统分为两层,只有最上层是可读写的(Container),其他的层只具有读权限(Image)。

  文件系统的修改

  比如容器已经对A应用及其动态库打包,而随着应用需求的变化,企业需要在这个容器A进行修改,这个时候的做法是:只需要将需要将新的应用和动态库进行打包并推送到容器镜像库,在原有的容器A的基础上进行叠加和更新即可,极大的降低了应用重新开发和部署的难度。
  从性能上看,由于Docker有着比虚拟机更少的抽象层,不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,减少了加载操作系统内核的时间和资源的消耗,因此,在CPU、内存等资源利用率上更有优势。比如容器启动时间是秒级,而虚拟机都是分钟级,硬盘使用一般为MB计算,而虚拟机大多是GB级的空间占用,在性能上,容器更接近原生,单机就能支持上千个,远多于虚拟机的几十个。

  Docker与虚拟机启动的时间及资源消耗的比较

  从应用层面看,容器技术有两个主要优势:一是“一次构建、到处运行”。二是“增量更新、快速回退”。这两个优势极大的降低了软件开发和运维难度,也推动了持续集成和部署(DevOps)模式的发展。

   持续发布平台

  对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。由于Docker很轻很快,可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。
  后记
  工业互联网作为推进企业智能制造型重要使能平台,已经受到了企业的广泛关注。然而面对工业生产过程中的个性化需求,传统应用开发手段已经无法支撑起碎片化和专业化的工业应用场景开发需求。而以容器和微服务为代表的新兴技术正在成为构建工业互联网PaaS平台的新选择。容器技术是极具颠覆性的计算机资源隔离技术,不仅对CPU、存储的额外开销非常小,还可以实现秒级的开启和关闭。对于工业互联网平台应用的开发,容器技术已经成为实际上封装、分发和运行标准。