1.4.3 Docker的优点
Docker的普及,得益于它的众多优势,本节介绍与研发过程比较紧密的几个优势。
1.提高资源利用率
以前一台32核128GB的物理机最多可以创建20台4核8GB的虚拟机,每台虚拟机部署一个应用,机器使用率常年在10%以下,导致极大的资源浪费。换成Docker的方式启动应用后,由于共享操作系统网络、CPU、内存,一台物理机平均能运行超过60个容器,对应超过60个应用。在实际生产环境中,我所在公司1台32核128GB的物理机可以稳定运行110个应用,效率提升3~5倍,CPU使用率为35%~40%,大大提升了资源使用率,如图1-12所示。
图1-12 新旧物理机对比
2.提升运维效率
之前申请一套数据库或者Redis,我们都会经过开发需求工单申请→运维机器调拨→系统环境初始化→数据库参数配置→数据库部署→数据库数据备份和恢复→开发业务库申请→交付使用,整个流程需要3~5天。换成Docker后,通过一套标准的基线Dockerfile直接调度,整个流程降到分钟级别。
3.提高标准化程度
在传统的KVM(Kernel-based Virtual Machines,基于内核的虚拟机)形态下,总是存在应用架构升级或版本升级的情况,有升级就有过渡期,新老版本并存,老版本被遗留很久,或者测试环境与生产环境配置不一致等问题,有了Dockerfile的标准化,这些问题都将不复存在。
4.提升交付效率
传统的虚拟机部署流程一般是编码→编译→打成War包或Jar包→提交发布单→选择目标虚拟机IP并发布→验证,过程中如果遇到问题需要回滚,就非常麻烦了,往往需要运维人员登录具体的虚拟机,找到历史War包,覆盖最新的War包并回退。容器化之后的流程变为编码(Dockerfile初始化后很少修改)→编译→打Fat-Jar包→提交发布单→自动构建为Docker镜像→拉起容器,过程中若发现问题,直接拉取上一个最新版本的镜像,一键回滚。整个过程与环境的交互程度、人工参与度会大大降低,可流程化、重复化的步骤全都变为平台化操作,进而大大提升交付效率。
5.无缝支持微服务落地
微服务主张将独立的功能抽象为独立的进程,原来的单体应用有可能一下变为10个微服务应用,对服务的维护、迭代都是很大的挑战。容器化后,业界比较认同的最佳实践是一个容器一个微服务,这样对微服务的运维管理会非常简洁轻量。
6.更符合无状态理念
容器化后,由于根据Dockerfile可以在各种机房、不同环境随意调度,弹性能力大大增强,更符合云原生环境下对无状态的要求,因此能够更快捷、更原生地支持企业上云或多数据中心建设。