CookBook

Docker Swarm を利用して Resin のクラスタリングを構築する。

投稿日:2018-08-02 更新日:

この CookBook では、Docker Swarm を利用して Resin のクラスタリングを構築する手順について紹介しています。
Docker Swarm を利用することで、複数マシンにまたがった仮想 Docker ネットワークを定義し、そのネットワーク上にコンテナをデプロイすることでクラスタリング環境を構築することができます。

レシピ

  1. Docker Swarm Manager を作成する
  2. Docker Swarm クラスタに参加する
  3. Swarm 用 Docker Overlay Network を作成する
  4. Resin の Docker Image を作成する
  5. Swarm クラスタに Resin タスクをデプロイする

この CookBook では 2 台のマシンを利用します。

1 台目 2 台目
名前 マシン A マシン B
役割 Docker Swarm Manager Docker Swarm Worker
プライベート IP アドレス 192.168.0.2 192.168.0.3

マシン A を Docker Swarm クラスタのマネージャーとします。
マシン B をマシン A のクラスタに参加するノードとします。

1. Docker Swarm Manager を作成する

マシン A 上で以下のコマンドを実行します。

以下のような実行結果が返却されます。

エラーが出た場合 2377 ポートを他のプログラムが使用していないか確認してください。2377 ポートが利用できない場合 --listen-addr フラグを指定することで他のポートを使用することも可能です。
返却された実行結果の docker swarm join --token ... のコマンドをコピーします。

2. Docker Swarm クラスタに参加する

マシン B 上で、先ほどコピーしたコマンドを実行します。

以下のような実行結果が返却されます。
This node joined a swarm as a worker.

マシン A 上で以下のコマンドを実行します。

以下のような実行結果が返却されます。

マシン A とマシン B の 2 ノードで構成されていることが確認できます。

3. Swarm 用 Docker Overlay Network を作成する

マシン A 上で以下のコマンドを実行します

-d overlay を指定することで、Docker Swarm の各ノード上でまたがって利用可能なオーバーレイネットワークを作成します。
ここで作成したネットワークを Docker Swarm の各ノード内で利用する仮想的なネットワークとします。

マシン A 上で以下のコマンドを実行します

以下のように、NAME=resin-cluster, DRIVER=overlay, SCOPE=swarm のネットワークが作成されていることが確認できます。

SCOPE=swarm となっていることから分かるように、オーバーレイネットワークは Docker Swarm と組み合わせた場合のみ利用可能です。
docker run --net=resin-cluster のような利用はできません。

4. Resin の Docker Image を作成する

Dockerfile

resin-admin に admin/password でログインできるようにし、app_servers に DNS「tasks.resin-service」の A レコードから取れる値を指定し、2 台のクラスタリング環境を構築するよう設定しています。
DNS「tasks.resin-service」についての詳細は Container discovery を参照してください。
後の手順で resin-service という名称で Swarm サービスを作成するため、DNS「tasks.resin-service」で Swarm ノードのプライベート IP アドレスの一覧が取得できます。
この DNS は Swarm サービス起動完了後に利用可能になるため、利用可能になるまである程度時間がかかるため sleep 20 を入れています。
20 秒 sleep した後で、DNS「tasks.resin-service」の値を取得(dig)し、スペース区切りに変換(echo)し app_servers に指定しています。

マシン A, マシン B の両方で、myresin というタグでビルドします。

(イメージを DockerHub に push している場合、Worker ノードは自動的に pull するためすべてのノード上でビルドする必要はなくなります。)

5. Swarm クラスタに Resin タスクをデプロイする

マシン A 上で、以下のコマンドでタスクをデプロイします。

サービス名「resin-service」、レプリカ数 = 2, ネットワークは先ほど作成した「resin-cluster」でサービスを作成します。
レプリカを 2 個にしているため、マシン A, マシン B 上にデプロイされます。

以下のコマンドで、どのマシン上で実行されているかを確認できます。

マシン A, マシン B 上で実行されていることが確認できます。

コンテナのホスト名の設定(--hostname)は本来不要ですが、ここでは分かりやすい名前にすることを優先して設定しています。
コンテナの Resin が利用する 8080 ポート(target)をそのままホスト側の 8080 ポート(published)で開放しています。
そのため、http://192.168.0.2:8080/resin-admin, http://192.168.0.3:8080/resin-admin から resin-admin にアクセスできます。

resin-admin に admin/password でログインすることで、2 台のマシン上にデプロイされた Overlay ネットワーク上の Resin コンテナでクラスタリングを組めていることが確認できます。

まとめ

このように、Docker Swarm を利用することで、複数マシン上でのクラスタリング環境を構築できます。
上手く利用することで、10 台 や 20 台といった多数のマシンからなるクラスタリング環境も素早く構築することが可能です。
是非ご活用ください。

-CookBook

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

処理モーダルで差戻先ノードを固定する

このCookBookでは、ボタンアイテム(処理モーダル)において、差戻先ノードを固定する方法を紹介します。 完成イメージ ノード「approve2」の差戻先ノードをノード「apply」に固定する。 処 …

no image

グリッドテーブルのイメージからワークフローの案件内容を表示するには

このCookbookでは、グリッドテーブルの「イメージ」から申請済みの案件の詳細画面を呼び出す方法を紹介します。 この方法を利用すると別の案件を参照しながら新しく申請を行うことができます。 BISで作 …

no image

画面に確認ダイアログ(コンファーム)を表示する

画面に確認ダイアログ(imuiConfirm)を表示する方法をご紹介します。 確認ダイアログとは以下の画像のように、ユーザが選択した操作を本当に実行するかどうか確認するための機能です。 確認ダイアログ …

no image

No.7 Excel 出力 → 他システム(別サーバ)連携

この記事は、EWS 2017で行われたLogicDesignerの講演内容に関する記事です。 こちらの例では、ファイルサーバ等他のサーバと連携し、別サーバ上のファイルを更新できます。 ロジックフローの …

no image

IM-FormaDesignerで作成したフォーム内で、外部連携を利用して最も簡単に値を渡す方法(テーブルアイテム編)

このCookBookでは、IM-FormaDesignerで作成したフォーム画面の中で、テーブルアイテムからテーブルアイテムへ値を渡す方法について紹介します。 今回は例として、グリッドテーブルを利用し …