16.1 Docker为什么会成功

Docker实现的种种基础技术(cgroups、namespace、分层文件系统)在Docker之前已经存在很多年。并且,LXC也在诸多企业的生产环境中得到了大量的应用实践,并得到了极为明显的性能优势。Google大规模容器集群的性能比传统虚拟机要高很多,接近于Bare Metal。与传统虚拟机相比,容器集群让这些公司拥有秒级而非分钟级的弹性计算伸缩能力,同时使用更少的机器运行更多实例。

既然容器技术有如此大的优势,为什么Docker之前,容器并没有引发广泛的关注呢?核心的问题在于易用性,而Docker解决了这个问题。

Docker首次创造了一种简单易行并且覆盖应用全生命周期的工作流,用户可以通过简单的指令或Restful API来拉取、打包、运行和维护容器。这种简化从根本上降低了应用程序部署的难度,极大地提高了应用运行时环境的部署与维护的效率。用户可以不依赖类似Ansible、Chef、Puppet这类的配置管理和发布系统,不需要在部署中同时关注基础系统与软件的安装配置,以及应用的安装调试。

Docker提供了一种统一的实践方法,每个服务(或应用)维护一个Dockerfile文件。即便使用编排工具如Docker Compose,一个服务(或应用)也只需维护一个docker-compose.yml文件。应用程序及其运行时环境全部打包到一个简单易读的Dockerfile或Compose文件中,开发团队和运维团队都可以透明地合作维护这个文件,极大降低了沟通成本与部署成本,极大满足了研发团队与DevOps团队、运维团队之间的沟通需求,清晰划分了责任边界。

Docker正以一种前所未有的方式让用户可以在各种Linux发行版、各种开发环境中快速切换,这对应用开发者来说真是一种福音。使用各种开发环境的用户,再也不必担心破坏主机的系统环境(如环境变量)和应用程序。系统架构师们也可以使用Docker来快速搭建各种网络架构的系统,且可以方便地管理这些系统之间的数据连接和共享。目前Docker发展迅速,基于Docker的PaaS平台也层出不穷。这让技术创业者无需折腾服务器部署,只需专注业务代码的实现即可。

真正解决用户痛点,真正带来效率的提升,是一个产品和技术能最终成功的关键!