更新: この回答はレガシー docker/swarm に適用され、docker 1.12 以降に利用可能な新しいSwarm モードには適用されません。
labels
これらのラック/マシンで 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
ラック 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
たとえば)、制約をチェーンすることもできます。次の例では、 にnode3
配置されているコンテナを固定しrack2
ます。
docker run -d -P -e constraint:rack==rack2 -e constraint:node==node3 --name web nginx