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

时间:2019-08-06 23:07:18

标签: mongodb docker jhipster rancher

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

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

  1. 将数据保留在容器中并进行监视和备份
  2. 使用外部安装并监视主机上的卷。

如果我将Mongo数据保留在容器中,是否只是将其设置为仅群集,并且当内部卷填满时,数据库是否会扩展?我正在寻找一些说明,以帮助我选择内部或外部(在主机上)Mongo数据库装载?

预先感谢

David L. Whitehurst

1 个答案:

答案 0 :(得分:1)

永远不要将您关心的任何数据直接存储在容器中。对于命名卷(Docker本地,多主机Swarm环境中的某些支持,主机特定的依存关系更少)和主机绑定装载(更容易备份和维护,可以在需要时直接进行检查)都有很好的论据),但使用某种某种已挂载的存储。

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

原则上,如果您真的很小心,并且您具有复制的数据存储,则可以在没有外部卷的情况下进行翻转,并且不会丢失数据。这很棘手,需要很多耐心。您将被迫拆除一个副本,等待其数据在其他副本之间重新平衡,启动一个新副本,等待它接受某些数据,依此类推。如果您可以通过停止容器,删除容器,使用相同的数据存储启动一个新容器并立即将其与已填充的数据一起使用来释放点,那将更容易管理。

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