docker - 如何使用唯一的数据库连接字符串部署同一Docker镜像的许多实例

标签 docker

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

我的问题是有关在部署到云中的群集时为多个客户端配置和维护镜像的最佳做法。

我们想为多个客户使用单个基本镜像,而不是为每个客户维护一个镜像。这意味着对于每个镜像部署,都需要一个新的context.xml(为Tomcat应用程序定义数据库连接字符串),因为每个客户都需要连接到自己的数据库。

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

对于许多运行相同镜像的容器,但每组容器都需要自己的数据库连接字符串的问题,是否有更好的解决方案?还是有一种方法可以利用容器编排来一次更新运行同一实例的所有容器中的context.xml文件?

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

最佳答案

您打算如何跟踪数据库连接字符串?他们需要住在某个地方...

服务是允许您在Pod之间进行通信的服务,并且服务通过选择器将Pod定位到Pod:因此,您可以拥有以Pod类型相同的集群(即您的DB)为目标的Service

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

部署Pod时,您需要知道指向何处。您可以在启动时使用--env=标志将额外的环境变量传递给Pod。

您还可以在Pod中添加标签,如果要真正实现此目的的自动化,则需要某种类型的DB或键值存储来存储以检索
Pod的服务名称,在启动时运行脚本以查找Pod标签是什么,并为其获取数据库字符串。

关于docker - 如何使用唯一的数据库连接字符串部署同一Docker镜像的许多实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338118/

相关文章:

node.js - Deno:在Docker容器上写入CSV文件(权限被拒绝(操作系统错误13))

python - 构建后如何运行Docker命令?

docker - Docker容器以非零退出状态退出

amazon-web-services - 在 AWS 的现有 VPC 中创建 Kubernetes 集群

ubuntu - 在 Docker 中运行 Qt5 GUI

windows - Boot2Docker:无法创建目录:协议(protocol)错误

docker - 使用 Kubernetes 在不同机器上运行 Docker 容器

docker - Visual Studio Dockerfile EntryPoint 覆盖解释?

docker - 如何修复 : yum install with error in docker container?

docker - 防止 Dockerfile 中的 USER root (或至少能够发现它)