Azure へのプライベート Docker レジストリのデプロイメント
このポストは、11 月 11 日に投稿された Deploying Your Own Private Docker Registry on Azure の翻訳です。
マイクロソフトでは、Microsoft Azure 上で自分の Docker レジストリを管理できるようにするなど、Docker サポートへの取り組みを急ピッチで進めています。
6 月には、Docker 化アプリケーションを簡単にクラウドにデプロイできるようにするために、Microsoft Azure に Linux VM 上の Docker コンテナーのサポートを追加しました。また 2 週間ほど前には、Windows Server コンテナーと Azure での Docker オープン オーケストレーション API のサポートを発表しました。さらに先日の TechEd Europe では、Azure の CTO を務める Mark Russinovich が、まもなくオープン ソースとして提供開始予定の Docker Client for Windows のライブ デモを実演しました。
コンテナー テクノロジと Docker がハイペースでコミュニティに導入されるようすを目の当たりにできるのは、本当にすばらしいことです。今後もコンテナーに関する驚くべきニュースが多数控えています。同時に、優れた技術者たちによるオープン ソースの開発も順調に進んでいます。
新しい Azure Storage Driver for Docker Registry は、第 2 回 Global Docker Hack Day (英語) の成果として誕生しました。最近のブログ記事で Corey Sanders が述べているように、このイベントは Docker が大々的にフィーチャーされた TechEd EU と連動しています。Ross Gardler も Microsoft Open Technologies のブログ (英語) の中で、Azure 関連の Docker コミュニティ向けニュースとしてこのイベントを紹介しています。ただし、このブログ記事では技術的な詳細には踏み込んでいません。Docker のコードは既に開発され、オープン ソースの GitHub 上に公開されています。ちょうど良い機会なので、この記事では、Docker の技術ガイダンスと使い方についてご紹介します。
「プライベート Docker レジストリ」とは
クラウドにコンテナー型アプリケーションをリリースするには、Docker ツールを使用して Docker コンテナー イメージを作成します。コンテナー イメージの作成とクラウドへのリリースは比較的簡単ですが、生成されたイメージを安全に保存するのは容易ではありません。そこで開発されたのが、Docker Hub (英語) と呼ばれるサービスです。このサービスを利用すれば、コンテナー イメージをクラウドに保存し、同じイメージを使用していつでも新しいコンテナーを作成することができます。
この Docker Hub はプライベート イメージを保存するための有料サービスです。このほかに、開発者側のニーズに対応するために、Docker Hub 開発用のオープン ソースの「Docker レジストリ (英語)」ソフトウェアも用意されています。Docker レジストリ ソフトウェアは、コンテナー イメージを保存し提供できるように設計されていますが、その重要なメリットは、ユーザー固有のプライベート レジストリをホストできるという点にあります。つまり、好みのクラウド ストレージ プロバイダーやオンプレミス環境を選択して、簡単にプライベート レジストリをホストすることができます。
Azure ユーザーにとってのメリット
これまで、Microsoft Azure BLOB Storage 上にコンテナー イメージを保存するプラグインはサポートされていませんでした。Docker レジストリには既定で、仮想マシンのローカル ディスクにイメージを保存するローカル ファイル ストレージ プラグインが組み込まれています。しかしこれは、信頼性の面からも、バイナリの保存手段として最適であるとは言えません。最適なサービスは Azure BLOB Storage です。
そこで、Azure Storage Driver for Docker Registry ( 英語 ) の出番となるわけです。Azure Storage Driver for Docker Registry は、Azure Storage アカウントを使用して、Azure Storage 上の Docker イメージを BLOB として簡単にホストできるプラグインです。Azure Storage のセキュリティ、信頼性、地理的分散を最大限に活用しています。
Azure 上にプライベート Docker レジストリをセットアップ
Docker がインストールされているクラウド上に仮想マシンがない場合は、こちらのチュートリアル (英語) に従って Microsoft Azure Virtual Machines 上で Docker ホストを実行します。
残りの手順は簡単です。ローカルの開発環境で、任意の場所に新しいフォルダーを作成し、その中に次の内容を含む Dockerfile という名前のファイルを作成します。
FROM registry
RUN pip install docker-registry-driver-azureblob
このファイルを使用して、新しい Docker イメージを作成し、Azure Storage プラグインを Docker のレジストリ (英語) イメージにバンドルします。この Dockerfile を作成するには、新しく作成したフォルダー内で次のコマンドを実行します。
export DOCKER_HOST=tcp://<your-docker-host>.cloudapp.net:4243
docker --tls build --tag=registry-azure .
イメージが作成されたら、このイメージを使用して Docker レジストリ サーバーを実行するコンテナーを起動する必要があります。次のコマンドを実行します。
docker run -d -p 5000:5000 \
-e SETTINGS_FLAVOR=azureblob \
-e AZURE_STORAGE_ACCOUNT_NAME="<account name>" \
-e AZURE_STORAGE_ACCOUNT_KEY="<account key>" \
-e AZURE_STORAGE_CONTAINER=registry \
registry-azure
Virtual Machines のポート 5000 でリッスンしているクラウド上のコンテナーが起動し、このコンテナーに環境変数として指定の構成が渡されます。なお、この段階では、外部から新しい Docker イメージ レジストリにアクセスすることはできません。
ポート 5000 上の既定の Docker 内部 VM エンドポイントをポート 80 上の外部クラウド サービス エンドポイントにマップする Docker ホスト Virtual Machines に、エンドポイントを作成する必要があります。このためには、ポータルを使用するか、Azure クロス プラットフォーム コマンド ライン インターフェイスを使用して、次のコマンドを実行します。
azure vm endpoint create <VMname> 80 5000 -n HTTP
アップデートが完了すれば、プライベート レジストリの準備は完了です。Docker のエンジニアである Victor Vieux が、プライベート レジストリの使用方法に関する動画 (英語) を公開していますのでぜひご覧ください。セルフホストの Docker レジストリの認証、キャッシュなどの詳しい設定については、docker-registry ドキュメントをお読みください。
まとめ
これまでも、組み込みのストレージ ドライバー プラグインやコミュニティ提供のストレージ ドライバー プラグインを使用して、ローカル ファイル システムや AWS S3 や Google Cloud Storage 上でプライベート Docker レジストリをホストすることは可能でした。
今回、Microsoft Open Technologies のエンジニアである Jeff Mendoza が Docker Hack Day で発表したプロジェクトが契機となり、Azure BLOB Storage でもプライベート Docker レジストリをホストできるようになりました。このプロジェクトのソース コードは、オープン ソース (英語) として GitHub 上に公開されています。その他の Docker レジストリ コードベースと同様、Python で書かれたコードです。
Docker とのコラボレーションによって、1 つ上のレベルの Azure Storage サポートが実現されます。このサポートを利用すれば、Azure Storage ドライバーを組み込みストレージ ドライバーの 1 つとして出荷するために、Docker レジストリ "v2" を書き換える処理も容易になります。
今後もコンテナーと Docker の最新情報にご期待ください。
マイクロソフトでは、Azure チームのオープン ソース プロジェクトと Linux プロジェクトへの参加を希望する、オープン ソースへの関心と意欲の高い人材を募集しています。ご興味のある方は、ahmetb@microsoft.com まで電子メールでご連絡ください。
Ahmet Alp Balkan
Azure Compute エンジニア
@ahmetalpbalkan