Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@SightSeekerTw

Docker Compose with Swarm 指定したノードでコンテナを起動させる方法

More than 3 years have passed since last update.

概要

複数のノードで Docker Swarm を使用してクラスタを組織している場合、クラスタに参加しているノードはそれぞれスペックが異なったり、単純に役割を分けたかったりなど様々な理由でコンテナ(サービス)を起動させたいノードを縛りたい要求がある。
この要件に対応する docker-compose.yml の記述方法を以下に記載。

Compose file version 3 reference 等を読み込むと確かにわかるんでしょうが、わかりにくかったので自分なりの整理で書いときます。

システム要件

Swarmモード で Docker Compose が利用できるようになった Docker Engine のバージョン 1.13 (Composeバージョン3)以降。

ノードにラベルを付けて起動するノードを限定する方法

Docker Swarm に JOIN しているノードあるいは、JOINさせるノードにはラベルをつけることができる。
ここでは、Webサーバ専用クラスタのノードとしてあつかい、そのノードでだけ nginx が起動するように設定する方法を書いてみる。

1. ノードにラベルを付ける

docker node update --label-add type=web <NODE_ID | HOSTNAME>

2. docker-compose.yml でコンテナが起動するノードが指定されたラベルのものにさせる

deployplacementconstraints 属性があるので、ここに条件を書くことができる。
node.labels.<LABEL_NAME> == <VALUE> と書くとノードにつけたラベルの指定ができました。
ここでは、1.で付けたラベル type が web のものであることを条件として書いてあります。

docker-compose.yml
version: '3'
services:
    web:
        image: nginx
        deploy:
          placement:
            constraints:
              - node.labels.type == web

起動するWorkerノードに限定する方法

ごく一般的な要件で、公式ドキュメントにも書いてありますが、一応書いときます。
node.role == worker とすると workerノードでしかコンテナが上がらないようになります。

docker-compose.yml
version: '3'
services:
    web:
        image: nginx
        deploy:
          placement:
            constraints:
              - node.role == worker

課題

== といった記述ができるってことは、他の条件もかけるのではなかろうか。。。数値だったら、不等号なども利用できるのだろうか。。。
まだ必要にかられていないので、調べたり試したりしてませんが、きっと行けるはず。

また、labelsrole以外の nodeオブジェクトの子要素や、node以外のオブジェクトの参照も可能っぽいが、どういうものが参照可能なのかは調べてないですが、いろいろ書けそうです。
詳しくは、Specify service constraints (–constraint) 参照。

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?