Azure Container Registry
プライベートの Azure Container Registry に Docker イメージをビルドしてプッシュし、ロールの割り当てでアクセスを管理して、ACR Tasks でイメージのビルドを自動化します。
「Azure Container Registry」はCoddyKit上の無料Azure Fundamentalsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAzure Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Azure Fundamentalsコースには全4レッスンが含まれています。
Azure Container Registry とは
Azure Container Registry(ACR)は、オープンソースの Docker Registry 2.0 を基盤とする、マネージド型のプライベート Docker レジストリ サービスです。Azure のデプロイで使用するコンテナー イメージと関連アーティファクト(Helm chart、OCI アーティファクト)を保存および管理します。ACR は Azure Kubernetes Service(AKS)、Azure Container Instances(ACI)、App Service とネイティブに統合され、資格情報を管理せずにシームレスにイメージをプルできます。
ACR のサービス レベル
ACR には 3 つのサービス レベルがあります。Basicは、10 GB のストレージと限定的な webhook サポートを備えた、学習やスループットの低い開発向けのコスト最適化レベルです。Standardでは、geo レプリケーション機能とスループットが向上し、ほとんどの本番ワークロードに適しています。Premiumには、geo レプリケーション、コンテンツの信頼性、プライベート リンク、カスタマー マネージド キー、最高帯域幅が含まれ、エンタープライズのセキュリティ要件に必要です。
# Create a Premium ACR in East US
az acr create \
--name mycontainerregistry \
--resource-group MyRG \
--location eastus \
--sku Premium
# List ACR instances in the subscription
az acr list --query '[].{name:name, sku:sku.name, loginServer:loginServer}' -o tableACR へのイメージのプッシュ
Docker イメージを ACR にプッシュするには、Docker クライアントで認証し、ACR のログイン サーバー ホスト名を付けてローカル イメージにタグを付けてから、プッシュします。ACR ログイン サーバーの URL は <registryname>.azurecr.io の形式です。認証には、az acr login を使用した Azure AD 資格情報(対話形式での使用)、または自動化されたパイプライン用の ACR 管理者パスワードやサービス プリンシパルを使用します。
# Authenticate to ACR
az acr login --name mycontainerregistry
# Tag a local image for ACR
docker tag myapp:latest mycontainerregistry.azurecr.io/myapp:v1.0
# Push the image
docker push mycontainerregistry.azurecr.io/myapp:v1.0
# List images in the registry
az acr repository list --name mycontainerregistry -o table
az acr repository show-tags --name mycontainerregistry --repository myappACR Tasks:クラウドベースのビルド
ACR Tasksを使用すると、ローカルの Docker デーモンなしでクラウド上に Docker イメージをビルドできます。クイック タスク(az acr build)では、ビルド コンテキストを ACR に送信して Dockerfile をリモートで実行し、イメージをレジストリに直接保存します。スケジュールまたはトリガーに基づくタスクでは、ベース イメージが更新されたときや GitHub にコードがコミットされたときにイメージを自動的に再ビルドできます。これにより、別のビルド エージェントを使用せずに、完全なコンテナー CI パイプラインを構築できます。
# Quick task: build and push without local Docker
az acr build \
--registry mycontainerregistry \
--image myapp:v1.0 \
. # build context (current directory with Dockerfile)
# Define a multi-step ACR Task triggered on commit
az acr task create \
--name buildAndTest \
--registry mycontainerregistry \
--context https://github.com/myorg/myrepo.git \
--file acr-task.yaml \
--git-access-token <GITHUB_PAT>RBAC によるアクセス制御
ACR は Azure RBAC と統合されており、きめ細かなアクセス制御が可能です。組み込みの ACR ロールには、AcrPull(イメージのプルのみ。デプロイ サービス向け)、AcrPush(プルとプッシュ。CI/CD パイプライン向け)、AcrDelete(イメージ タグの管理)があります。AKS または App Service のマネージド ID に AcrPull ロールを割り当てると、資格情報をどこにも保存せずにコンテナーでイメージをプルできます。
# Grant AKS cluster's managed identity the AcrPull role
ACR_ID=$(az acr show --name mycontainerregistry --resource-group MyRG --query id -o tsv)
AKS_IDENTITY=$(az aks show --name myAKSCluster --resource-group MyRG \
--query identityProfile.kubeletidentity.objectId -o tsv)
az role assignment create \
--assignee $AKS_IDENTITY \
--role AcrPull \
--scope $ACR_IDグローバル デプロイのための geo レプリケーション
Geo レプリケーション(Premium レベル)では、レジストリを複数の Azure リージョンに複製します。あるリージョンの AKS または ACI がイメージをプルすると、リモート レジストリではなく最寄りのレプリカから読み取るため、待機時間と送信データ転送コストを削減できます。レプリケーションは透過的に行われます。同じイメージ URI をグローバルに使用でき、ACR がプル要求を地理的に最も近いレプリカへ自動的にルーティングします。
# Add a geo-replication to West Europe
az acr replication create \
--name westeurope \
--registry mycontainerregistry \
--location westeurope
# List all replicas
az acr replication list \
--registry mycontainerregistry \
--query '[].{name:name, location:location, status:provisioningState}' -o tableコンテンツの信頼性とイメージ署名
コンテンツの信頼性(Premium レベル)では Docker Notary を使用し、署名済みイメージのみをレジストリからプルできるようにします。ACR でコンテンツの信頼性を有効にすると、署名されていないイメージは拒否されます。署名は、Docker Content Trust ツールチェーンと信頼されたキーペアを使用して CI パイプラインで実行します。これにより、悪意のあるイメージがプッシュされて本番環境にデプロイされるサプライ チェーン攻撃を防止できます。
# Enable content trust on the registry
az acr config content-trust update \
--registry mycontainerregistry \
--status enabled
# Sign an image when pushing (DOCKER_CONTENT_TRUST env var)
# export DOCKER_CONTENT_TRUST=1
# docker push mycontainerregistry.azurecr.io/myapp:v1.0
# (Docker prompts for signing key passphrase)Defender による脆弱性スキャン
Microsoft Defender for Containersを有効にすると、ACR にプッシュされたすべてのイメージが、既知の OS およびアプリケーション レイヤーの脆弱性(CVE)について自動的にスキャンされます。Defender は、重大度(Critical、High、Medium、Low)別に脆弱性を一覧表示したレポートを作成し、修復に関するガイダンスを提供します。Azure Policy との統合を通じて、重大な脆弱性があるイメージの AKS クラスターへのデプロイをブロックするポリシーを構成できます。
# Enable Defender for Containers on the subscription
az security pricing create \
--name Containers \
--tier Standard
# View vulnerability assessment results
az security assessment list \
--query "[?contains(displayName, 'Container')].{name:displayName, status:status.code}" \
-o tableACR のプライベート エンドポイント
最大限のセキュリティを確保するには、ACR のパブリック ネットワーク アクセスを無効にし、VNet 内のプライベート エンドポイント経由のみで接続します。これにより、コンテナー イメージがパブリック インターネット経由で転送されることはなく、すべてのプルが Azure のプライベート バックボーンを経由します。プライベート DNS ゾーン(privatelink.azurecr.io)を構成し、レジストリのホスト名が VNet 内のプライベート IP アドレスに解決されるようにします。
# Create a private endpoint for ACR
az network private-endpoint create \
--name acr-private-endpoint \
--resource-group MyRG \
--vnet-name MyVNet \
--subnet PrivateEndpointSubnet \
--private-connection-resource-id \
$(az acr show --name mycontainerregistry --query id -o tsv) \
--group-id registry \
--connection-name acrConnection
# Disable public access
az acr update \
--name mycontainerregistry \
--public-network-enabled falseライフサイクル管理:古いイメージの削除
ライフサイクル管理を行わないと、コンテナー レジストリには古いイメージ タグが数千件も蓄積し、高価なストレージを消費します。ACR purge タスク(組み込みのタイマー タスク)を使用して、指定した期間より古いタグなしマニフェストとタグを削除します。az acr task create と acr purge コマンドを使用して、特定のリポジトリを対象にし、最近のタグを最小数残すパージをスケジュール実行します。
# Create a scheduled purge task: delete tags older than 30d
az acr task create \
--name scheduledPurge \
--registry mycontainerregistry \
--cmd 'acr purge --filter myapp:.* --ago 30d --keep 5 --untagged' \
--schedule '0 1 * * *' \
--context /dev/nullACR と AKS の統合
AKS を ACR に接続する最も簡単な方法は、az aks update --attach-acr コマンドを使用することです。このコマンドにより、AKS のマネージド ID に AcrPull ロールが自動的に付与されます。接続後は、Kubernetes の Pod 仕様で完全な ACR ホスト名だけを使用してイメージを参照します。AKS がノードレベルでマネージド ID を使用して透過的に認証するため、imagePullSecrets は必要ありません。
# Attach ACR to an existing AKS cluster
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--attach-acr mycontainerregistry
# Now pods can use ACR images without imagePullSecrets
# Example pod spec:
# spec:
# containers:
# - name: myapp
# image: mycontainerregistry.azurecr.io/myapp:v1.0クイックチェック
このレッスンで学んだ Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、Azure Container Registry (ACR) が Docker イメージを保存するマネージド プライベート レジストリであること、ACR Tasks によりローカルの Docker デーモンなしでクラウド上のイメージ ビルドを実行できること、そして RBAC ロール (AcrPull、AcrPush) によってデプロイ サービスや CI/CD パイプラインへのアクセスを制御できることを学びました。次は Azure Container Instances について学びます。
よくある質問
「Azure Container Registry」レッスンは無料ですか?
はい。「Azure Container Registry」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Azure Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Azure Fundamentalsコースには全4レッスンが含まれています。
「Azure Container Registry」で何を学びますか?
プライベートの Azure Container Registry に Docker イメージをビルドしてプッシュし、ロールの割り当てでアクセスを管理して、ACR Tasks でイメージのビルドを自動化します。 ブラウザで直接実行するハンズオンコードでAzure Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Azure Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAzure Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Azure Container Registry」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAzure Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのAzure Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Azure Container Registry
- Azure Container Instances
- Azure 向け Kubernetes の概念
- AKS へのワークロードのデプロイ