LoginSignup
0
1

More than 5 years have passed since last update.

Bluemix CFアプリの水平分散クラスタを Dockerコンテナに置き換えて構成したメモ

Posted at

この記事は、Node.js Express4で Cloudant セッション・ストアの水平分散クラスタを構成するの続編で、Bluemix上のDockerコンテナをロードバランサー配下で水平分散クラスタで動作させる事を目的として、Bluemix CFアプリ を ローカル、Bluemix上シングル、Bluemix上マルチ・インスタンスで検証を進めたメモです。

目標とすること

Bluemix の DockerコンテナもCFランタイムと同様に、水平分散クラスタを構成して、クリックでインスタンスを増設する構成、いわゆるスケールアウトにより増強できる構成を組むことができます。 この場合の課題も、前述のNode.js Express4で Cloudant セッション・ストアの水平分散クラスタを構成する と同じです。

スクリーンショット 2017-07-13 20.07.11.png

そこで、CFランタイムのアプリサーバーの代わりに、Dockerコンテナに置き換えて、水平分散クラスタ構成を組んでみます。アプリケーションは、CFランタイム用として作成したものに、Dockerfileを加えて、Dockerコンテナをビルドします。

スクリーンショット 2017-07-13 20.07.26.png

MacのDocker環境でコンテナとして実行

ここでは、記載しませんが、Bluemix CLI で Dockerコンテナのプラグインを動作させるためには、MacにDocker環境を導入して、動作させておく必要があります。

まずは、manifest.ymlと同じディレクトリに、Dockerfileの作成を作成します。

Dockerfile
 1  FROM ubuntu
 2  RUN apt-get update
 3  RUN apt-get install curl -y
 4  RUN curl -sL https://deb.nodesource.com/setup_6.x | /bin/bash -
 5  RUN apt-get install nodejs -y
 6  ADD . /app
 7  ENV NODE_ENV production
 8  EXPOSE 3000
 9  CMD ["node", "/app/app.js"]

コンテナ化する前に、必要なソフトウェア・モジュールをインストールします。

npm install

次のコマンドを実行して、コンテナをビルドします。

docker build -t express-session .

ローカル環境で、Dockerコンテナとして、動作テストを実施します。

docker run -p 3000:3000 -t express-session

ブラウザで、http://localhost:3000/foo をアクセスすると、アクセスカウンターを表示され、リロードでカウンターが加算されます。

Bluemix Docker環境で、シングルのコンテナとして実行

bxコマンドで、コンテナ環境のセットアップ

作業の前に、Bluemixへログインします。 ここからの作業は、決まりパターンなので、機械的に実行して、セットアップしていきます。

bx login  

コンテナ・レジストリへログインします。 ユーザーIDやパスワードを再度入力必要はなく、プラグインの初期化の様な処理です。

bx cr login  

Bluemix Docker プラグインを初期化します。 この時、前述の bx cr login が実行されていないと、このコマンドが失敗します。

bx ic init

すでにネームスペースを取っていれば、namespace-get を実行します。 初回は、namespace-set を実行します。

bx ic namespace-set [my-space-name]

ネームスペース名を取得します。

bx ic namespace-get

ローカルのコンテナイメージを Bluemix コンテナ・レジストリへ登録

コンテナのイメージをタグ付けします。

docker tag express-session registry.ng.bluemix.net/[your_name_space]/express-session

Bluemix のレジストリへ、登録します。

docker push registry.ng.bluemix.net/[your_name_space]/express-session

Bluemix上でコンテナ実行

パブリックIPを取得して、コンテナを実行する際に、付与します。

bx ic ip-request

コンテナを起動します。

bx ic run --name tkrX -m 128 -p [public_ip_address]:3000:3000 --env "CCS_BIND_SRV=Cloudant NoSQL DB-j9" registry.ng.bluemix.net/takara_node/express-session

上記を実行する際に、Cloudant のインスタンス名が必要になります。 インスタンス名を取得するには、次のコマンドを利用します。

bx cf services

Bluemix Docker環境で、マルチ・インスタンスのコンテナとして実行

複数のコンテナのインスタンスを起動して、DNS名でサービスを提供するには、次のコマンドで実行します。 オプションの詳細は、参考資料(1)にあります。

imac:session-cloudant maho$ bx ic group-create --name tkrZ -m 128 -n tkr -d mybluemix.net --min 2 --max 3 --desired 2 -p 3000 --env "CCS_BIND_SRV=Cloudant NoSQL DB-j9" registry.ng.bluemix.net/takara_node/express-session
OK
グループ作成が要求されました。
グループ「tkrZ」 (ID: 2f480275-8c5d-4ce4-aa58-dfbc0927c6ca) が作成されました。
最小コンテナー・インスタンス数: 2
最大コンテナー・インスタンス数: 3
望ましいコンテナー・インスタンス数: 2

まとめ

CFコンテナを Docker コンテナとして実行することは、手順が解っていれば簡単ですね。

参考資料

(1) CLI reference for managing single and scalable containers in IBM Bluemix Container Service https://console.bluemix.net/docs/containers/container_cli_reference_cfic.html#container_cli_reference_cfic_deprecated

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1