我刚刚开始接触Docker Swarm,因为我们正在寻找配置我们的计算集群以使其更加容器化的方法。
基本上,我们有一个由16台计算机组成的小型服务器场,我希望能够使每个节点下拉相同的镜像,运行相同的容器并接受在主节点上运行的OpenMPI程序中的作业。
真正的OpenMPI并没有什么特别的,只是容器必须能够打开SSH端口,而主服务器必须能够登录到它们。我已经使用单个Docker容器进行了工作,并且它可以工作。
现在,我正在学习Docker Machine和Docker Swarm,作为管理16个节点的一种方式。据我所知,一旦设置了群集,就可以将其设置为DOCKER_HOST(或使用-H)来发送“docker run”,群集管理器将决定哪个节点运行所请求的容器。我基本上使用一个简单的节点列表来工作,而不是与发现服务搞混,到目前为止,一切都很好。
但是我实际上想在一个命令中的所有节点上运行相同的容器。这可能吗?
最佳答案
Docker 1.12引入了全局服务,并传递--mode global
来运行命令Docker将调度服务到所有节点。
使用Docker Swarm可以使用标签和负相似性过滤器来获得相同的结果:
openmpi:
environment:
- "affinity:container!=*openmpi*"
labels:
- "com.myself.name=openmpi"
关于docker - 如何在所有Docker Swarm节点上运行相同的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111050/