目次


IBM UrbanCode を使用してハイブリッド・クラウドに Docker コンテナーをデプロイする: 第 2 回 デプロイメント

Comments

この記事は、IBM UrbanCode と Docker Trusted Registry (DTR) を使用してマルチコンテナー DevOps 環境を構築する方法を詳しく説明するハウツー・ガイドの第 2 回です。詳細については、「Deploy containers to on-premises and hybrid clouds with IBM and Docker」というタイトルのブログ投稿を参照してください。このブログ投稿で、マルチコンテナー・アプリケーションの開発と、IBM Bluemix とオンプレミス Docker Swarm クラスターからなるハイブリッド・クラウド環境へのマルチコンテナー・アプリケーションのデプロイメントについて紹介しています。

“第 2 回では、UrbanCode Deploy がどのようにして Bluemix および Docker Swarm へのハイブリッド・アプリケーションのデプロイメントをオーケストレーションするかを説明します。”

第 1 回では、概要を説明するとともに、UrbanCode を使用して Docker コンテナーをデプロイするために必要な、Bluemix の IBM Containers、Docker Trusted Registry、Docker Swarm、IBM UrbanCode Build をセットアップする方法を順番に説明しました。この第 2 回では、IBM UrbanCode Deploy がどのようにして Bluemix および Docker Swarm へのハイブリッド・アプリケーションのデプロイメントをオーケストレーションするかを説明します。

ハイブリッド・デプロイメントを作成するために必要なもの

デモを見るコードを入手する

ステップ 1. IBM UrbanCode Deploy をセットアップする

  1. UrbanCode Deploy サーバーをインストールします。
  2. 2 つの UrbanCode Deploy エージェントをインストールします。これらのエージェントにそれぞれ、「ucdiceagent」、「ucddheagent」という名前を付け、両方とも UrbanCode Deploy サーバーに接続します。
  3. ucdiceagent で、以下の作業を行います。:
    1. Bluemix ice-cli ツールに IBM Containers をインストールします。
      	$ pip install https://static-ice.ng.bluemix.net/icecli-3.0.zip -U
    2. Cloud Foundry cf CLI をインストールします。
    3. Docker CS Engine をインストールします。
    4. DTR 証明書をインストールします。
  4. ucddheagent で、以下の作業を行います。:
    1. Docker CS Engine をインストールします。
    2. DOCKER_HOST 環境変数の値が Swarm のホストおよびポートになるように設定します。以下に例を示します。
      tcp://<Docker Swarm ホスト>:<Docker Swarm ポート>
    3. DTR 証明書をインストールします。
  5. UrbanCode Deploy サーバーと UrbanCode Deploy エージェントが実行中になり、サーバーが Web UI の URL で適切に応答するようになったら、UI で「Resources (リソース)」 > 「Agents (エージェント)」リンクの順にナビゲートして、2 つの UrbanCode Deploy エージェントがオンライン状態として表示され、エラーが発生していないことを確認します。

ステップ 2. UrbanCode Deploy Docker プラグインをセットアップする

UrbanCode Deploy を ICS および Docker コンテナーと適切に連動させるには、Docker プラグインと ICS UrbanCode Deploy プラグインをサーバーにインストールする必要があります。

  1. UrbanCode Deploy サーバーの UI で「Settings (設定)」 > 「Automation plug-ins (自動化プラグイン)」の順にナビゲートしてページを表示します。
  2. 「Load Plugin (プラグインのロード)」ボタンをクリックします。
  3. プラグインをダウンロードします。

ステップ 3. コンポーネントを構成する

これから、アプリケーション用に UrbanCode Deploy を構成します。まずは、コンポーネントについて説明しておきます。この演習では、The Store アプリケーションを構成する以下の 4 つの Docker コンテナー・イメージのそれぞれが、UrbanCode Deploy のコンポーネントになっています。

  • store/backend_was
  • store/db2_expc_nonroot
  • store/frontend
  • store/mysql

