Docker卷是特定于计算机的

我是Docker Swarm的新手。 据我所知,Docker Swarm允许你从集群中抽象出来。 意味着你不关心硬件容器的部署。

另一方面,在Docker中处理数据库的标准方法是在Docker容器之外写入数据(以避免写时复制行为)。 这是通过挂载一个卷并写入数据库相关的数据来实现的。 这里最重要的是Volumes机器特定的? Docker和Docker Swarm是否足够聪明,能够在需要的机器上安装卷?

例:

我有3台机器和3个微服务/容器。 所有这些都通过Docker Swarm进行部署。 只有一个微服务/容器必须连接到数据库。 所以我只需要在一台机器上安装卷 。 但在哪?

数据库和类似的有状态应用程序在Docker swarm和其他编排框架方面仍然是一件很难处理的事情。 理想情况下,容器应该能够在群集中的任何节点上运行,但是当你需要在容器的生命周期之外持久化数据时,问题就出现了。

装入卷是Docker保存数据的方式,但是,由于卷是在特定节点上创build的,因此这会将容器与特定节点关联起来。 有很多项目试图解决这个问题,并提供某种分布式存储。

有一个名为Flocker的项目,处理上述问题(不再维护)。 还有一个叫做REXRAY的新项目。

Docker和Docker Swarm是否足够聪明,能够在需要的机器上安装卷?

默认情况下,不。 Docker群将select其中一个节点并在其上部署容器。 但是,您可以解决此问题:

首先,您需要在服务定义下的Stackfile / Composefile中定义一个命名的卷。 其次,您需要使用节点放置约束来限制数据库容器的运行位置。

如果你不是分布式存储工具,那么当涉及到需要卷的数据库和类似的有状态容器时,你需要限制容器到一个特定的节点。