演習 - Azure コンテナー インスタンスに Docker イメージをデプロイする
Azure コンテナー インスタンスでは、Azure で Docker イメージを実行することができます。
先ほどの演習で、Web アプリをローカルの Docker イメージとしてパッケージ化し、テストしました。 ここでは、その演習の出力を使用し、Web アプリケーションをグローバルに利用できるようにしたいものとします。 この可用性を実現するために、イメージを Azure コンテナー インスタンスとして実行します。
この演習では、Web アプリのイメージをリビルドし、それを Azure Container Registry にアップロードします。 イメージを実行するには、Azure コンテナー インスタンス サービスを使用します。
重要
この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
コンテナー レジストリを作成する
自分の Azure サブスクリプションを使用して、Azure portal にサインインします。
リソース メニューで、または [ホーム] ページから、[リソースの作成] を選択します。 [リソースの作成] ウィンドウが表示されます。
メニューで、[コンテナー]、[コンテナー レジストリ] の順に選択します。
[コンテナー レジストリの作成] ペインが表示されます。
[基本] タブで、各設定に対して次の値を入力します。
設定 値 プロジェクトの詳細 サブスクリプション リソースの作成と管理が許可されている、ご自分の Azure サブスクリプションを選択します。 Resource group [新規リソース グループの作成] を選択し、learn-deploy-container-aci-rg という名前の新しいリソース グループを入力します。 選択した名前を忘れないでください。このモジュールの残りの演習で使用します。 また、モジュールの操作が完了したら、このリソースをクリーンアップすることを忘れないでください。 インスタンスの詳細 レジストリ名 任意の名前を選択します。 レジストリの名前は Azure 内で一意にする必要があります。また、5 ~ 50 文字の英数字を含める必要があります。 場所 自分に近い場所を選択します。 可用性ゾーンを使用する 既定値のままにします。 料金プラン Standard [Review + create](レビュー + 作成) を選択します。 [検証に成功しました] という通知が表示されたら、[作成] を選択します。 コンテナー レジストリがデプロイされるまで待ってから、次に進みます。
[リソースに移動] を選択します。 [コンテナー レジストリ] ペインには、コンテナー レジストリに関する基本情報が表示されます。
リソース メニューの [設定] で、[アクセス キー] を選択します。 コンテナー レジストリの [アクセス キー] ペインが表示されます。
管理者ユーザー設定が無効になっている場合は、管理者ユーザー アクセス キーの横にあるボックスにチェックを入れます。 ご自分のコンテナー レジストリのユーザー名とパスワードが表示されます。
ご自分のコンテナー レジストリのレジストリ名、ログイン サーバー、ユーザー名、およびパスワードをメモしておきます。
Note
この演習では、イメージをアップロードしてレジストリをテストできるように、管理者アカウントのアクセスを有効にします。 運用環境では、管理者ユーザー アカウントのアクセスを無効にし、レジストリが想定どおりに動作していることを確認したらすぐに Microsoft Entra ID Protection を使用することが重要です。
Azure Container Registry にホテル予約システム アプリのイメージをアップロードする
ローカルのコマンド プロンプトで、次のコマンドを実行し、
<registry-name>
をご自分のコンテナー レジストリの名前に置き換えて、現在のreservationsystem
イメージにご自分のレジストリの名前でタグを付けます。docker tag reservationsystem:latest <registry-name>.azurecr.io/reservationsystem:latest
docker image ls
コマンドを実行し、イメージに正しくタグが付けられたことを確認します。docker image ls
次のような出力結果が表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest a56281e7038f 4 minutes ago 1.76GB <registry-name>.azurecr.io/reservationsystem latest a56281e7038f 4 minutes ago 1.76GB
コマンド プロンプトで、Azure Container Registry にサインインします。
docker login
コマンドを使用して、先ほどメモしたレジストリのログイン サーバーを指定します。 プロンプトが表示されたら、ご自分のアクセス キーのユーザー名とパスワードを入力します。docker login <login-server>
Note
アプリケーションが Microsoft Entra ID に登録されていないというエラー応答がデーモンから返される場合があります。 この演習で既に説明したように、デプロイをテストするために、管理者ユーザー アクセス キーを有効にしました。
次のコマンドを入力して、
<registry-name>
をご自分のレジストリ名に置き換えて、Azure Container Registry のレジストリにイメージをアップロードします。docker push <registry-name>.azurecr.io/reservationsystem:latest
アップロードが完了するまで待ちます。 このプロセスでは、イメージのすべてのオブジェクトがリポジトリにプッシュされるまでに数分かかります。 Waiting から、Preparing、Pushing、Pushed へと各オブジェクトが変化していく進行状況を観察することができます。
レジストリの内容を確認する
この演習の残りの部分では、Azure portal に戻ります。
Azure ポータルで、コンテナー レジストリに戻ります。
リソース メニューの [サービス] で [リポジトリ] を選択します。 コンテナー レジストリの [リポジトリ] ペインが表示されます。
reservationsystem リポジトリが表示されていることを確認します。 reservationsystem リポジトリを選択し、そのリポジトリに latest タグが付いたイメージが含まれていることを確認します。
Azure コンテナー インスタンスを使用してイメージを読み込んで実行する
Azure Portal で、 [リソースの作成] を選択します。 [リソースの作成] ウィンドウが表示されます。
リソース メニューで、[コンテナー]、[コンテナー インスタンス] の順に選択します。
[コンテナー インスタンスの作成] ペインが表示されます。
コンテナー インスタンスを構成するには、いくつかの手順を実行します。 まず、リソース グループの情報とコンテナーの詳細を設定します。 次に、コンテナーのネットワーク オプションを構成し、ポリシーを再起動します。
[基本] タブで、各設定に対して次の値を入力します。
設定 値 プロジェクトの詳細 サブスクリプション リソースの作成と管理が許可されている、既定の Azure サブスクリプションを選択します Resource group 既存のリソース グループ learn-deploy-container-aci-rg を再利用します コンテナーの詳細 コンテナー名 hotelsysteminstance リージョン 既定の場所を使用します 可用性ゾーン "既定値" をそのまま使用します。 SKU Standard イメージ ソース その他のレジストリ イメージの種類 非公開 Image <registry-name>.azurecr.io/reservationsystem:latest イメージ レジストリのログイン サーバー レジストリのログイン サーバー名を入力します イメージ レジストリのユーザー名 レジストリのユーザー名を入力します イメージ レジストリのパスワード レジストリのパスワードを入力します OS の種類 Linux サイズ 1 vCPU、1.5 Gib メモリ、0 GPU に設定された既定の "サイズ" のままにします [次へ: ネットワーク] を選択します。
[ネットワーク] タブで、各設定に対して次の値を入力します。
設定 値 ネットワークの種類 パブリック DNS 名ラベル 一意の名前を選択します。これは、コンテナーの URL の一部として使用されます。 DNS 名ラベル スコープの再利用 "既定値" をそのまま使用します。 ポート ポート 80 ポートのプロトコル TCP [次: 詳細] を選択します。
[詳細] タブで、各設定に対して次の値を入力します。
設定 値 再起動ポリシー 常時 環境変数 "すべての設定を空白のままにする" コマンドのオーバーライド 空白のまま [Review + create](レビュー + 作成) を選択します。 検証が完了するまで待機し、必要に応じてエラーを修正します。
[作成] を選択します
コンテナー インスタンスが作成されたら、[リソースに移動] を選択します。 コンテナー インスタンス ペインが表示されます。
[概要] ペインで、コンテナー インスタンスの完全修飾ドメイン名 (FQDN) を見つけます。
Web ブラウザーを使用して、URL
http://FQDN/api/reservations/1
に移動します。ここで、FQDN をお使いのコンテナー インスタンスの完全修飾ドメイン名に置き換えます。 たとえば、上のスクリーンショットで表示されている FQDN を使用すると、次のようになります。http://hotel.southcentralus.azurecontainer.io/api/reservations/1
Web アプリは、予約 1 の詳細を含む JSON オブジェクトを使用して応答します。
おめでとうございます。 Azure Container Registry に Docker イメージをアップロードし、Azure コンテナー インスタンス サービスを使用してイメージを実行しました。