Azure Batch で Docker コンテナーを実行

執筆者: Yiding Zhou (Senior Program Manager, Azure Big Compute Team)

このポストは、6 月 9 日に投稿された Running Docker Container on Azure Batch の翻訳です。

 

Docker は、コンテナー内でアプリケーションのパッケージ化、デプロイ、実行を行うツールです。Azure Batch で Linux VM のサポートが開始 (英語) されて以来、Docker Hub をパッケージ化とデプロイメントのメカニズムとして使用し、Azure Batch でコンテナー ベースのタスクを実行できるようになりました。

また、Azure では Marathon と Chronos を使用した「サービスとしてのコンテナー ホスティング」を提供しています。コンテナー ベース アプリケーション用のホスティング環境をお求めの方には、Azure Container Service がお勧めです。これに対し、反復的な演算ジョブを実行するスケジューラが必要な場合は、ジョブのバイナリとデータをコンテナー形式にパッケージ化してデプロイする Batch サービスが最適です。

マイクロソフトは、Batch での Docker テクノロジの使用方法を示す 2 つのサンプル (英語) を GitHub で公開しました。1 つ目のサンプルでは、コンピューティング ノード配置用の Batch プールを作成する方法と、これを Docker Swarm クラスターに変換する方法を紹介しています。ユーザーは SSH トンネルを使用して Docker Swarm にローカルで接続し、クラスターと通信できます。

2 つ目のサンプルでは、Batch プールで Docker コンテナーをタスクとして実行する場合のエンドツーエンドのワークフローを紹介しています。

いずれのサンプルも、Docker コンテナーをインストールするプールを VM に作成するところから始まります。プール用の VM は Ubuntu 14.04 を基盤とし、プールは Docker_starttask.sh を実行する起動タスクで作成します。このスクリプトには、Docker リポジトリをパッケージ ソース リストに追加する方法や、Docker エンジンをインストールする方法、構成後の手順を実行する方法が示されています。スクリプトは Ubuntu 14.04 を基盤とする VM を前提としており、これがプールの既定構成となります。他の Linux ディストリビューションでは動作しませんが、他のバージョンの Ubuntu 用に変更するのは簡単です。起動タスクでは RunElevated フラグが true に設定されているため、CLI スクリプトに "sudo" を含める必要はありません。

プールを作成後、2 つ目のサンプルではジョブ準備タスクによってジョブを作成し、"Docker pull" を実行して Docker Hub イメージを取得します。このジョブ準備タスクは、ジョブ内のその他のタスクがノードで実行される前に必ず実行されるため、それらの個別のタスクが実行されるときにはイメージは既に存在していることになります。別のやり方としては、タスクの最初のコマンドとして “Docker pull” を実行する方法もあります。

このサンプルでは、最後にジョブにタスクを追加します。各タスクは、コンテナーにコマンドをフィードする 1 行のコマンドです。コンテナーは、コマンドに含まれる "-i" によってインタラクティブ モードで実行され、コンソールの STDIN、STDOUT、STDERR にアタッチされているため、すべての出力は stdout や stderr に記録されます。

スクリプトの実行が完了するとコンテナーが終了し、タスクに完了のマークが付きます。Docker はコンテナー自体から返されたコードで exit コマンドを実行するため、タスク実行情報プロパティのタスク終了コードをチェックすることで結果を確認することができます。

コンテナーは VM のサンドボックスではなくホスト環境内で実行されるため、通常のモニタリング ツールを使用できます。ホストに対して top コマンドや htop コマンドを使用すると、タスクの CPU 使用状況が表示されます。stdout と stderr にはコンテナーからの出力が記録されます。ホストはインターネットに接続でき、必要なリソースをダウンロードできます。

注意が必要な点は、既定でコンテナーはホストのファイルを共有しない設定になっているということです。コンテナー起動時にリソース ファイルが必要な場合は、Docker CLI に "-v" オプションを追加するだけで、コンテナーのホスト ディレクトリをマウントできます。