如何使用唯一的数据库连接string部署同一个Docker镜像的多个实例

我正在研究利用Docker容器的云部署。 我们的应用程序将使用Apache Tomcat和PostgreSQL数据库。

我的问题是有关在部署到云中的群集时为多个客户端configuration和维护映像的最佳实践。

我们希望为许多客户使用单个基本映像,而不是为每个客户维护一个映像。 这意味着图像的每个部署都会有一个新的context.xml(为Tomcat应用程序定义数据库连接string),因为每个客户都需要连接到自己的数据库。

我知道我可以手动将context.xml文件复制到已部署的容器中,直到我们开始在具有多个副本的集群中运行这些容器。 这将要求我们将此连接string复制到我们创build的每个副本,并在每次使用新版本更新容器时重复此过程。

有更好的解决scheme,这个问题的许多容器运行相同的图像,但每组容器需要自己的数据库连接string? 还是有一种方法可以利用容器编排来更新一次运行同一实例的所有容器中的context.xml文件?

PS。 我已经研究过使用环境variables,但是context.xml文件是静态的,不会从这些variables中加载值。 至less这是我的理解。

你如何计划跟踪数据库连接string? 他们需要居住在某个地方

服务是允许您在Pod之间进行通信的,而服务则是通过select器来定位Pod:因此,您可以针对相同Podtypes的集群(即您的数据库)

如果每个客户都有一个数据库,则需要为每个客户提供一个服务。 现在的问题是将每个App Pod指向正确的Service。

在部署Pod时,您需要知道它指向的位置。 您可以在启动时使用--env=标志将额外的环境variables传递到您的Pod

你也可以添加标签到豆荚,如果你想真正实现自动化,你将需要某种数据库或键值存储来检索豆荚的服务名称,在启动时运行脚本来查找你的豆荚标签并获取它的DBstring。