dockerize(containerize)数据库有意义吗?

我可以理解dockerizing无状态服务背后的优点,比如web服务器,appservers,负载平衡器等等。如果你在一个机器集群上运行这些服务,那么移动这些容器很容易,开销很小。 我不明白的是集装箱数据库的目的? 数据库连接到在特定硬盘中持久存储的数据卷。 由于状态,实际移动数据库容器并不容易,效率也不高。 所以任何人都可以看到为什么dockerizing数据库可以有用吗?

“那么谁能明白为什么dockerizing数据库可以有用呢?”

好的问题Keeto。 将数据库容器化的一个主要原因是,您可以为整个应用程序提供相同的一致性环境,而不仅仅是无状态的部分,跨开发,分段和生产。 一个一致的环境是docker的承诺之一,但是当你的数据库超出这个模型时,有一个很大的差别,在你的testing中是无法解释的。 另外,通过容器化数据库以及应用程序的其他部分,您更有可能在托pipe提供商(例如从AWS到Google Compute)之间移动您的整个应用程序。 例如,如果您使用Amazon RDS,即使您可以将networking节点移动到Google,也无法移动数据库,这意味着您严重依赖于您的云提供商。

容器化数据服务的另一个原因是性能。 对于服务提供者(所有数据库作为服务产品,例如机架空间云数据库 ,在容器中运行),尤其如此,因为容器允许您提供使用虚拟化无法实现的服务保证,并且每个物理机器运行一个数据库没有财务上的可行性。 你可能没有运行一个数据库托pipe服务,但是这个类比在你使用裸机运行并且希望使用容器进行进程隔离而不是使用虚拟机的时候也是类似的。 在数据库中运行数据库时,由于众所周知的I / O命中,您将获得更好的数据库性能。

我并不是说你应该容纳你的数据库,但这些就是为什么它是合理的。

我完全公开了,我为clusterhq工作,Mark O'connor在他的回答中提到的新项目。 我们有一个名为Flocker的开源项目,它使得在主机之间迁移数据库及其卷更加容易,因此您在问题中提出的否定性不会完全超过上面提到的好处。

不确定我是否同意你对效率的评论…与本地安装相比,下载和运行数据库容器要容易得多。 docker文档介绍了如何在有状态容器和数据之间实现一个干净的逻辑分隔:

但是……你是正确的,一个有状态的容器将被绑定到它的主机服务器,除非有一些机制来移植数据。

一个明显的解决scheme是在可能运行数据库的所有主机上安装共享存储卷。

下面的文章讨论了一个非常有创意的解决scheme,在这个解决scheme中,一个类似Bittorrent的客户端用于在主机之间复制数据容器。

最后,一个名为Flocker的新项目正在尝试通过pipe理有状态的容器及其关联的ZFS卷来解决这个问题:

这是一个很好的线程,SQL Server克隆中的最新进展将增加使用容器与克隆的附加function。 这解决了大数据集工作的一些问题。 充分的披露,我为Windocks工作,在那里我们已经发布了2.0与集成数据库克隆的SQL Server容器。