命名空间(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、存储的额外开销非常小,还可以实现秒级的开启和关闭。对于工业互联网平台应用的开发,容器技术已经成为实际上封装、分发和运行标准。