UrbanCode Deploy コンポーネントは、これらのイメージのそれぞれに対して作成されます。コンポーネントのタイプは、プラグインが提供するコンポーネント・テンプレートによって 2 つに分かれます。

Node.js アプリケーションを実行して UI を提供する store/frontend コンテナーのコンポーネント・タイプは、「Hybrid from Docker Registry」です。このコンポーネント・タイプは、コンテナー・イメージが Dcoker レジストリー内にあり、そこからイメージをプルしてローカルのオンプレミス・サービス (VM や Docker Swarm など) または ICS のいずれかにデプロイできることを意味しています。

残りの 3 つのコンテナーのコンポーネント・タイプは、「Docker」です。これらのコンテナーは、同じく Docker レジストリー内にありますが、ローカル・サービスにしかデプロイすることができません。

The Store アプリケーションのコンポーネントのスクリーンショット
The Store アプリケーションのコンポーネントのスクリーンショット
  1. コンポーネントごとに、「Configuration (構成)」 > 「Basic Settings (基本設定)」ダイアログの順にナビゲートし、必要な設定を指定して、コンポーネントを構成します。例えば、この例でのコンポーネントはすべて Docker レジストリー内にあり、そこからプルされるので、「Source Configuration Type (ソース構成タイプ)」は「Docker Importer (Docker インポーター)」に設定します。

    「Docker Registry (Docker レジストリー)」は、該当する Docker レジストリーの実行場所となっている FQDN です。「Docker Image Name (Docker イメージ名)」には、レジストリー内でのイメージの名前を指定します。

    「Basic Settings (基本設定)」画面のスクリーンショット
    「Basic Settings (基本設定)」画面のスクリーンショット
  2. store/frontend コンポーネントの場合は少し異なります。このタイプのコンテナーは、ICS に関連する情報を使用して構成する必要があります。必要となる情報には、Bluemix のユーザー ID とパスワード、スペース、組織名、ICS レジストリー内でコンテナーを識別するイメージ名、そして ICS 上でコンテナーを起動する際に使用するコンテナー名です。 store/frontend コンポーネントの「Basic Settings (基本設定)」画面のスクリーンショット
    store/frontend コンポーネントの「Basic Settings (基本設定)」画面のスクリーンショット
  3. UrbanCode Deploy サーバーは、これらのコンポーネントの最新バージョンを Docker レジストリーからプルするようになっているはずです。サーバーは、構成可能な間隔でレジストリーをポーリングしてイメージの新しいバージョンの有無を確認するため、自動的に最新バージョンがプルされることになります。最新バージョンであるかどうかは、コンポーネントの「Version (バージョン)」列で確認することができます。 store/frontend コンポーネントの各バージョンを示す画面のスクリーンショット
    store/frontend コンポーネントの各バージョンを示す画面のスクリーンショット

    store/frontend コンポーネントは、新しいバージョンが出現した時点でデプロイメント・プロセスを実行するように構成されています。このプロセスは、UrbanCode Deploy の Calendar を使用してスケジューリングすることもできます。

ステップ 4. リソースを構成する

コンポーネントを構成して使用できるようにした後は、UrbanCode Deploy のリソースを構成することができます。

  1. 「Resources (リソース)」タブで、「Create Top Level Group (トップレベルのグループの作成)」をクリックし、「all」という名前のトップレベルのリソース・グループを作成します。
  2. all グループ内には、さらにリソース・グループを作成することができます。この例の場合は、「store all on swarm」、「store all on-prem」、「store hybrid ics and on swarm」というグループを作成します。
  3. これらのリソース・グループに UrbanCode Deploy エージェントを追加した後、それらのエージェントにコンポーネントを追加します。store all on swarm リソース・グループに、Docker Swarm とやりとりするように構成された 1 つのエージェントを追加し、そのエージェントに 4 つすべてのアプリケーション・コンポーネントを追加します。
  4. store hybrid ics and on swarm リソース・グループに 2 つのエージェントを追加し、ICS とやりとりするエージェントの方に store/frontend コンポーネントを追加します。
  5. Docker Swarm とやりとりするエージェントの方に、残りの 3 つのコンポーネントを追加します。 「Create Top Level Group (トップレベルのグループの作成)」ステップのスクリーンショット
    「Create Top Level Group (トップレベルのグループの作成)」ステップのスクリーンショット

