Azure Container Registry のアーティファクト キャッシュ

アーティファクト キャッシュ機能を使用すると、ユーザーはコンテナー イメージをプライベート コンテナー レジストリにキャッシュできます。 アーティファクト キャッシュは、BasicStandardPremiumサービス レベルで利用できます。

アーティファクト キャッシュは、パブリック リポジトリとプライベート リポジトリの両方にキャッシュ ソリューションを提供することで、コンテナー イメージの管理を強化します。

アーティファクト キャッシュは、Azure Container Registry (ACR) を通じたより高速で "信頼性の高いプル操作" を提供し、geo レプリケーションや可用性ゾーンのサポートなどの機能を利用して、より高い可用性と高速なイメージ プルを実現します。

アーティファクト キャッシュによって、ユーザーがファイアウォール構成とコンプライアンス標準にシームレスに従うために "プライベート ネットワーク" 経由でキャッシュされたレジストリにアクセスすることが可能になります。

アーティファクト キャッシュは、パブリック レジストリによって課されるプル制限の課題を解決します。 アップストリームのソース資格情報を使用してキャッシュ ルールを認証することをお勧めします。 次に、レート制限の軽減に役立つように、ローカル ACR からイメージをプルします。

用語

  • キャッシュ規則 - キャッシュ規則は、サポートされているリポジトリからキャッシュに成果物をプルするために作成できる規則です。

    • キャッシュ規則には、次の 4 つの部分が含まれています。

      • 規則名 - キャッシュ規則の名前。 たとえば、「 Hello-World-Cache 」のように入力します。

      • ソース - ソース レジストリの名前。

      • リポジトリ パス - キャッシュする成果物を検索および取得するリポジトリのソース パス。 たとえば、「 docker.io/library/hello-world 」のように入力します。

      • 新しい ACR リポジトリ名前空間 - 成果物を格納するための新しいリポジトリ パスの名前。 たとえば、「 hello-world 」のように入力します。 このリポジトリは、ACR インスタンス内に既に存在していることはできません。

  • 資格情報

    • 資格情報は、ソース レジストリのユーザー名とパスワードのセットです。 パブリック リポジトリまたはプライベート リポジトリで認証するには、資格情報が必要です。 資格情報には 4 つの部分が含まれています

      • 資格情報 - 資格情報の名前。

      • ソース レジストリ ログイン サーバー - ソース レジストリのログイン サーバー。

      • ソース認証 - 資格情報を格納するキー コンテナーの場所。

      • ユーザー名とパスワードのシークレット - ユーザー名とパスワードを含むシークレット。

制限事項

  • キャッシュは、使用可能なコンテナー イメージで少なくとも 1 つのイメージ プルが完了した後にのみ発生します。 新しいイメージが使用可能になるたびに、新しいイメージ プルが完了する必要があります。 アーティファクト キャッシュは、新しいタグが利用できるようになっても、新しいタグのイメージを自動的にはプルしません。 これはロードマップに含まれていますが、このリリースではサポートされていません。

  • アーティファクト キャッシュがサポートしているキャッシュ ルール数は 1,000 までです。

アップストリームのサポート

アーティファクト キャッシュが現在サポートしているアップストリーム レジストリは以下のとおりです。

警告

Docker Hub からコンテンツをソーシングする場合は資格情報セットを作成することをお勧めします。

アップストリーム レジストリ サポート 可用性
Docker Hub 認証されたプルと認証されていないプルの両方がサポートされます。 Azure CLI
Docker Hub 認証されているプルのみがサポートされます。 Azure portal
Microsoft アーティファクト レジストリ 認証されていないプルのみがサポートされます。 Azure CLI、Azure portal
AWS Elastic Container Registry (ECR) パブリック ギャラリー 認証されていないプルのみがサポートされます。 Azure CLI、Azure portal
GitHub Container Registry 認証されたプルと認証されていないプルの両方がサポートされます。 Azure CLI、Azure portal
Quay 認証されたプルと認証されていないプルの両方がサポートされます。 Azure CLI、Azure portal
registry.k8s.io 認証されたプルと認証されていないプルの両方がサポートされます。 Azure CLI
Google Container Registry 認証されたプルと認証されていないプルの両方がサポートされます。 Azure CLI

ワイルドカード

ワイルドカードでは、アスタリスク (*) を使用し、コンテナー イメージ レジストリ内の複数のパスを照合します。 アーティファクト キャッシュが現在サポートしているワイルドカードは以下のとおりです。

Note

キャッシュ ルールは、ターゲット リポジトリからソース リポジトリにマップされます。

レジストリ レベルのワイルドカード

レジストリ レベルのワイルドカードを使用すると、アップストリーム レジストリからすべてのリポジトリをキャッシュできます。

