首页 > 解决方案 > 微服务应用程序......数据库的 Docker 卷或没有 Docker 卷?

问题描述

我有一个应用程序(JHipster Gateway、UAA、注册表、5 个微服务),每个应用程序源构建一个 Docker 映像并推送到 GitLab 注册表。目前我正在使用 Docker-Compose 文件在 Rancher 上运行所有内容。我的 Mongo 数据库卷当前位于每个容器中。

我需要有关卷安装的建议。这是我看到的选项。

  1. 将数据留在容器中并监控和备份
  2. 在主机上使用外部挂载和监控卷。

如果我将 Mongo 数据留在容器中,我是否只是设置为集群,当内部卷填满时,数据库只是扩展?我正在寻找一些解释来帮助我选择内部或外部(在主机上)的 Mongo 数据库挂载?

提前致谢,

大卫湖怀特赫斯特

标签: mongodbdockerjhipsterrancher

解决方案


切勿将您关心的任何数据直接存储在容器中。有很好的论据支持命名卷(Docker 原生,在多主机 Swarm 环境中提供一些支持,更少的主机特定依赖项)和主机绑定挂载(更容易备份和维护,如果需要可以直接检查) 但使用某种已安装的存储。

这里最重要的一点是删除和重新创建容器是相当常规的。如果您正在运行的软件或其底层库堆栈存在安全问题,您通常需要获取(或构建)更新的映像,删除现有容器,然后针对新映像重建它。如果数据只存储在一个容器中,那么在这个非常例行的删除和重新创建操作期间,丢失数​​据的风险很大。

原则上,如果你真的很小心,并且你有一个复制的数据存储,你可以在没有外部卷的情况下滚动它并且不会丢失数据。这很棘手,需要很大的耐心;您将被迫删除一个副本,等待其数据在其他副本之间重新平衡,启动一个新副本,等待它接受一些数据,等等。如果您可以通过停止容器、删除它、使用相同的数据存储启动一个新容器并让它立即提供填充数据来进行点发布,那么管理起来会容易得多。

(这里的另一个推论是您不会“备份容器”,因为它们没有您关心的任何数据。您确实备份了存储在主机或 Docker 命名卷中的数据,并且您始终可以重新创建容器来自其图像加上外部数据。)


推荐阅读