ステップ 5. UrbanCode Deploy アプリケーションを作成する

  1. 次は、「Store Application」という名前の UrbanCode Deploy アプリケーションを作成して、4 つすべてのコンポーネントをそのアプリケーションに追加します。
  2. さらに、2 つのプロセスも追加します。これらのプロセスは、UrbanCode Deploy Process Designer で作成して構成されたものです。1 つ目の「Deploy (デプロイ)」という名前のプロセスでは、4 つすべてのアプリケーション・コンポーネントをデプロイします。 「Process: Deploy (プロセス: デプロイ)」画面のスクリーンショット
    「Process: Deploy (プロセス: デプロイ)」画面のスクリーンショット
  3. 2 つ目の「Deploy store frontend only (ストア・フロントエンドのみデプロイ)」という名前のプロセスでは、フロントエンド・コンポーネントだけをデプロイします。フロントエンド・コンポーネントは定期的に開発されて再ビルドされるコンポーネントなので、この 2 つ目のプロセスが役立ちます。 「Process: Deploy store frontend only (プロセス: ストア・フロントエンドのみデプロイ)」画面のスクリーンショット
    「Process: Deploy store frontend only (プロセス: ストア・フロントエンドのみデプロイ)」画面のスクリーンショット

ステップ 6. 環境を構築する

  1. アプリケーション内に環境を構築する必要もあります。UrbanCode Deploy 環境は、特定のタイプのアプリケーション・デプロイメントを指示する構成情報とリソースのセットと見なすことができます。この例では、「Hybrid Deploy to ICS and On-prem Swarm for Store Application」と「Deploy to On-prem Swarm」という 2 つの環境を構築します。 環境構築ステップのスクリーンショット
    環境構築ステップのスクリーンショット
  2. それぞれの環境に、その環境に関連付けたリソース・グループと構成情報を含めます。Hybrid Deploy to ICS and On-prem Swarm for Store Application 環境には、store hybrid ics and on swarm リソース・グループを関連付けます。 Hybrid Deploy to ICS and On-prem Swarm for Store Application 環境のスクリーンショット
    Hybrid Deploy to ICS and On-prem Swarm for Store Application 環境のスクリーンショット
  3. Deploy to On-prem Swarm 環境には、store all on swarm リソース・グループを追加します。 Deploy to On-prem Swarm 環境のスクリーンショット
    Deploy to On-prem Swarm 環境のスクリーンショット
  4. 各環境の「Configuration (構成)」タブには、さまざまなアプリケーション・コンポーネントのデプロイ時の Docker および ICS の設定を入力するためのフィールドがあります。どちらの環境にも、3 つのオンプレミス・コンテナーの各種設定を構成します。Docker ポート・マッピング、コンテナー・リンク・ディレクティブ、DB2 および MySQL の認証情報などの設定は、「Docker Environment Run Options (Docker 環境の実行オプション)」に含まれており、コンポーネントごとに設定は別になっています。

    Deploy to On-prem Swarm 環境内では、フロントエンド・コンポーネントもこのように (例えば、Docker コンポーネントとして) 構成します。その一方で、Hybrid Deploy to ICS and On-prem Swarm for Store Application環境内では、フロントエンド・コンポーネントはその構成を「Docker Environment Run Options (Docker 環境の実行オプション)」からではなく、「ICS Environment Run Options (ICS 環境の実行オプション)」から受け取ります。

    コンポーネントの環境プロパティーを表示する画面のスクリーンショット
    コンポーネントの環境プロパティーを表示する画面のスクリーンショット
  5. この 2 つの環境間の主な違いは、「Resource Type (リソース・タイプ)」プロパティーの値です。ハイブリッド環境では「ics」に設定しますが、オンプレミス環境では「docker」に設定します。その環境に関連付けられているプロセスで実行される詳細な方法は、このプロパティーの値によって決まります。例えば、Docker レジストリーからプルしてローカルで実行するのか、それとも Docker レジストリーからプルした後、タグを付けて ICS にプッシュし、ics-cli ツールを使って ICS 上で実行するのかは、このプロパティーの値によって決まります。 リソース・タイプの違いを示す、コンポーネントの環境プロパティーを表示する画面のスクリーンショット
    リソース・タイプの違いを示す、コンポーネントの環境プロパティーを表示する画面のスクリーンショット
  6. それぞれの環境内では、フロントエンド・コンポーネントの構成もわずかに異なります。

    ICS の場合、コンポーネントは Bluemix CF (Cloud Foundry) アプリケーションにバインドするように構成されるため、CF アプリケーションから入手できる Bluemix Secure Gateway の情報にアクセスすることができます。これにより、store/frontend コンテナーはオンプレミス・システム上にある他のコンポーネント・コンテナー、具体的には store/backend_was コンテナーと通信することができます。

    Docker の場合、フロントエンド・コンポーネントにはローカル環境ファイルが提供されます。そのファイルに、同じ VCAP ゲートウェイ情報が含まれていて、ICS 上で実行中にプログラムによってその情報を取得することができます。このローカル環境ファイルは、UrbanCode Deploy サーバーや UrbanCode Deploy エージェントが実行されているホストまたは VM 上に保管され、UrbanCode Deploy コンテナーでは、Docker ボリュームを介して以下の場所でアクセスできるようになります。

    	/opt/urbancode/ibm-ucdagent/var/etc/vcap_services.env
  7. どちらの環境でも、フロントエンド・コンポーネントにはセキュア・ゲートウェイの名前、そのゲートウェイ内での宛先の名前、Bluemix のユーザー ID とパスワード、そして公開するポートを指定します。

    アプリケーション全体をデプロイするか、フロントエンド・コンポーネントだけをデプロイすることによって、どちらの環境からでも個々のプロセスを実行することが可能です。環境によって、フロントエンドは ICS またはオンプレミスのいずれかにデプロイされます。

    プロセスを実行するときは、コンポーネントのバージョンが前回のデプロイメントから変更されていないとしても、コンポーネントのバージョンとデプロイ・オプションを選択する必要があります。

