Docker 集群化码头工人,由Swarm管理

Docker 集群化码头工人,由Swarm管理,docker,docker-swarm,Docker,Docker Swarm,我是Docker的新手,今天我想问一个问题。 我知道有扩展和binpack策略,旨在平衡“工作量”。 但是,有没有办法通过使用Docker Swarm来提供类似以下拓扑的容器 或者我应该自定义调度程序?或者是否有合适的群集管理工具? 有什么建议吗 更新:此答案适用于传统docker/swarm,而不适用于docker 1.12之后提供的新swarm模式 当在这些机架/机器上启动docker守护进程时,可以通过标签使用Swarm实现这一点 使用标签设置Docker守护进程 假设我们有这种拓扑结构

我是Docker的新手,今天我想问一个问题。 我知道有扩展和binpack策略,旨在平衡“工作量”。 但是,有没有办法通过使用Docker Swarm来提供类似以下拓扑的容器

或者我应该自定义调度程序?或者是否有合适的群集管理工具? 有什么建议吗

更新:此答案适用于传统docker/swarm,而不适用于docker 1.12之后提供的新swarm模式

当在这些机架/机器上启动docker守护进程时,可以通过
标签
使用Swarm实现这一点

使用标签设置Docker守护进程 假设我们有这种拓扑结构:

rack1
  |___ node1

rack2
  |___ node2
  |___ node3
我们可以使用自定义标签设置docker守护进程以反映这一点:

机架1上的节点1

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack1 --label machine=node1`
机架2上的节点2

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack2 --label machine=node2
docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack2 --label machine=node3
机架2上的节点3

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack2 --label machine=node2
docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack2 --label machine=node3
使用约束 使用Swarm,您可以使用约束为您的容器选择位置。在本例中,我们仅使用机架1上的节点子集来调度容器:

docker run -d -P -e constraint:rack==rack1 --name web nginx
假设每个机架有多个节点(例如
rack2
),您还可以链接约束。在下一个示例中,我们将容器固定到
node3
,它位于
rack2

docker run -d -P -e constraint:rack==rack2 -e constraint:node==node3 --name web nginx

不清楚你在问什么,也不清楚图表中不同颜色的含义。当然可以使用docker swarm在多个物理主机上提供docker容器,但我不确定这就是您要问的。谢谢您的回复。让我说得更清楚些。首先,假设任何物理节点上都没有容器。然后要求提供四个容器,就像果岭一样。根据扩展策略,容器可能部署在四个物理节点上,每个节点一个。但我正在寻找另一种策略,它可以帮助我在两个物理节点上部署四个容器,每个物理节点部署两个容器。