我习惯于以“传统”的方式构建网络应用程序,但我正在尝试使用docker来解决问题。如果我和我的python web应用程序一起在容器中运行postgres,这是否与旋转数字海洋服务器并从头开始安装postgres相同?如何使用docker中的postgres数据库处理备份,容错等?
作为替代方案,我通常在Heroku或AWS上使用托管的postgres。这不能解决我在docker中托管postgres时会遇到的很多问题吗?开发人员真的在docker中运行postgres,还是他们通常更喜欢使用外部托管服务?
答案 0 :(得分:3)
目前明智的做法是在Docker中保留无状态服务或一次性工作,而不是像数据库那样放置任何有状态服务。
mesosphere最近的这篇文章详细介绍了为什么不是这种情况。
一个问题是,编排技术还没有满足有状态服务的高要求。引用:
第一个挑战是资源隔离。市场上的许多容器编排解决方案都提供了最佳的资源分配方法,包括内存,CPU和存储。虽然这对于无状态应用程序可能没问题,但对于有状态服务可能是灾难性的,其中性能损失可能导致客户交易或数据丢失。
另一个原因是有状态数据库的构建方式与容器使用的假设不同,并且针对它们进行了大量优化。再次引用:
今天的大多数有状态数据库技术最初是为非容器化世界设计的。操作说明非常特定于技术,有时可能是特定于版本的。尝试将容器编排平台的通用基元映射到有状态服务通常是耗时且容易出错的操作。
答案 1 :(得分:0)
你可以在Docker中完全运行你的postgres实例。但它需要一些工作来处理备份,容错等。
在我的公司,至少现在我们已经选择不将数据库放在Docker中。