Docker 卷是特定于机器的
Are Docker Volumes machine-specific
我是 Docker Swarm 的新手。据我了解,Docker Swarm 允许您从集群中抽象出来。意味着您不关心部署了哪个 hardriwe 容器。
另一方面,在 Docker 中处理数据库的标准方法是将数据写入 Docker 容器之外(以避免写时复制行为)。这是通过安装 Volume 并将与数据库相关的数据写入其中来实现的。这里重要的是 - Volumes 是特定于机器的吗? Docker 和 Docker Swarm 是否足够聪明,可以在需要的机器上安装卷?
示例:
我有3台机器3台microservices/containers。所有这些都是通过 Docker Swarm 部署的。只有一个 microservice/container 必须连接到数据库。所以我只需要在一台机器上挂载 Volume 。但是在哪个?
当谈到 Docker swarm 和其他编排框架时,数据库和类似的有状态应用程序仍然是一件很难处理的事情。理想情况下,容器应该能够 运行 在 swarm 中的任何节点上,但是当您需要在容器的生命周期之外保留数据时就会出现问题。
装载卷是 Docker 持久化数据的方式,但是当在特定节点上创建卷时,这会将容器与特定节点联系起来。有许多项目试图解决这个问题并提供某种分布式存储。
有一个名为 Flocker that deals with the above problem (it’s no longer maintained). There is also a newer project called REXRAY 的项目。
Are Docker & Docker Swarm clever enough to mount a Volume on the machine it's needed?
默认情况下,没有。 Docker swarm 将选择其中一个节点并在其上部署容器。但是,您可以解决此问题:
首先,您需要在服务定义下Stackfile/Composefile定义一个命名卷。
其次,您需要使用节点 Placement Constraints 来限制数据库容器应该 运行.
的位置
如果您没有分布式存储工具,那么当涉及到需要卷的数据库和类似有状态容器时,您需要将容器限制在特定节点上。
我是 Docker Swarm 的新手。据我了解,Docker Swarm 允许您从集群中抽象出来。意味着您不关心部署了哪个 hardriwe 容器。
另一方面,在 Docker 中处理数据库的标准方法是将数据写入 Docker 容器之外(以避免写时复制行为)。这是通过安装 Volume 并将与数据库相关的数据写入其中来实现的。这里重要的是 - Volumes 是特定于机器的吗? Docker 和 Docker Swarm 是否足够聪明,可以在需要的机器上安装卷?
示例:
我有3台机器3台microservices/containers。所有这些都是通过 Docker Swarm 部署的。只有一个 microservice/container 必须连接到数据库。所以我只需要在一台机器上挂载 Volume 。但是在哪个?
当谈到 Docker swarm 和其他编排框架时,数据库和类似的有状态应用程序仍然是一件很难处理的事情。理想情况下,容器应该能够 运行 在 swarm 中的任何节点上,但是当您需要在容器的生命周期之外保留数据时就会出现问题。
装载卷是 Docker 持久化数据的方式,但是当在特定节点上创建卷时,这会将容器与特定节点联系起来。有许多项目试图解决这个问题并提供某种分布式存储。
有一个名为 Flocker that deals with the above problem (it’s no longer maintained). There is also a newer project called REXRAY 的项目。
Are Docker & Docker Swarm clever enough to mount a Volume on the machine it's needed?
默认情况下,没有。 Docker swarm 将选择其中一个节点并在其上部署容器。但是,您可以解决此问题:
首先,您需要在服务定义下Stackfile/Composefile定义一个命名卷。 其次,您需要使用节点 Placement Constraints 来限制数据库容器应该 运行.
的位置如果您没有分布式存储工具,那么当涉及到需要卷的数据库和类似有状态容器时,您需要将容器限制在特定节点上。