容器技巧是这两年热门的话题,因为容器技巧给我们带来了很多方便的处所,节俭了不少成本,不管是在运维还是开发上。我们都知道开发与运维的环境都比较复杂,而且开发还分前后端以及测试等,运维环境则是基于服务器、交换机或者在云上的,这就导致了开发环境和线上环境的差别。所以开发环境与运维环境之间无法达到很好的桥接,在安排上线利用时,依旧需要花时间去处理环境不兼容的问题。
而容器技巧正是解决了这种环境不一致的问题:容器可以帮我们把开发环境及利用全部打包带走,打包好的容器可以在任何的环境下运行,这样就可以解决开发与运维环境不一致的问题了,所以:
容器解决了开发和运维之间的抵触
在开发和运维之间搭建了一个桥梁,是实现devops的最佳解决方案
以上只是描写是容器解决了什么问题,但是还没有阐明什么是容器,不过其实简略几句话就可以阐明容器了:
对软件和其依附环境的标准化打包
利用之间相互隔离
共享一个OS Kernel
可以运行在很多主流操作系统上
容器技巧作为出身于云盘算时代的一种新技巧理念,近年来颇受业内追捧,重要是因为容器技巧可以让利用和基础设施的安排变得更加快速,从而使企业能够用较低的技巧成本享受到云的弹性和机动性。
容器技巧的特点如下:
资源独立、隔离Docker通过Linux Namespace、Cgroup限制了硬件资源与软件运行环境,与宿主机上的其他利用实现了隔离,做到了互不影响。不同利用或服务以“集装箱”(container)为单位装“船”或卸“船”,“集装箱船”(运行container的宿主机或集群 )上,数千数万个“集装箱”排列整齐,不同公司、不同种类的“货物”(运行利用所需的程序、组件、运行环境、依附)保持独立。这恰好也是云盘算平台的最基础需求。
环境的一致性
开发工程师完成利用开发后build一个docker image,基于这个image创立的container像是一个集装箱,里面打包了各种“散件货物”(运行利用所需的程序、组件、运行环境、依附)。无论这个集装箱在哪里:开发环境、测试环境、生产环境,都可以确保集装箱里面的“货物”种类与个数完整雷同,软件包不会在测试环境缺失,环境变量不会在生产环境忘记配置,开发环境与生产环境不会因为安装了不同版本的依附导致利用运行异常。这样的一致性得益于“发货”时已经密封到”集装箱“中,而每一个环节都是在运输这个完整的、不需要拆分合并的”集装箱“。
轻量化
传统的虚拟机通过硬件虚拟化创造一个虚拟的系统,每个虚拟机都有自己的内存、硬盘和操作系统,预分配的资源会被虚拟机完整占用。应用虚拟机来隔离利用会造成比较大的资源糟蹋,一个利用加上依附只有几十到几百M的大小,而操作系统往往还需要耗费10G左右容量。
容器包含了利用和所需的依附,但不需要独占资源,没有一个虚拟系统,而是和宿主机共享硬件资源和操作系统,和其他容器共享内核,从而实现资源的动态分配。多个容器在同一个宿主机操作系统中的用户空间以独立的过程运行。因此,容器相比虚拟机要轻量许多,在一个主机上可以同时启动近百个容器,一个利用要在数量上横向扩大非常便捷,而虚拟机则几乎不可能启动同样多的数量。对于重启操作,容器近似于重启一个过程,而虚拟机则相当于重启操作系统。
Build Once, Run Everywhere
“货物”(利用)在“汽车”,“火车”,“轮船”(私有云、公有云等服务)之间迁移交换时,只需要迁移符合标准规格和装卸方法的“集装箱”(docker container),削减了耗时费力的人工“装卸”(上线、下线利用),带来的是宏大的时间人力成本节俭,这使未来仅有少数几个运维人员运维超大规模装载线上利用的容器集群成本可能。
看到这里,有没有感到非常眼熟?近几年大热的物联网平台,宣传的不也就是这些点吗?物联网平台商往往会这么告诉你:在我们的平台上供给了多种多样的开发工具,你可以应用拖拽式的伎俩开发程序,完整不用操心底层的操作系统和所依附的环境,只需专注于客户的需求和利用程序本身。就像OpenStack、Cloudstack这样的技巧是解决IaaS层的问题,容器技巧的出身其实重要解决了PaaS层的技巧实现。
现在最常用的开源云平台架构Kubernetes、Cloud Foundary还是Serverless,其背后驱动都是容器技巧。而市面上多达上百家的物联网平台,几乎都是PaaS平台。说到这里,大家可能就会充分懂得容器技巧的重要性了。
容器技巧为软件开发和系统运维带来了颠覆性的突破,而随着容器技巧的普及,系统开发和管理的效率必将上升到一个新的台阶,从而为企业带来不可估计的效益。