我可以理解dockerizing无状态服务背后的好处,例如Web服务器,应用程序服务器,负载平衡器等等......如果您在一组计算机上运行这些服务,那么很容易将这些容器移动到低位高架。我不明白的是容器化数据库背后的目的是什么?数据库连接到在特定硬盘中持久存在的数据卷。由于状态,实际移动数据库容器并不容易,效率也不高。所以任何人都可以看到为什么docker化数据库可能有用呢?
答案 0 :(得分:27)
“所以任何人都可以看到为什么对数据库进行docker化很有用?”
好问题基多。容纳数据库的主要原因之一是,您可以为整个应用程序提供相同的一致环境,而不仅仅是无状态部分,跨开发,分段和生产。一致的环境是docker的承诺之一,但是当您的数据库不在此模型之外时,在测试中存在很大的差异。此外,通过容纳您的数据库以及应用程序的其余部分,您更有可能在托管服务提供商之间移动整个应用程序(例如从AWS到Google Compute)。例如,如果您使用Amazon RDS,即使您可以将Web节点移动到Google,也无法移动数据库,这意味着您严重依赖于云提供商。
容纳数据服务的另一个原因是性能。对于服务提供商(所有数据库作为服务产品 - 例如rackspace cloud databases - 在容器中运行)尤其如此,因为容器允许您提供使用虚拟化无法实现的服务保证,并且每个物理运行一个数据库机器在经济上不可行。您可能没有运行数据库托管服务,但如果您在裸机上运行并希望使用容器进行进程隔离而不是VM,则这种类比具有类似的意义。您将获得更好的数据库性能,因为您在VM中运行数据库时会有一个众所周知的i / o命中。
我并不是说你应该将数据库容器化,但这些是为什么它有意义的原因。
完全披露,我为clusterhq工作,这是Mark O'connor在他的回答中提到的新项目。我们有一个名为Flocker的开源项目,它使主机之间的数据库及其卷的迁移变得更加容易,因此我在上面提到的好处并没有完全被您在问题中提出的否定所抵消。
答案 1 :(得分:12)
不确定我是否同意您对效率的评论...与本机安装相比,下载和运行数据库容器要容易得多。 docker文档描述了如何在有状态容器及其数据之间实现干净的逻辑分离:
但是......你是正确的,有状态的容器将绑定到它的主机服务器,除非有一些机制来移植数据。
一个明显的解决方案是在可能正在运行数据库的所有主机上安装共享存储卷。
以下文章讨论了一种非常创新的解决方案,其中使用类似bittorrent的客户端在主机之间复制数据容器。
最后,一个名为flocker的新项目试图通过管理有状态容器及其关联的ZFS卷来解决这个问题:
答案 2 :(得分:0)
这是一个很好的主题,SQL Server克隆的最新进展将增加使用带有克隆的容器的附加功能。这解决了与大数据集协同工作的一些问题。完全披露,我为Windocks工作,我们已经发布了带有集成数据库克隆的SQL Server容器2.0。