在 Docker 诞生之初,它常常被放在虚拟机技术的对立面,甚至还有过 Docker 将替代虚拟机的夸大宣传,在许多集群以及虚拟化方案设计的讨论中,也总会将两者拿来比较一番利弊。

现如今 Docker 已经比较普及,但容器以及 Docker 并没有替代虚拟机,而是与之十分和谐的共存,两者各自具有不同的特征和相应适合的应用场景。下面我们来聊聊当下企业应用里的虚机和容器。

1、先说资源利用。

在企业上云工程中,虚拟化确实增加了每个服务器承载的虚拟机数量,但研究表明服务器的利用仍然严重不足。平均而言,DOCKER的企业客户可以看到50%的服务器利用率不足,可以进一步合并与集装箱化。这意味着能够将更多的工作负载打包到现有的基础设施上,或者甚至减少服务器的数量,从而节省许可证和硬件成本。

2、管理和维护
与VMware类似,虚拟化是一种底层技术,但是vSphere/vCenter是一种在VMware管理程序上运行的虚拟机的管理方法。DOCKER是一种技术,但如果需要管理在DOCKER引擎上运行的容器,则需要一个平台解决方案,包括访问控制和LDAP集成、管理和监视容器的仪表板、容器运行在哪些主机上的可视性、访问哪些存储卷或网络及支持持久化存储。一种考虑就是把DOCKER编排系统外加一些企业级功能特性,作为你的容器化应用的“V中心”。

3、易于修补和维护:容器化应用程序可以通过对源映像文件的更改来轻松更新。这也意味着可以随时更新和回滚补丁,大大方便了维护和更新。

4、更快的云迁移:许多企业的IT组织负责整合数据中心和将目标数量的应用程序迁移到公共云或私有云。容器化应用程序可以以一致的方式很容易地部署到不同的基础设施平台。

5、节省VM许可证的容器
容器化应用程序共享公共操作系统和软件库,这极大地提高了VM中的CPU利用率。这意味着组织可以减少操作其环境所需的虚拟机的总数量,并增加可以在服务器上运行的应用程序的数量。这也意味着更少的硬件成本和节省VM和OS许可。

6、裸金属容器
因为业务的需要,通常我们使用不同的服务器或不同的操作系统,由于性能或延迟关注,有一些业务需要直接在裸金属上运行容器,获得更好的体验。

7、容器的安全
容器本身是安全的。DOCKER容器在应用程序之间以及应用程序和主机之间创建隔离层,并通过限制对主机的访问来减少主机表面积,该主机表面积保护主机和共同定位的容器。在裸机上运行的DOCKER容器具有相同的应用于虚拟机上的高级别限制。但是,Docker容器还通过保护虚拟机本身并为主机提供深度防御,与虚拟化技术很好地配合。

最后,Docker容器可以运行在一个虚拟机或裸金属物理机----选择取决于你。就像数据中心中的其他决策一样,你想去的路径应该与你的业务优先级相一致。容器与虚拟机很好地工作,但是它们也需要在合适的情况下运行。

k8s集群调度

其次在企业复杂业务场景中,我们的测试环境往往需要多版本管理,要有能力随时快速的搭建起特定版本的产品环境供开发、产品、测试以及技术支持人员使用。所以这无疑又增加了环境管理设置的复杂度。
再有就是随着环境数量的扩张,我们的环境从单节点走向集群,这时候我们对环境调度能力的要求会比较高,例如我们要对环境的资源进行计算和限制,保证最大化利用资源的同时不会撑爆系统。例如我们要保证系统有足够的冗余,在某些环境出现故障的时候能够自动检测出来并在冗余节点进行恢复。例如我们需要能够实现多租户管理,执行资源管控,限制超售行为. 当然我们也希望系统有一定能力的无人值守运维能力等等。
团队越来越庞大,引入微服务架构后对于运维和测试更是灾难级的影响。 对性能更是有着苛刻的要求,因为微服务架构下的模块数量是恐怖的,大量的研发人员提交代码触发CI流程,造成了每日的构建次数达到了千量的级别。随着团队的扩展,以后还会有万量级别的压力。 所以单机编译构建已经是一个不可容忍的方案。 我们需要横向扩展能力。