Deploy a web app to Azure Container Registry and run it on Azure Container Instances

Tech Knowledge
Published on October 14, 2024

前提知識

Azure Container Registry タスクを使用して、イメージのビルド、テスト、プッシュ、Azure へのデプロイを効率化します。たとえば、az acr build を使用して Docker ビルド操作を Azure にオフロードすることで、開発の内部ループをクラウドに拡張します。基本イメージが更新されたときにアプリケーション イメージを自動的にリビルドするようにタスクを構成するか、チームがコードを Git リポジトリにコミットしたときのイメージ ビルドを自動化します。クラウドでの複数のコンテナー イメージのビルド、テスト、修正プログラムの適用の並列実行を自動化するマルチステップ タスクを作成します。タスク スケージュルを使用して、時間ベースのタスクを自動化します。

※オフロードとは「特定のタスクや処理を他のリソースやデバイスに 移譲(オフロード) すること」

Azure Container Instances (ACI) でワークロードを実行することで、アプリケーションの設計と開発に集中できます。アプリケーションを実行するインフラストラクチャの管理を心配する必要はありません。

手順

1コンテナー レジストリを作成する(Azure ポータル)

(1) 作成

ホーム > リソースの作成 > コンテナー > Container Registry

  • リソースグループ: 選択
  • レジストリ名: 任意(英数のみ)
  • 場所: リージョンを選択
  • Pricing plan: Basic(デフォルトは Standard)

「確認および作成」ボタンを押下

(2) ユーザー名、パスワードの確認

「リソース」ボタンを押下 > 設定 > アクセス キー 「管理者ユーザー」をチェック > コンテナー レジストリのユーザー名とパスワードが表示される。 レジストリ名、ログイン サーバー、ユーザー名、およびパスワードをメモ。

2Azure Container Registry にイメージをアップロードする(コマンドプロンプト)

(1) イメージにレジストリの名前でタグを付ける。

docker tag イメージ名 レジストリ名.azurecr.io/イメージ名

例)
docker tag reservationsystem:latest korochin.azurecr.io/reservationsystem:latest
docker images

C:\work\DockerSample\mslearn-hotel-reservation-system\src>docker images
REPOSITORY                               TAG       IMAGE ID       CREATED       SIZE
korochin.azurecr.io/reservationsystem    latest    69fcfb446922   4 hours ago   1.87GB
reservationsystem                        latest    69fcfb446922   4 hours ago   1.87GB

(2) Azure Container Registry にサインイン

コンテナー レジストリのユーザー名とパスワードを入力

docker login ログインサーバー

例)
C:\work\DockerSample\mslearn-hotel-reservation-system\src>docker login korochin.azurecr.io
Username: korochin
Password:

Login Succeeded

(3) Azure Container Registry のレジストリにイメージをアップロード

docker push レジストリ.azurecr.io/イメージ名

例)
C:\work\DockerSample\mslearn-hotel-reservation-system\src>docker push hoge.azurecr.io/reservationsystem:latest
The push refers to repository [hoge.azurecr.io/reservationsystem]
5f70bf18a086: Pushed
bd9055e56360: Pushed
9deed61a3a7d: Pushed
ed2725ff7639: Pushed
9b080d1e6444: Pushed
05e63465719b: Pushed
7a562491352c: Pushed
30722e965f80: Pushed
b668f0edb776: Pushed
bbf1566d0fe0: Pushed
99064051b3ca: Pushed
bee1e39d7c3a: Pushed
1f59a4b2e206: Pushed
0ca7f54856c0: Pushed
ebb9ae013834: Pushed
latest: digest: sha256:6002f5110b291746e24b77497f950e35b9aab0c5ac2d8a8da1a9708c073439bb size: 3675

3レジストリの内容を確認する(Azure ポータル)

コンテナー レジストリのサービス > リポジトリ アップロードしたイメージがリポジトリの一覧に表示される

4Azure コンテナー インスタンスを使用してイメージを読み込んで実行する

(1) 作成

ホーム > リソースの作成 > コンテナー > Container Instances

基本タブ
  • リソースグループ: 選択
  • コンテナー名: 任意
  • リージョン: 選択
  • SKU: 標準
  • イメージ ソース: その他のレジストリ
  • イメージの種類: プライベート
  • イメージ: .azurecr.io/reservationsystem:latest
  • イメージ レジストリのログイン サーバー: レジストリ名.azurecr.io
  • イメージ レジストリのユーザー名: レジストリのユーザー名
  • イメージ レジストリのパスワード: レジストリのパスワード
ネットワークタブ
  • ネットワークの種類: パブリック(デフォルト値)
  • DNS 名ラベル: 任意
  • DNS 名ラベル スコープの再利用: テナント(デフォルト値)
  • ポート: 80(デフォルト値)
  • ポートのプロトコル: TCP(デフォルト値)

※DNS 名ラベルに何らかの値を設定しないと FQDN が生成されないので注意

詳細タブ
  • 再起動ポリシー: 常時
  • 環境変数: デフォルトのまま(空白)
  • コマンドのオーバーライド: デフォルトのまま([ ])

「確認および作成」ボタンを押下 > 「作成」ボタンを押下

(2) FQDN の確認

デプロイが完了したら「リソースに移動」ボタンを押下 [概要] ペインで、コンテナー インスタンスの完全修飾ドメイン名 (FQDN) を確認 http://FQDN/ でアクセスできるようになる。

例)
http://FQDN/api/reservations/1

参考

Docker を使用してコンテナー化された Web アプリケーションを構築する
演習 - Azure コンテナー インスタンスに Docker イメージをデプロイする
Azure でコンテナーを管理する