本节书摘来自异步社区《第一本Docker书(修订版)》一书中的第1章,第1.4节,作者:【澳】James Turnbull(詹姆斯•特恩布尔)著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.4 Docker与配置管理
从Docker项目公布以来,已经有大量关于“哪些配置管理工具适用于Docker”的讨论,如Puppet、Chef。Docker包含一套镜像构建和镜像管理的解决方案。现代配置管理工具的原动力之一就是“黄金镜像”模型[8]。然而,使用黄金镜像的结果就是充斥了大量、无管理状态的镜像:已部署或未部署的复杂镜像数量庞大,版本状态混乱不堪。随着镜像的使用,不确定性飞速增长,环境中的混乱程度急剧膨胀。镜像本身也变得越来越笨重。最终不得不手动修正镜像中不符合设计和难以管理的配置层,因为底层的镜像缺乏适当的灵活性。
与传统的镜像模型相比,Docker就显得轻量多了:镜像是分层的,可以对其进行迅速的迭代。数据表明,Docker的这些特性确实能够减轻许多传统镜像管理中的麻烦。现在还难以确定Docker是否可以完全取代配置管理工具,但是从幂等性和内省性来看,Docker确实能够获得非常好的效果。Docker本身还是需要在主机上进行安装、管理和部署的。而主机也需要被管理起来。这样,Docker容器需要编配、管理和部署,也经常需要与外部服务和工具进行通信,而这些恰恰是配置管理工具所擅长的。
Docker一个显著的特点就是,对不同的宿主机、应用程序和服务,可能会表现出不同的特性与架构(或者确切地说,Docker本就是被设计成这样的):Docker可以是短生命周期的,但也可以用于恒定的环境,可以用一次即销毁,也可以提供持久的服务。这些行为并不会给Docker增加复杂性,也不会和配置管理工具的需求产生重合。基于这些行为,我们基本不需要担心管理状态的持久性,也不必太担心状态的复杂性,因为容器的生命周期往往比较短,而且重建容器状态的代价通常也比传统的状态修复要低。
然而,并非所有的基础设施都具备这样的“特性”。在未来的一段时间内,Docker这种理想化的工作负载可能会与传统的基础设备部署共存一段时间。长期运行的主机和物理设备上运行的主机在很多组织中仍具有不可替代的地位。由于多样化的管理需求,以及管理Docker自身的需求,在绝大多数组织中,Docker和配置管理工具可能都需要部署。