0Pricing
Azure Fundamentals · レッスン

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 table

ACR へのイメージのプッシュ

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 myapp

ACR 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 table

ACR のプライベート エンドポイント

最大限のセキュリティを確保するには、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/null

ACR と 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Azure Container Registry
  2. Azure Container Instances
  3. Azure 向け Kubernetes の概念
  4. AKS へのワークロードのデプロイ
← Azure Fundamentalsに戻る