今回はチュートリアル:Azure Container Registry をデプロイして使用するの深堀をしていきます。
このチュートリアルでは、前回ダウンロードしたアプリケーションのイメージを作成して、レジストリに登録するところまでをやっています。
イメージとコンテナ
OS などの実行環境と実行するアプリケーションを含んだものをとイメージと呼び、インスタンス化されてコンテナランタイムで実行されているものをコンテナと呼びます。コンテナというキーワードは技術全体をさす場合もあるため状況に応じて理解しましょう。
タグ
イメージのバージョニングはタグで行います。タグは以下のようにイメージの後につきます。
azure-vote-front:v1
azure-vote-front:v2
azure-vote-front:latest
タグを省略した場合、latest
タグが自動的に付与され、最新のイメージが利用されます。
コンテナレジストリ
コンテナの元であるイメージは、実行環境でビルドするかダウンロードしてきます。コンテナレジストリはビルド済のイメージを保持するサービスで、以下のような機能を提供します。
- イメージ本体およびタグなどのメタデータの保存
- ダウンロード要求に対する応答
- イメージ単位やユーザー単位に Readme の提供
- ユーザーの認証や認可
Docker は既定で Docker Hub というパブリックのコンテナレジストリを利用します。イメージをプライベートに管理運用したい場合は、有料の Docker Hub の機能を使ったり、Azure Container Registry (ACR) などクラウドサービスを使うことになります。
ACR は Azure が提供するコンテナレジストリであり、Azure AD と統合されたセキュリティやモニタ機能を使える他、プレビューですが VNET に組み込んで使うなどエンタープライズ向けの機能を提供します。
チュートリアルの深堀
では実際にチュートリアルを見ていきましょう。
ACR の作成
まずコンテナレジストリである ACR を作成しています。ACR を作成するホストと SKU は任意で選択できますが、個人的には全てのリソースを日本に作成したいため、eastjapan を利用します。
1. 手順では azure-cli を使っているため、Azure CLI のインストールを参考にインストールを実施。
2. シェルを起動して Azure にログイン。ブラウザが起動するので認証を実行。
az login
3. サブスクリプションが複数ある場合は適切なものを設定。
az account list # サブスクリプション一覧を表示
az account set -s <subscription id> # 利用するサブスクリプションを指定
az account show # 利用するサブスクリプションの表示
4. リソースグループの作成。ここではリソースグループ名は akstutorial、リージョンは東日本を指定。
az group create --name akstutorial --location japaneast
5. ACR の作成。名前はグローバルで一意のものを指定。SKU についてはこちらより違いを参照。
az acr create -g akstutorial -n kenakamuacr --sku basic
6. 作成した ACR にログイン。
az acr login -n kenakamuacr
イメージの準備
次に ACR にアップロードするイメージを前回ダウンロードしたアプリケーションを使って作成します。各イメージは以下の属性を持っています。
- レポジトリ名: イメージが格納されているレポジトリの名前
- タグ: イメージのタグ
- ID: イメージを一意に特定する ID
尚、同じイメージ ID に対して複数の名前やタグをつけることができます。
1. 現在ローカルにあるイメージを確認。前回のアプリケーションの状態のままであれば以下のように 3 つのイメージが存在。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest f1056b864e11 10 hours ago 965MB
redis latest 63130206b0fa 11 days ago 98.2MB
tiangolo/uwsgi-nginx-flask python3.6 b3b62e990e26 6 weeks ago 964MB
2. ACR のイメージは ACR のログインサーバー名/イメージ名:バージョン というタグの命名規則がある。まずは以下コマンドで ACR のログインサーバー名を取得。
- az acr list で ACR 一覧を取得
- query パラメーターで任意の値のみ取得
az acr list --resource-group akstutorial --query "[].{acrLoginServer:loginServer}" --output table
AcrLoginServer
----------------------
kenakamuacr.azurecr.io
3. azure-vote-front に対してタグを設定。以下の場合、レポジトリが kenakamuacr.azurecr.io/azure-vote-front
、タグが v1
となる
docker tag azure-vote-front kenakamuacr.azurecr.io/azure-vote-front:v1
4. 再度イメージの一覧を取得。タグをつけたイメージが表示される。IMAGE ID が azure-vote-front の f1056b864e11
と一致しているため、実体は同じ。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest f1056b864e11 11 hours ago 965MB
kenakamuacr.azurecr.io/azure-vote-front v1 f1056b864e11 11 hours ago 965MB
redis latest 63130206b0fa 11 days ago 98.2MB
tiangolo/uwsgi-nginx-flask python3.6 b3b62e990e26 6 weeks ago 964MB
ACR にイメージをプッシュ
最後に作成したイメージを ACR にプッシュ(アップロード)します。
1. docker push でイメージをプッシュ。タグより docker は自動的に ACR を検索してプッシュを実行。
docker push kenakamuacr.azurecr.io/azure-vote-front:v1
2. イメージをプッシュすると ACR にレポジトリが作成される。
az acr repository list --name kenakamuacr --output table
Result
----------------
azure-vote-front
3. タグも確認。
az acr repository show-tags --name kenakamuacr --repository azure-vote-front --output table
Result
--------
v1
まとめ
今回は ACR の作成とイメージのプッシュまでやりました。次回は AKS クラスターを作成します。