ステップ 7. アプリケーションをデプロイする

以下の 2 つの UrbanCode Deploy 環境を構築しました。

  • オンプレミス: フロントエンド・コンテナーと 3 つのバックエンド・コンテナーをオンプレミスの Swarm にデプロイするための環境
  • ハイブリッド: フロントエンド・コンテナーを Bluemix 内の IBM Containers にデプロイし、3 つのバックエンド・コンテナーをオンプレミスの Swarm にデプロイするための環境

上記のシナリオのいずれにしても、最初に以下の共通ステップを実行する必要があります。

  1. store_frontend アプリケーション・ディレクトリーにカレント・ディレクトリーを変更します。
    $ cd store_frontend/public/css
  2. colorLight.css または colorDark.css をコピーすることにより、custom.css を変更します。
  3. Git のコミットを実行します。
    $ git commit -a -m "changed store color"
  4. Git post-commit トリガーにより、UrbanCode Build 内でアプリケーションのビルドが開始されます。
  5. UrbanCode Build ポータルにアクセスして、ビルドのステータスを確認します。ビルドが完了すると、1.0.n といった新しい Docker イメージが生成されているはずです。ここで、n はビルドごとにインクリメントされるビルド番号です。ビルドのステータスを示す画面のスクリーンショット
    ビルドのステータスを示す画面のスクリーンショット
    ビルドのステータスの詳細を示す画面のスクリーンショット
    ビルドのステータスの詳細を示す画面のスクリーンショット
  6. UrbanCode Deploy ポータルで、「Component: store/frontend (コンポーネント: store/frontend)」ページの「Version (バージョン)」列をチェックして、新規 1.0.n ビルドがインポートされたことを確認します。 ビルド・バージョンを示す画面のスクリーンショット
    ビルド・バージョンを示す画面のスクリーンショット
  7. UrbanCode Deploy で、Store Application の環境にアクセスし、以下のセクションで説明する手順に従って、オンプレミス環境またはハイブリッド環境にデプロイします。

