新应用程序版本的Docker部署工作流而不丢失数据库状态?

新应用程序版本的Docker部署工作流而不丢失数据库状态?,docker,Docker,我有一个名为A的应用程序,它使用MongoDB作为状态。我的计划是使用Docker,可能为应用程序创建一个容器,为MongoDB创建一个容器,然后将A链接到MongoDB(可能使用图)。据我所知,我应该为MongoDB状态使用数据卷或“仅数据容器”。但如果我理解正确,您可以链接到一个图像(本例中为MongoDB图像)。这是否意味着在部署新版本的时需要重新启动MongoDB 我想做的是在不失去MongoDB状态和(可能)不关闭MongoDB的情况下将更改部署到(A')。如果没有Docker,我只需

我有一个名为A的应用程序,它使用MongoDB作为状态。我的计划是使用Docker,可能为应用程序创建一个容器,为MongoDB创建一个容器,然后将A链接到MongoDB(可能使用图)。据我所知,我应该为MongoDB状态使用数据卷或“仅数据容器”。但如果我理解正确,您可以链接到一个图像(本例中为MongoDB图像)。这是否意味着在部署新版本的时需要重新启动MongoDB


我想做的是在不失去MongoDB状态和(可能)不关闭MongoDB的情况下将更改部署到(A')。如果没有Docker,我只需要关闭一个并部署一个,然后让它连接到同一个MongoDB实例(该实例仍在运行)。如果在负载平衡器后面运行多个实例,这一点尤其重要。如何使用Docker基础设施以良好的方式实现这一点?仅当我运行单个实例时链接是一个好选项吗?

只有当MongoDB和/或数据容器链接到容器a时,才需要重新启动它们。因此,在您的情况下,我将遵循以下步骤:

  • 启动“数据卷容器”,为数据装入一个卷
  • 启动MongoDB容器,使用docker选项
    --volumes from
    访问第一个容器的数据
  • 启动应用程序容器A,链接到MongoDB容器

  • 不需要重新启动数据或MongoDB容器,因为它们没有直接链接到您的容器应用程序。

    只有当它们链接到容器A时,您才需要重新启动MongoDB和/或数据容器。因此,在您的情况下,我将遵循以下步骤:

  • 启动“数据卷容器”,为数据装入一个卷
  • 启动MongoDB容器,使用docker选项
    --volumes from
    访问第一个容器的数据
  • 启动应用程序容器A,链接到MongoDB容器

  • 不需要重新启动数据或MongoDB容器,因为它们没有直接链接到您的容器应用程序。

    只有当它们链接到容器A时,您才需要重新启动MongoDB和/或数据容器。因此,在您的情况下,我将遵循以下步骤:

  • 启动“数据卷容器”,为数据装入一个卷
  • 启动MongoDB容器,使用docker选项
    --volumes from
    访问第一个容器的数据
  • 启动应用程序容器A,链接到MongoDB容器

  • 不需要重新启动数据或MongoDB容器,因为它们没有直接链接到您的容器应用程序。

    只有当它们链接到容器A时,您才需要重新启动MongoDB和/或数据容器。因此,在您的情况下,我将遵循以下步骤:

  • 启动“数据卷容器”,为数据装入一个卷
  • 启动MongoDB容器,使用docker选项
    --volumes from
    访问第一个容器的数据
  • 启动应用程序容器A,链接到MongoDB容器

  • 无需重新启动数据或MongoDB容器,因为它们没有直接链接到您的容器应用程序。

    在docker容器内运行数据库有点粗略,而让App a在docker容器内运行,而让DB在docker容器外运行。这是为什么?我在Docker内部的数据库网络上看到了很多例子?(Mongo、MySQL、Redis仅举几个例子)如果我可以引用Google和Red Hat的一些首席工程师以及我与之交谈过的一些私人咨询架构师的话,如果你想在晚上安睡,不要将数据/db放在docker中。对于实验来说,这很好,对于生产来说,当您杀死一个容器时,很容易丢失数据,当您停止一个容器时,很容易损坏数据库。如果您真的想在docker容器中运行数据库,至少要装载一个卷,以便数据位于容器外部,否则很容易丢失数据。在docker容器中运行数据库可能会出现重复,这有点粗略,而是在docker容器内运行应用程序A,在docker容器外运行数据库。为什么?我在Docker内部的数据库网络上看到了很多例子?(Mongo、MySQL、Redis仅举几个例子)如果我可以引用Google和Red Hat的一些首席工程师以及我与之交谈过的一些私人咨询架构师的话,如果你想在晚上安睡,不要将数据/db放在docker中。对于实验来说,这很好,对于生产来说,当您杀死一个容器时,很容易丢失数据,当您停止一个容器时,很容易损坏数据库。如果您真的想在docker容器中运行数据库,至少要装载一个卷,以便数据位于容器外部,否则很容易丢失数据。在docker容器中运行数据库可能会出现重复,这有点粗略,而是在docker容器内运行应用程序A,在docker容器外运行数据库。为什么?我在Docker内部的数据库网络上看到了很多例子?(Mongo、MySQL、Redis仅举几个例子)如果我可以引用Google和Red Hat的一些首席工程师以及我与之交谈过的一些私人咨询架构师的话,如果你想在晚上安睡,不要将数据/db放在docker中。对于实验来说,这很好,对于生产来说,当您杀死一个容器时,很容易丢失数据,当您停止一个容器时,很容易损坏数据库。如果您真的想在docker容器中运行数据库,至少要装载一个卷,以便数据位于容器外部,否则很容易丢失数据。在docker容器中运行数据库可能会出现重复,这有点粗略,而是在docker容器内运行应用程序A,在docker容器外运行数据库。为什么?我看到了很多例子