一个Docker容器可以有一个或多个数据库

31

假设我有几个不同的容器,每个容器都使用自己的数据库。在这种情况下,关于性能,最佳实践是什么?将所有数据库放在一个容器中运行,比如一个MySQL服务器,还是为每个数据库运行一个数据库服务器容器?

除了性能之外,欢迎提出任何其他评论。


1
性能规则#1 - CPU / HDD 执行的工作越少,结果就越快。 - Mjh
2个回答

12
由于Docker容器的开销在这里不重要且可以忽略,所以问题更多地涉及微服务范式下的架构。
性能确实是一个复杂的问题,没有通用建议,但以下内容可能会对您有所帮助:
个人认为,在项目开始时,不应该尝试预先解决所有可能的性能问题(#MVP,#敏捷)。 然而,请纠正我,但看起来您没有太多资源(只有一台主机?)并且想提前节约这些资源。
好的,那么您现在最担心什么?
RAM是一个问题
那么,在同一主机上运行两个并发的MySQL实例可能不是很好(但对于不同的设置不是问题)
对于一个主机,我建议开始使用一个数据库容器,但创建不同的模式。这可能需要通过标准容器进行额外的工作。(https://forums.docker.com/t/multiple-databases-in-official-mysql-container/8324)
其他问题

我建议从一开始就使用分离的数据库,这对于将服务水平分离到数据库中具有巨大的价值!我不想因为非常理论的未来性能问题而削弱这个设计决策。


我的问题既不是内存也不是性能。目前我在Ubuntu 14.04服务器上为5个应用程序提供服务,使用7个容器,它们运行得非常好。我想知道什么是最佳实践,因为在不久的将来,我将为20或30个应用程序(5-10个数据库)提供服务,可能会出现性能问题。以“正确”的方式部署应用程序可以在未来节省很多麻烦。 通过内存,我猜你指的是RAM,鉴于Docker使用的内存对于HDD来说微不足道,对吗? - StLia
1
是的,我的意思是RAM。这是我会关注的重点。并且没有“正确”的方式,你可以主张其中一种,它取决于你在“内存”论据上施加的权重或者你迄今为止实现的“更清洁”和更隔离的设计。 - aholbreich

0

您需要使用一个单一的数据库服务器,最好运行一个可以附加到进行管理的 shell,共享 Unix socket、端口或两者都连接到链接的容器。这意味着您将更轻松地将数据库容器管理为服务,调整性能、监控使用情况、备份卷等。

当然,可能会有非标准情况,您可能希望拥有独立的服务器,例如运行具有隔离主机资源、用户、数据库的服务器,但我确信这不适用于开发人员环境。


很抱歉,对我来说是-1。"使用隔离主机资源运行服务器...不应该适用于开发环境"这种说法非常不正确。我之所以使用Docker,正是因为它在我的系统上进行了隔离,我花费的时间要比老板看到的活动Dev部署少得多,以便调试环境设置的废话。如果你编写的代码最终依赖于使用同一台服务器怎么办?这可能很难追踪,特别是如果你必须等待每个临时调试更改之间的CI/CD。 - RoboticRenaissance
如果您仍在开发机器上运行所有内容,而服务器已经运行了几年的所有内容,然后您的老板决定您需要将Wordpress网站和API的托管分开,这两者都访问同一容器上的数据库,那该怎么办?突然间,实时开发服务器不再工作,如果您仍在一起运行它们,您就无法弄清原因。 - RoboticRenaissance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接