UrbanCode Deploy によるオンプレミス環境へのデプロイ

この例では、最初にすべてのコンテナーをオンプレミス環境にデプロイします。

  1. UrbanCode Deploy ポータルにログインして、Store Application の環境にアクセスします。
  2. 「Store: Deploy to On-prem Swarm (Store: オンプレミス Swarm へのデプロイ)」を実行します。環境の選択肢のスクリーンショット
    環境の選択肢のスクリーンショット
  3. Deploy プロセスを選択します。「Only Changed Versions (変更されたバージョンのみ)」チェック・ボックスのチェック・マークを外して、更新されていないバックエンド・コンテナーもデプロイされるようにします。 「Run Process on Store (Store でのプロセスの実行)」画面のスクリーンショット
    「Run Process on Store (Store でのプロセスの実行)」画面のスクリーンショット
  4. 使用可能な最新バージョンの store/frontend と 3 つのバックエンド・コンテナーを選択します。「OK」をクリックします。 「Component Versions (コンポーネントのバージョン)」画面のスクリーンショット
    「Component Versions (コンポーネントのバージョン)」画面のスクリーンショット
  5. 以下に示すように、デプロイメントのステータスが成功として表示されます。 成功ステータスを示す画面のスクリーンショット
    成功ステータスを示す画面のスクリーンショット
  6. Swarm Manager をチェックして、実行中のコンテナーを確認します。
    sanjay@dhe:~/swarm$ docker -H 192.168.56.30:3375 ps
    CONTAINER ID        IMAGE                                               COMMAND                CREATED             STATUS              PORTS                                                                                      NAMES
    e96ef9f6affe        dhe.cork.ie.ibm.com/store/store_frontend:1.0.109    "/usr/bin/supervisor   4 minutes ago       Up 3 minutes        22/tcp, 192.168.56.30:3000->3000/tcp                                                       vagrant-ubuntu-trusty-64/store_frontend                                   
    c8fd9c7b3247        dhe.cork.ie.ibm.com/store/backend_was:latest        "/opt/startup.sh"      4 minutes ago       Up 4 minutes        8879/tcp, 192.168.56.30:9060->9060/tcp, 9043/tcp, 9443/tcp, 192.168.56.30:9080->9080/tcp   vagrant-ubuntu-trusty-64/store_backend_was                                
    1bb80b195645        dhe.cork.ie.ibm.com/store/mysql:latest              "/opt/startup.sh"      4 minutes ago       Up 4 minutes        22/tcp, 192.168.56.30:3306->3306/tcp, 192.168.56.30:32768->3000/tcp                        vagrant-ubuntu-trusty-64/store_backend_was/mysql,vagrant-ubuntu-trusty-64/store_mysql
    cffb66d21789        dhe.cork.ie.ibm.com/store/db2_expc_nonroot:memfix   "/opt/startup.sh"      5 minutes ago       Up 4 minutes        192.168.56.30:5000->5000/tcp                                                               vagrant-ubuntu-trusty-64/store_backend_was/db2,vagrant-ubuntu-trusty-64/store_db2_expc_nonroot
  7. store_backend_was コンテナーのログをチェックして、初期化が完了してサーバーが実行中になっていることを確認します。
    $ docker logs -f store_backend_was
  8. The Store フロントエンドの URL (http://<ホスト>:3000) にアクセスし、The Store が実行中であることを確認します。 The Store フロントエンドのパネルのスクリーンショット
    The Store フロントエンドのパネルのスクリーンショット

UrbanCode Deploy によるハイブリッド環境へのデプロイ

すべてのコンテナーがオンプレミスの Swarm 内で実行中になったので、今度は Bluemix 内で store_frontend コンテナーを実行し、オンプレミスで実行中のバックエンド・コンテナーに接続します。

  1. UrbanCode Deploy ポータルにログインして、Store Application の環境にアクセスします。
  2. 「Store: Hybrid Deploy to ICS and On-prem Swarm」を実行します。 環境の選択肢のスクリーンショット
    環境の選択肢のスクリーンショット
  3. Deploy store frontend only (Store フロントエンドのみデプロイ)」プロセスを選択し、「Submit (送信)」をクリックします。 「Run Process on Store (Store でのプロセスの実行)」画面のスクリーンショット
    「Run Process on Store (Store でのプロセスの実行)」画面のスクリーンショット
  4. ハイブリッド環境へのデプロイメントに対する承認のステップが必要です。このステップでは、指定された承認担当者が実行依頼を承認する必要があります。 承認プロセス・ステップ 1 のスクリーンショット
    承認プロセス・ステップ 1 のスクリーンショット
    承認プロセス・ステップ 2 のスクリーンショット
    承認プロセス・ステップ 2 のスクリーンショット
  5. 承認の送信後、デプロイメントが続行されます。新しい Docker イメージが Bluemix 内の IBM Container にプッシュされると、現在実行中の store_frontend コンテナーが停止されます。そして新しいイメージを使用して新しい store_frontend コンテナーが起動されて、パブリック IP がバインドされます。完了すると、以下のようなステータスが示されます。 成功ステータスを示す画面のスクリーンショット
    成功ステータスを示す画面のスクリーンショット
  6. Bluemix ユーザー・インターフェースにアクセスして、新しくビルドされたバージョンの Docker イメージで store_frontend が実行されていることを確認します。store_frontend コンテナーのパブリック IP をメモします。
  7. The Store フロントエンドの URL (http://<ホスト>:3000) にアクセスし、The Store が実行中であることを確認します。このフロントエンド・コンテナーは、前のオンプレミスのシナリオで起動した、オンプレミス Docker Swarm クラスター内で実行されている store_backend_was コンテナーに、Bluemix Secure Gateway サービスを介して接続されています。

まとめ

この全 2 回からなる記事の第 2 回では、多層マルチコンテナー・アプリケーションを、オンプレミスの Docker Swarm クラスターと、オフプレミスのクラウド環境 (Bluemix 内の IBM Containers など) の両方に迅速にデプロイできるようにする方法を説明しました。そのために、IBM UrbanCode Deploy のエンタープライズ機能を、Docker イメージ用の信頼できるリポジトリーとして IBM でサポートしている Docker Trusted Registry オファリングとともに使用しました。

また、UrbanCode 製品に Docker Trusted Registry を統合する方法や、標準的な DevOps パイプラインの一環として IBM UrbanCode 製品によって、複数のクラウド環境への複数のコンテナーのデプロイメントをオーケストレーションして自動化する方法、さらには Bluemix 内の IBM Containers で実行されているアプリケーションをオンプレミスのインフラストラクチャーにセキュアに接続するために、Bluemix の Secure Gateway サービスを (場合によっては Bluxmix の膨大なカタログの中から選んだ他のサービスとともに) 利用する方法を説明しました。

コメントを投稿することで、この全 2 回からなる記事に関するフィードバックをお寄せください。私たちの目標は、企業のお客様がクラウド環境で Docker コンテナー化を最大限利用できるようサポートすることです。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=DevOps, Cloud computing
ArticleID=1022885
ArticleTitle=IBM UrbanCode を使用してハイブリッド・クラウドに Docker コンテナーをデプロイする: 第 2 回 デプロイメント
publish-date=12032015