我是Docker Swarm的新手。据我所知,Docker Swarm允许您从群集中抽象出来。意味着您不关心部署哪个hardriwe容器。
另一方面,在Docker中处理数据库的标准方法是在Docker容器外部写入数据(以避免写入时复制行为)。这是通过挂载Volume并向其写入与db相关的数据来实现的。这里重要的是 - 是针对机器特定的吗?是Docker& Docker Swarm足够聪明,可以在需要的机器上安装一个卷吗?
示例:
我有3台机器和3个微服务/容器。所有这些都是通过Docker Swarm部署的。只有一个微服务/容器必须连接到数据库。所以我只需要在一台机器上安装Volume。但是在哪个?
答案 0 :(得分:1)
当谈到Docker swarm和其他编排框架时,数据库和类似的有状态应用程序仍然很难处理。理想情况下,容器应该能够在群集中的任何节点上运行,但是当您需要将数据保留在容器的生命周期之外时,就会出现问题。
挂载卷是Docker保存数据的方法,但是当在特定节点上创建卷时,这会将容器与特定节点联系起来。有许多项目试图解决此问题并提供某种分布式存储。
有一个名为Flocker的项目处理上述问题(不再维护)。还有一个名为REXRAY的新项目。
是Docker& Docker Swarm足够聪明,可以在它需要的机器上安装一个卷吗?
默认情况下,没有。 Docker swarm将选择其中一个节点并在其上部署容器。但是,您可以解决此问题:
首先,您需要在服务定义下的Stackfile / Composefile中定义命名卷。 其次,您需要使用节点Placement Constraints来限制数据库容器应该运行的位置。
如果您不是分布式存储工具,那么当涉及到需要卷的数据库和类似的有状态容器时,您需要将容器限制为特定节点。