キャッシュ ルール マッピング
contoso.azurecr.io/* => mcr.microsoft.com/* ACR の下にあるすべてのイメージを MCR にマッピング。 contoso.azurecr.io/myapp/image1 => mcr.microsoft.com/myapp/image1
contoso.azurecr.io/myapp/image2 => mcr.microsoft.com/myapp/image2

リポジトリ レベルのワイルドカード

リポジトリ レベルのワイルドカードを使用すると、アップストリーム レジストリ マッピングからリポジトリ プレフィックスにすべてのリポジトリをキャッシュできます。

キャッシュ ルール マッピング
contoso.azurecr.io/dotnet/* => mcr.microsoft.com/dotnet/* ACR 下の特定のリポジトリをそれに対応する MCR のリポジトリにマッピングします。 contoso.azurecr.io/dotnet/sdk => mcr.microsoft.com/dotnet/sdk
contoso.azurecr.io/dotnet/runtime => mcr.microsoft.com/dotnet/runtime
contoso.azurecr.io/library/dotnet/* => mcr.microsoft.com/dotnet/*
contoso.azurecr.io/library/python/* => docker.io/library/python/*
ACR 下の特定のリポジトリを、さまざまなアップストリーム レジストリからリポジトリにマッピングします。 contoso.azurecr.io/library/dotnet/app1 => mcr.microsoft.com/dotnet/app1
contoso.azurecr.io/library/python/app3 => docker.io/library/python/app3

ワイルドカード ベースのキャッシュ ルールの制限事項

ワイルドカード キャッシュ ルールでは、アスタリスク (*) を使用し、コンテナー イメージ レジストリ内の複数のパスを照合します。 これらのルールは、他のワイルドカード キャッシュ ルールと重複できません。 つまり、特定のレジストリ パスにワイルドカード キャッシュ ルールがある場合、それと重複する別のワイルドカード ルールを追加することはできません。

重複するルールの例をいくつか次に示します。

例 1:

既存のキャッシュ ルール: contoso.azurecr.io/* => mcr.microsoft.com/*
追加される新しいキャッシュ: contoso.azurecr.io/library/* => docker.io/library/*

ターゲット リポジトリ パス contoso.azurecr.io/library/* が既存のワイルドカード ルール contoso.azurecr.io/* と重複するため、新しいキャッシュ ルールの追加はブロックされます。

例 2:

既存のキャッシュ ルール: contoso.azurecr.io/library/* =>mcr.microsoft.com/library/*
追加される新しいキャッシュ: contoso.azurecr.io/library/dotnet/* =>docker.io/library/dotnet/*

ターゲット リポジトリ パス contoso.azurecr.io/library/dotnet/* が既存のワイルドカード ルール contoso.azurecr.io/library/* と重複するため、新しいキャッシュ ルールの追加はブロックされます。

静的/固定キャッシュ ルールの制限事項

静的または固定キャッシュ ルールはもっと具体的なものであり、ワイルドカードは使用しません。 ワイルドカードベースのキャッシュ ルールと重複してもかまいません。 キャッシュ ルールが固定のリポジトリ パスを指定する場合は、ワイルドカードベースのキャッシュ ルールとの重複が許可されます。

例 1:

既存のキャッシュ ルール: contoso.azurecr.io/* =>mcr.microsoft.com/*
追加される新しいキャッシュ: contoso.azurecr.io/library/dotnet =>docker.io/library/dotnet

contoso.azurecr.io/library/dotnet は静的パスであり、ワイルドカード キャッシュ ルール contoso.azurecr.io/* と重複しても良いため、新しいキャッシュ ルールの追加は許可されます。

アーティファクト キャッシュを有効にする - Azure CLI

以下の手順に従うことで、Azure CLI を使用して認証有りまたは無しで Azure Container Registry のアーティファクト キャッシュを有効にすることができます。

前提条件

  • この記事のサンプル コマンドは、Azure Cloud Shell または Azure CLI のローカル インストールを使用して実行できます。 これをローカルで使用したい場合は、バージョン 2.46.0 以降が必要です。 az --version を実行してバージョンを確認します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
  • 資格情報を格納するための既存の Key Vault があります。 Key Vault での資格情報の作成と格納に関する詳細を確認してください。
  • Key Vault からシークレットを設定および取得できます。 Key Vault からシークレットを設定および取得する方法の詳細を確認してください。

資格情報を使用せずにキャッシュ ルールを構成して作成します。

  1. az acr Cache create コマンドを実行してキャッシュ ルールを作成します。

    • たとえば、特定の MyRegistry Azure Container Registry の資格情報セットがないキャッシュ ルールを作成します。
    az acr Cache create -r MyRegistry -n MyRule -s docker.io/library/ubuntu -t ubuntu-
    
  2. az acr Cache show コマンドを実行してキャッシュ ルールを表示します。

    • たとえば、特定の MyRegistry Azure Container Registry のキャッシュ ルールを表示します。
     az acr Cache show -r MyRegistry -n MyRule
    

資格情報を作成する

資格情報を構成する前に、Azure KeyVault にシークレットを作成して格納し、Key Vault からシークレットを取得する必要があります。 Key Vault での資格情報の作成と格納に関する詳細を確認してください。そして Key Vault でシークレットの設定と取得を行うこと。

  1. az acr credential set create コマンドを実行して、資格情報を作成します。

    • たとえば、特定の MyRegistry Azure Container Registry の資格情報を作成します。
    az acr credential-set create 
    -r MyRegistry \
    -n MyRule \
    -l docker.io \ 
    -u https://MyKeyvault.vault.azure.net/secrets/usernamesecret \
    -p https://MyKeyvault.vault.azure.net/secrets/passwordsecret
    
  2. az acr credential set update を実行して、資格情報セットのユーザー名またはパスワード KV シークレット ID を更新します。

    • たとえば、資格情報のユーザー名またはパスワード KV シークレット ID を更新するには、特定の MyRegistry Azure Container Registry を設定します。
    az acr credential-set update -r MyRegistry -n MyRule -p https://MyKeyvault.vault.azure.net/secrets/newsecretname
    
  3. az-acr-credential-set-show を実行して資格情報を表示します。

    • たとえば、特定の MyRegistry Azure Container Registry の資格情報を表示します。
    az acr credential-set show -r MyRegistry -n MyCredSet
    

資格情報を使用してキャッシュ ルールを構成して作成する

  1. az acr cache create コマンドを実行してキャッシュ ルールを作成します。

    • たとえば、特定の MyRegistry Azure Container Registry の資格情報を使用してキャッシュ ルールを作成します。
    az acr cache create -r MyRegistry -n MyRule -s docker.io/library/ubuntu -t ubuntu -c MyCredSet
    
  2. az acr cache update コマンドを実行して、キャッシュ ルールの資格情報を更新します。

    • たとえば、特定の MyRegistry Azure Container Registry のキャッシュ ルールで資格情報を更新します。
    az acr cache update -r MyRegistry -n MyRule -c NewCredSet
    
    • たとえば、特定の MyRegistry Azure Container Registry の既存のキャッシュ ルールから資格情報を削除します。
    az acr cache update -r MyRegistry -n MyRule --remove-cred-set
    
  3. az acr cache show コマンドを実行してキャッシュ ルールを表示します。

    • たとえば、特定の MyRegistry Azure Container Registry のキャッシュ ルールを表示します。
     az acr cache show -r MyRegistry -n MyRule
    

Key Vault にアクセス許可を付与する

  1. Key Vault にアクセスするために使用されているシステム ID のプリンシパル ID を取得します。

    PRINCIPAL_ID=$(az acr credential-set show 
                    -n MyCredSet \ 
                    -r MyRegistry  \
                    --query 'identity.principalId' \ 
                    -o tsv) 
    
  2. イメージをプルする前に、az keyvault set-policy コマンドを実行して、キー コンテナーへのアクセス権を割り当てます。

    • たとえば、資格情報のアクセス許可を割り当てるには、KeyVault シークレットにアクセスします
    az keyvault set-policy --name MyKeyVault \
    --object-id $PRINCIPAL_ID \
    --secret-permissions get
    

イメージをプルする

  1. レジストリ ログイン サーバー名、リポジトリ名、および目的のタグで Docker コマンドを使用して、キャッシュからイメージをプルします。

    • たとえば、特定のレジストリ ログイン サーバー myregistry.azurecr.io の目的のタグ latest を使用してリポジトリ hello-world からイメージをプルする場合などです。
     docker pull myregistry.azurecr.io/hello-world:latest
    

リソースのクリーンアップ

  1. az acr cache list コマンドを実行して、Azure Container Registry のキャッシュ ルールを一覧表示します。

    • たとえば、特定の MyRegistry Azure Container Registry のキャッシュ ルールを一覧表示します。
     az acr cache list -r MyRegistry
    
  2. az acr cache delete コマンドを実行して、キャッシュ ルールを削除します。

    • たとえば、特定の MyRegistry Azure Container Registry のキャッシュ ルールを削除します。
    az acr cache delete -r MyRegistry -n MyRule
    
  3. az acr credential set list を実行して、Azure Container Registry 内の資格情報を一覧表示します。

    • たとえば、特定の MyRegistry Azure Container Registry の資格情報を一覧表示します。
    az acr credential-set list -r MyRegistry
    
  4. az-acr-credential-set-delete を実行して資格情報を削除します。

    • たとえば、特定の MyRegistry Azure Container Registry の資格情報を削除します。
    az acr credential-set delete -r MyRegistry -n MyCredSet
    

アーティファクト キャッシュを有効にする - Azure portal

以下の手順に従うことで、Azure portal を使用して認証有りまたは無しで Azure Container Registry のアーティファクト キャッシュを有効にすることができます。

前提条件

資格情報を使用せずにアーティファクト キャッシュを構成する

Azure portal で、手順に従ってキャッシュ規則を作成します。

  1. 自分の Azure Container Registry に移動します。

  2. サイドの [メニュー][サービス][キャッシュ] を選びます。

    Azure portal の [レジストリ キャッシュ] のスクリーンショット。

  3. [規則の作成] を選択します。

    Azure portal の [ルールの作成] のスクリーンショット。

  4. [New cache rule] (新しいキャッシュ規則) のウィンドウが表示されます。

    Azure portal の [新しいキャッシュ ルール] のスクリーンショット。

  5. [規則名] を入力します。

  6. ドロップダウン メニューから、[ソース] レジストリを選択します。

  7. キャッシュする成果物の [リポジトリのパス] を入力します。

  8. プライベート リポジトリにアクセスしたり、認証済みのプルを実行したりしていない場合は、認証をスキップできます。

  9. [宛先] で、キャッシュ対象の成果物を保存する新しい ACR リポジトリ名前空間の名前を入力します。

    Azure portal の [キャッシュ ルールの保存] のスクリーンショット。

  10. [保存] を選択します。

  11. レジストリ ログイン サーバー名、リポジトリ名、および目的のタグで Docker コマンドを使用して、キャッシュからイメージをプルします。

    • たとえば、特定のレジストリ ログイン サーバー myregistry.azurecr.io の目的のタグ latest を使用してリポジトリ hello-world からイメージをプルする場合などです。
     docker pull myregistry.azurecr.io/hello-world:latest
    

認証を使用してアーティファクト キャッシュを構成する

Azure portal で、手順に従ってキャッシュ規則を作成します。

  1. 自分の Azure Container Registry に移動します。

  2. サイドの [メニュー][サービス][キャッシュ] を選びます。

    Azure portal の [レジストリ キャッシュ] のスクリーンショット。

  3. [規則の作成] を選択します。

    Azure portal の [ルールの作成] のスクリーンショット。

  4. [New cache rule] (新しいキャッシュ規則) のウィンドウが表示されます。

    Azure portal の [認証有りの新しいキャッシュ ルール] のスクリーンショット。

  5. [規則名] を入力します。

  6. ドロップダウン メニューから、[ソース] レジストリを選択します。

  7. キャッシュする成果物の [リポジトリのパス] を入力します。

  8. リポジトリに認証を追加するために、[認証] ボックスをオンにします。

  9. [Create new credentials] (新しい資格情報の作成) を選択して、ソース レジストリのユーザー名とパスワードを保存するための新しい資格情報セットを作成します。 新しい資格情報を作成する方法を確認してください。

  10. 資格情報の準備ができたら、ドロップダウン メニューから資格情報を選択します。

  11. [宛先] で、キャッシュ対象の成果物を保存する新しい ACR リポジトリ名前空間の名前を入力します。

    Azure portal の [キャッシュ ルールの保存] のスクリーンショット。

  12. [保存] を選択します。

  13. レジストリ ログイン サーバー名、リポジトリ名、および目的のタグで Docker コマンドを使用して、キャッシュからイメージをプルします。

    • たとえば、特定のレジストリ ログイン サーバー myregistry.azurecr.io の目的のタグ latest を使用してリポジトリ hello-world からイメージをプルする場合などです。
     docker pull myregistry.azurecr.io/hello-world:latest
    

新しい資格情報を作成する

資格情報を構成する前に、Azure KeyVault にシークレットを作成して格納し、Key Vault からシークレットを取得する必要があります。 Key Vault での資格情報の作成と格納に関する詳細を確認してください。そして Key Vault でシークレットの設定と取得を行うこと。

  1. [資格情報]>[資格情報の作成] の順に移動します。

    Azure portal の [資格情報の追加] のスクリーンショット。

    Azure portal の [新しい資格情報の作成] のスクリーンショット。

  2. ソース レジストリの新しい資格情報の [名前] を入力します。

  3. [Source Authentication] (ソース認証) を選択します。 アーティファクト キャッシュが現在サポートしているのは、[Key Vault から選択][シークレット URI を入力] です。

  4. [キー コンテナーから選択する] オプションの場合、キー コンテナーを使用した資格情報の作成について詳しく学習してください。

  5. [作成] を選択します。

次のステップ

  • 次の記事に進み、レジストリ キャッシュのトラブルシューティング ガイドを確認してください。