目次


IBM Cloud と IBM Containers を利用して、Linux ベースのチェス・アプリをクラウド上に配置する

Docker と WebSockets によって CLI アプリをクラウド対応のサービスに変換する

Comments

私は最近、1997 年に行われた有名なチェスの試合をあらためて考えてみました。Deep Blue が 6 番勝負でガルリ・パスパロフ (当時のチェス世界チャンピオン) を打ち負かした試合です。それから現在に至るまでの 20 年間で、チェスの AI における最先端の水準がどれほど高くなったかに興味を持って調査した結果、Stockfish というオープンソース・チェス・エンジンがトップ・クラスにランクされていることを知りました。

Stockfish は標準的な Linux コマンド・ライン・アプリケーションとして動作するチェス・エンジンです。けれども私はこれを、IBM Cloud 上でホスティングされた JavaScript アプリケーション内で使用することを思い立ち、その方法として、Stockfish と websocketd を含めた Docker イメージを作成することにしました。その Docker コンテナーを IBM Cloud 上の IBM Containers を利用して実行することで、Stockfish Linux アプリケーションをクラウド上で利用できるサービスとして公開することに成功しました。

このチュートリアルで、Stockfish をサービスとして公開するイメージを作成し、そのイメージを IBM Container にデプロイするために私が辿ったプロセスを説明します。標準的な入出力パイプを介して通信するコマンド・ライン Linux アプリケーションであればどのアプリケーションでも、ここで説明するのと同じパターンを適用することで、IBM Cloud によってクラウド上で使用可能なアプリケーションにすることができます。

アプリケーションを作成するために必要なもの

アプリを実行するコードを入手する

ステップ 1. ローカル Stockfish Docker イメージを作成する

  1. Docker イメージのビルドを自動化する Dockerfile を作成します。
    #
    # Stockfish Dockerfile
    #
    
    FROM ubuntu:14.04
    
    ADD websocketd /root/websocketd
    ADD stockfish_6_x64 /root/stockfish_6_x64
    
    EXPOSE 8080
    
    CMD /root/websocketd --port=8080 /root/stockfish_6_x64
  2. 必要となる以下の依存関係をフェッチします。
    Linux 対応の Stockfish 6
    Linux 64 ビット用 websocketd
  3. Dockerfile と同じディレクトリーに以下のファイルを抽出します。
    stockfish-6-linux.zip:
    stockfish-6-linux/Linux/stockfish_6_x64
    websocketd-0.2.11-linux_amd64.zip:
    websocketd
  4. docker build -t stockfish コマンドを実行して Docker イメージをビルドします。以下のような出力が表示されるはずです。
    	Sending build context to Docker daemon 8.174 MB
    	Step 0 : FROM ubuntu:14.04
    	14.04: Pulling from library/ubuntu
    	c63fb41c2213: Pull complete
    	99fcaefe76ef: Pull complete
    	5a4526e952f0: Pull complete
    	1d073211c498: Pull complete
    	Digest: sha256:d4b37c2fd31b0693e9e446e56a175d142b098b5056be2083fb4afe5f97c78fe5
    	Status: Downloaded newer image for ubuntu:14.04
    	 ---> 1d073211c498
    	Step 1 : ADD websocketd /root/websocketd
    	 ---> 83b692e37bc3
    	Removing intermediate container 3af793dcdd31
    	Step 2 : ADD stockfish_6_x64 /root/stockfish_6_x64
    	 ---> 0962dceb862c
    	Removing intermediate container 969243ca93b0
    	Step 3 : EXPOSE 8080
    	 ---> Running in 50898b9a0735
    	 ---> 3997d5fc2125
    	Removing intermediate container 50898b9a0735
    	Step 4 : CMD /root/websocketd --port=8080 /root/stockfish_6_x64
    	 ---> Running in cca2dceb1c2e
    	 ---> e7a03dfa84b3
    	Removing intermediate container cca2dceb1c2e
    	Successfully built e7a03dfa84b3

ステップ 2. Docker イメージをプライベート IBM Cloud リポジトリーにプッシュする

  1. Cloud Foundry CLI にログインし (cf login)、IBM Containers Cloud Foundry プラグインにログインします (cf ic login)。プライベート IBM Cloud リポジトリーの場所と名前空間をメモします。これらの情報は、ローカル Docker イメージを IBM Cloud にプッシュする際に必要になります。
        Successfully authenticated with registry
    	Your private Bluemix repository is registry.ng.bluemix.net/esrose
  2. ローカル Docker イメージに、プライベート IBM Cloud リポジトリーのタグを付けます。それには以下のコマンドを使用します。
    docker tag stockfish registry.ng.bluemix.net/<名前空間>/stockfish
  3. 以下のコマンドを使用して、Docker イメージを IBM Cloud リポジトリーにプッシュします。
    docker push registry.ng.bluemix.net/<名前空間>/stockfish
  4. イメージが正常にプッシュされたことを確認するために、cf ic images コマンドを実行します。イメージが出力にリストアップされていることを確認できるはずです。
    REPOSITORY                                TAG     IMAGE ID      CREATED
    registry.ng.bluemix.net/esrose/stockfish  latest  e7a03dfa84b3  2 minutes ago

