Docker群有一些共享卷

时间:2018-07-10 15:15:57

标签: docker docker-compose docker-swarm

我将尝试描述所需的功能:
我在docker swarm上运行docker-compose 在docker-compose中,我提供了服务,为简单起见,我们将其称为ABC

假设C服务(包括共享代码模块)需要可访问服务AB

我的问题是:
1.每个需要访问共享卷的服务都必须将C服务安装到其自己的本地文件夹中(使用下面的“卷”部分),或者无需安装/复制到本地容器中的路径就可以访问该服务。

  1. 在docker群中,服务AB的2个实例将驻留在计算机X中,而服务C的驻留在计算机{{1 }}。 确实是因为所有服务都在同一个docker Y下维护,所以它们将与服务swarm stack毫无问题地进行通信。

如果不是,则必须达到哪些定义? 我的结构是这样的:

C

2 个答案:

答案 0 :(得分:1)

如果您共享的是 code ,则应将其构建到实际的Docker映像中,而不要为此使用卷。

您将遇到两个大问题。一种是在多主机安装中正确共享卷。第二个是长期问题:如果共享代码更改,您将怎么办?您不能只是使用共享代码重新部署C模块,因为保存该代码的卷已经存在;您需要分别更新卷中的代码,重新启动相关服务,并希望它们都能正常工作。实际上,将代码烘焙到映像中后,可以在尝试部署它之前测试完整的设置。

答案 1 :(得分:1)

共享代码是Swarm这样的分布式模型中的反模式。就像David所说的那样,即使有重复的数据,您也需要图像构建中的代码。有很多方法可以使图像建立在其他图像之上,以限制重复数据。

如果仍然需要在文件系统上的群集中的容器之间共享数据,则需要查看一些共享存储,例如AWS EFS(多节点读/写)和REX-Ray,以将数据存储到正确的容器。

此外,depends_on不能大量使用。分布式系统中的应用程序需要以可预测的方式处理与其他服务之间缺乏连接的情况。也许它们只是退出(并且swarm将重新创建它们)或进入代码中的重试循环,等等。depends_on意味着要在本地docker-compose cli中开发您想要启动应用程序及其依赖项通过执行类似docker-compose up api的操作。