集群化Docker并由Swarmpipe理

我是Docker的新手,今天我想知道一个问题。 我知道有传播和binpack策略是打算平衡“工作量”。 但有没有什么办法通过使用Docker,Swarm来configuration像下面的拓扑一样的容器?

在这里输入图像说明

或者我应该自定义调度程序? 还是有没有适合的集群pipe理工具? 有什么build议吗?

更新 :这个答案适用于传统的docker/群,而不适用于Docker 1.12以后的新Swarm模式

在这些机架/机器上启动docker守护进程时,可以通过Swarm通过labels来实现这一点。

用标签设置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 

机架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=node3 

使用约束

使用Swarm,您可以使用约束来获取容器的位置。 在这个例子中,我们只使用机架1上的节点子集来调度我们的容器:

 docker run -d -P -e constraint:rack==rack1 --name web nginx 

假设每个机架有多个节点(例如rack2 ),您也可以链接限制。 在下一个示例中,我们将容器固定到位于rack2上的rack2

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