ステップ 3. Stockfish Docker イメージをベースに稼働するコンテナーを作成する

  1. IBM Cloud ダッシュボード上で「Start Containers (コンテナーを起動)」ボタンをクリックして IBM Containers サービスにアクセスします。 「Start Containers (コンテナーを起動)」ボタンのスクリーンショット
    「Start Containers (コンテナーを起動)」ボタンのスクリーンショット
  2. カタログから「stockfish」コンテナー・イメージを選択します。Stockfish イメージのアイコンのスクリーンショット
  3. コンテナーに名前を付けます (例えば、「bluemixchess」)。パブリック IP をリクエストしてバインドし、「8080」をパブリック・ポートとして公開します。 単一のコンテナーを構成する画面のスクリーンショット
    単一のコンテナーを構成する画面のスクリーンショット
  4. 実行中のコンテナーのパブリック IP アドレスをメモします。実行中のコンテナーのパブリック IP アドレスを示すスクリーンショット
    実行中のコンテナーのパブリック IP アドレスを示すスクリーンショット
  5. Echo Test などの WebSocket テスターを使用して、Stockfish と通信できるかどうかをテストします。ws://<CONTAINER_IP>:8080 に接続すると、以下のようなレスポンスが返されるはずです。
    Stockfish 6 64 by Tord Romstad, Marco Costalba and Joona Kiiski

Docker コンテナーをビルドして IBM Containers にデプロイし、実行中の状態にするところまでの作業が完了しました。これで、WebSocket を介して Stockfish チェス・エンジンをサービスとして利用することができます。次は、Stockfish サービスを利用する JavaScript フロントエンドを作成します。

ステップ 4. bluemixchess リポジトリーを複製して依存関係をフェッチする

  1. IBM Cloud DevOps Git リポジトリーから bluemixchess リポジトリーを複製します。プロジェクトの URL は https://git.ng.bluemix.net/esrose/bluemixchess です。
  2. JavaScript ユーザー・インターフェースが依存する chessboard.js は、手作業でフェッチする必要があります。http://chessboardjs.com/releases/0.3.0/chessboardjs-0.3.0.zip から v0.3.0 をダウンロードして、zip ファイルの中身を bluemixchess/app/public に抽出します。
  3. その他の依存関係は Bower が管理します。bluemixchess/app/public ディレクトリー内でコマンド bower install を実行します。これにより、Bower が以下のコンポーネントをフェッチします。
    	json3#3.3.2 bower_components/json3
    	chess.js#0.9.1 bower_components/chess.js
    	sockjs-client#1.0.3 bower_components/sockjs-client
    	jquery#2.1.4 bower_components/jquery

ステップ 5. IBM SDK for Node.js ビルドパックを使用してチェス UI を IBM Cloud にデプロイする

  1. bluemixchess/app/public/BluemixChess.js を編集し、@@@CONTAINER_IP@@@ をコンテナーのパブリック IP アドレスで置き換えます。これにより、Stockfish と通信するための適切な WebSocket エンドポイトが設定された UI が構成されます。
  2. bluemixchess/app/manifest.yml を編集し、namehost の値をアプリケーション・インスタンスに固有の値に変更します。
  3. Cloud Foundry CLI から適切な組織とスペースを指定して IBM Cloud にログインしていることを確認します。push -f manifest.yml コマンドを使用して、アプリケーションを IBM Cloud にプッシュします。
  4. アプリケーションを試してみましょう!ブラウザーで、マニフェスト内に定義されている http://<HOST>.mybluemix.net/ にアクセスします。人間のプレイヤーと AI プレイヤーの組み合わせをいろいろと変えて、対戦相手が変わるとどのような結果になるのかを確かめてください。

完成した製品は、以下のように表示されます。

チェスボードのスクリーンショット
チェスボードのスクリーンショット

まとめ

このチュートリアルでは、既存の CLI Linux アプリケーションを Docker イメージの中にラップする方法、そしてイメージを実行中のコンテナーとして IBM Containers for IBM Cloud にデプロイする方法を説明しました。また、Docker コンテナーによって利用可能にされたサービスを使用する JavaScript フロントエンド・アプリケーションもデプロイしました。このように、Docker と WebSocket を組み合わせて使用すれば、多種多様な Linux ベースの CLI アプリケーションをクラウド対応のサービスに変換することができます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Linux
ArticleID=1052196
ArticleTitle=IBM Cloud と IBM Containers を利用して、Linux ベースのチェス・アプリをクラウド上に配置する
publish-date=11242017