微服务应用程序... Docker 数据库卷还是没有 Docker 卷?

Microservice Application ... Docker Volume for Databases or no Docker Volume?

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

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

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

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

提前致谢,

大卫·怀特赫斯特

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

这里最重要的注意事项是删除和重新创建容器是相当常规的。如果您使用的软件 运行 或其底层库堆栈存在安全问题,您通常需要获取(或构建)更新的映像,删除现有容器,然后根据新映像重建它。如果数据仅存储在容器内,那么在这种非常常规的删除和重新创建操作期间,存在丢失数据的重大风险。

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

(这里的另一个推论是你没有"back up containers",因为他们没有你关心的任何数据。你备份存储在主机上或[=21=中的数据] 命名的卷,你总是可以从它的图像加上外部数据重新创建容器。)