gpt4 book ai didi

docker - 在 docker 中的容器之间共享数据库的最佳实践是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:40:54 25 4
gpt4 key购买 nike

有谁知道在 docker 中的容器之间共享数据库的最佳实践是什么?

我的意思是我想在 docker 中创建多个容器。然后,这些容器将以相同的身份在同一个数据库上执行 CRUD。

到目前为止,我有两个想法。一种是仅仅创建一个单独的容器来运行数据库。另一种是直接在安装了 docker 的主机上安装数据库。

哪个更好?或者,对于此要求是否有任何其他最佳实践?

谢谢

最佳答案

很难回答“最佳实践”问题,因为这是一个见仁见智的问题。 Stack Overflow 上的观点与主题无关。

所以我将给出一个具体的例子来说明我在一个严肃的部署中已经做了什么。

我正在运行 ELK(Elasticsearch、Logstash、Kibana)。它是容器化的。

对于我的数据存储,我有存储容器。这些存储容器包含一个本地文件系统传递:

docker create -v /elasticsearch_data:/elasticsearch_data --name ${HOST}-es-data base_image /bin/true

我还使用 etcdconfd 来动态重新配置指向数据库的服务。 etcd 让我存储键值,所以在一个简单的级别:

CONTAINER_ID=`docker run -d --volumes-from ${HOST}-es-data elasticsearch-thing`
ES_IP=`docker inspect $CONTAINER_ID | jq -r .[0].NetworkSettings.Networks.dockernet.IPAddress`
etcdctl set /mynet/elasticsearch/${HOST}-es-0

因为我们在 etcd 中注册了它,然后我们可以使用 confd 来观察 key-value 存储,监控它的变化,并重写并重新启动我们的 其他 容器服务。

我有时会为此使用 haproxy,而当我需要更复杂的东西时使用 nginx。这两者都允许您指定要“发送”流量的主机集,并具有一些基本的可用性/负载平衡机制。

这意味着我可以非常懒惰地重新启动/移动/添加 Elasticsearch 节点,因为注册过程会更新整个环境。 openshift 使用了与此类似的机制。

所以专门回答你的问题:

  • DB 被封装在一个容器中,原因与其他元素相同。
  • 用于数据库存储的卷是通过本地文件系统传递的存储容器。
  • “查找”数据库是通过父主机上的 etcd 完成的,但除此之外,我已将安装占用空间降至最低。 (我有一个用于 docker 主机的通用“安装”模板,并尽量避免在其中添加任何额外内容)

我的意见是,如果您依赖于具有(特定)数据库实例的本地主机,那么 docker 的优势将大大削弱,因为您不再具有打包的能力-test-deploy,或在几分钟内“启动”一个新系统。

(上面的例子 - 我字面意思在 10 分钟内重建了整个东西,其中大部分是 docker pull 传输图像)

关于docker - 在 docker 中的容器之间共享数据库的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35597579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com