我可以理解对Docker进行无状态服务(例如Web服务器,应用服务器,负载平衡器等)背后的好处。如果您在机器集群上运行这些服务,则很容易以低开销移动这些容器。我不明白容器化数据库的目的是什么?数据库连接到持久存储在特定硬盘中的数据卷。由于状态的原因,实际移动数据库容器并不容易,效率也不高。那么,谁能看到为什么对数据库进行dockerdocker完全有用?
“那么,有谁能看到为什么对数据库进行码头处理完全有用?”
好问题Keeto。容器化数据库的主要原因之一是,您可以为整个应用程序(而不只是无状态部分)在开发,登台和生产中都拥有相同的一致环境。一致的环境是docker的承诺之一,但是当您的数据库不在此模型范围内时,存在很大的差异,无法在测试中解决。另外,通过容器化数据库以及应用程序的其余部分,您更有可能在托管提供商之间移动整个应用程序(例如,从AWS到Google Compute)。例如,如果您使用Amazon RDS,则即使您可以将Web节点移动到Google,也将无法移动数据库,这意味着您严重依赖于云提供商。
容器化数据服务的另一个原因是性能。对于服务提供商(所有数据库即服务产品,例如机架式云数据库,都在容器中运行)尤其如此,因为容器允许您提供使用虚拟化无法实现的服务保证,并且每台物理机运行一个数据库是在财务上不可行。您可能没有运行数据库托管服务,但是如果您在裸机上运行并且想要使用容器而不是VM进行进程隔离,则这种类比也有类似的含义。由于在VM中运行数据库时遇到的众所周知的I / O攻击,您将获得更好的数据库性能。
我并不是说您应该对数据库进行容器化,但这是为什么它有意义的一些原因。
完全公开,我为clusterhq工作,这是Mark O’connor在回答中提到的那个新项目。我们有一个名为Flocker的开源项目,该项目使在主机之间迁移数据库及其卷变得更加容易,这样,您在问题中提出的缺点并没有完全抵消我上面提到的好处。