Docker コマンドを使用せずに、コンテナー イメージを Azure コンテナー レジストリに簡単にインポート (コピー) できます。 たとえば、開発レジストリから運用レジストリにイメージをインポートしたり、パブリック レジストリから基本イメージをコピーしたりできます。
Azure Container Registry は、既存のレジストリからイメージおよびその他の成果物をコピーする多くの一般的なシナリオに対応しています。
パブリック レジストリからイメージをインポートします。
Helm 3 グラフを含むイメージまたは OCI 成果物を、同じAzure サブスクリプション、Azure テナント、またはサブスクリプションとテナント間の別のAzure コンテナー レジストリからインポートします。
Azure以外のプライベート コンテナー レジストリからイメージをインポートします。
Azure コンテナー レジストリへのイメージのインポートには、Docker CLI コマンドの使用に比べて次の利点があります。
クライアント環境にローカル Docker インストールが必要ない場合は、サポートされている OS の種類に関係なく、任意のコンテナー イメージをインポートできます。
マルチ アーキテクチャ イメージ (公式の Docker イメージなど) をインポートすると、マニフェストの一覧で指定されたすべてのアーキテクチャとプラットフォームのイメージがコピーされます。
ターゲット レジストリへのアクセス権がある場合、レジストリのパブリック エンドポイントは必要ありません。
重要
イメージをインポートするには、外部レジストリで RFC 7233 がサポートされている必要があります。 エラーを回避するには、レジストリ URI で az acr import コマンドを使用するときに、RFC 7233 範囲をサポートするレジストリを使用します。
制限事項
インポートされたイメージのマニフェストの最大数は 50 です。
Azure Container Registryでは、クラウド プロバイダー間でさまざまなソース レジストリからイメージをインポートできます。 インポート ソースが ACR の場合は、ソース ACR のホーム リージョンからのみインポートできます。 ソース ACR のリージョン エンドポイントは、インポート ソースとしてサポートされていません。 ソース ACR からインポートするときに、ソース ACR のグローバル エンドポイントを指定します。 さらに、インポートでは常にダウンストリーム ACR のホーム リージョンにコンテンツが書き込まれます。 エンドポイントリファレンスAzure Container Registry参照してください。
コンテナー イメージをインポートするには、Azure Cloud ShellまたはローカルでAzure CLIを実行します。
注
同じコンテナー イメージを複数の Azure リージョンに分散する必要がある場合、Azure Container Registry では geo レプリケーションもサポートされます。 レジストリの geo レプリケーション (Premium サービス レベルが必要) を行うと、1 つのレジストリに含まれる同一のイメージとタグ名を、複数のリージョンで使用できます。
重要
ネットワーク制限付きAzureコンテナー レジストリとの間でインポートするには、制限付きレジストリで、信頼されたサービスによるアクセスを許可してネットワークをバイパスする必要があります。 既定では、この設定は有効になっているため、インポートは機能します。 プライベート エンドポイントまたはレジストリ ファイアウォール規則を使用してレジストリを作成し、設定を有効にしない場合、インポートは失敗します。
前提条件
まだ Azure コンテナー レジストリがない場合は、レジストリを作成します。 手順については、「 クイック スタート: Azure CLI を使用してプライベート コンテナー レジストリを作成する」を参照してください。
Azure Container Registry にイメージをインポートするには、ターゲット レジストリ (Container Registry Data Importer and Data Reader ロール) でインポートをトリガーするためのアクセス許可が ID に必要です。
Azure Container Registry Entra のアクセス許可とロールの概要を参照してください。
パブリック レジストリからコンテナー イメージをインポートする
重要
パブリック レジストリからネットワーク制限付きAzure コンテナー レジストリにインポートするには、制限付きレジストリで、信頼されたサービスによるアクセスによるネットワークのバイパスを許可する必要があります。 既定では、この設定は有効になっているため、インポートは機能します。 プライベート エンドポイントまたはレジストリ ファイアウォール規則を使用して新しく作成されたレジストリでこの設定を無効にすると、インポートは失敗します。
Docker Hubからコンテナー イメージをインポートする
たとえば、az acr import コマンドを使用して、Docker Hub から hello-world:latest という名前のレジストリに複数アーキテクチャの イメージをインポートします。
hello-world は Docker Hub からの公式イメージなので、このイメージは既定の library リポジトリにあります。
--source イメージのパラメーターには、リポジトリ名と、必要に応じてタグの値を指定します (タグではなく、マニフェスト ダイジェストでイメージを識別することもできます。これにより、特定のバージョンのイメージが使用されることを保証できます)。
az acr import \
--name myregistry \
--source docker.io/library/hello-world:latest \
--image hello-world:latest
az acr manifest list-metadata コマンドを実行すると、複数のマニフェストがこのイメージに関連付けられていることを確認できます。
az acr manifest list-metadata \
--name hello-world \
--registry myregistry
タグを追加せずにダイジェストで成果物をインポートするには:
az acr import \
--name myregistry \
--source docker.io/library/hello-world@sha256:abc123 \
--repository hello-world
Docker Hub アカウントがある場合は、Docker Hubからイメージをインポートするときに資格情報を使用します。 docker Hub ユーザー名とパスワードまたは 個人用アクセス トークン をパラメーターとして az acr importに渡します。 次の例では、Docker Hub 資格情報を使用して、Docker Hub の tensorflow リポジトリからパブリック イメージをインポートします。
az acr import \
--name myregistry \
--source docker.io/tensorflow/tensorflow:latest-gpu \
--image tensorflow:latest-gpu \
--username <Docker Hub user name> \
--password <Docker Hub token>
Microsoft Container Registry からコンテナー イメージをインポートする
たとえば、Microsoft Container Registry 内の ltsc2022 リポジトリから windows Windows Server Core イメージをインポートすることができます。
az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2022\
--image servercore:ltsc2022
同じMicrosoft Entra テナント内のAzure コンテナー レジストリからコンテナー イメージをインポートする
統合されたMicrosoft Entraアクセス許可を使用して、同じMicrosoft Entra テナント内のAzure コンテナー レジストリからイメージをインポートできます。
ID には、ソース レジストリ (ソース レジストリに割り当てられた
Container Registry Data Importer and Data Readerロール) からイメージ、タグ、および OCI 参照元を表示およびプルするためのアクセス許可が必要です。ID には、ターゲット レジストリ (ターゲット レジストリに割り当てられたロール
Container Registry Data Importer and Data Reader) でイメージの読み取りとインポートのトリガーの両方に対するアクセス許可も必要です。レジストリは、同じMicrosoft Entra テナント内の同じサブスクリプションまたは別のAzure サブスクリプションに存在できます。
ソース レジストリへのパブリック アクセスが無効になっています。 パブリック アクセスが無効になっている場合、レジストリ ログイン サーバー名ではなく、リソース ID でソース レジストリを指定します。
プライベート エンドポイントまたはレジストリ ファイアウォール規則を持つソース レジストリまたはターゲット レジストリでは、制限されたレジストリによって 信頼されたサービス がネットワークにアクセスできるようにする必要があります。
同じサブスクリプション内のレジストリからコンテナー イメージをインポートする
たとえば、ソース レジストリ aci-helloworld:latest から同じ Azure サブスクリプションの myregistry に イメージをインポートします。
次の例では、 aci-helloworld:latestイメージを、 レジストリのパブリック エンドポイントへのアクセスが無効になっているソース レジストリ mysourceregistry から myregistry にインポートします。 ソース レジストリのリソース ID は、--registry パラメーターを使用して指定しています。
--source パラメーターには、レジストリ ログイン サーバー名ではなく、ソース リポジトリとタグのみを指定することに注意してください。
ソース レジストリMicrosoft Entra ID 認証を使用するには、--registry <source-registry-resource-id> フラグを含めます。
az acr import \
--name myregistry \
--source aci-helloworld:latest \
--image aci-helloworld:latest \
--registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry
別のサブスクリプションのレジストリからコンテナー イメージをインポートする
注
あるレジストリから別のレジストリにイメージをインポートするには、ソースおよびターゲット レジストリの両方のリージョンが、サブスクリプションのリソース プロバイダーに属する Azure Container Registry (ACR) に登録されていることを確認する必要があります。
次の例では、 mysourceregistry は同じテナント内の myregistry とは異なるサブスクリプションにあります。
--registry パラメーターを使用して、ソース レジストリのリソース ID を指定します。
--source パラメーターは、レジストリ ログイン サーバー名ではなく、ソース リポジトリとタグのみを指定します。
az acr import \
--name myregistry \
--source aci-helloworld:latest \
--image aci-hello-world:latest \
--registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry
サービス プリンシパルの資格情報を使用してレジストリからコンテナー イメージをインポートする
統合されたActive Directoryアクセス許可を使用してアクセスできないレジストリからインポートするには、ソース レジストリのサービス プリンシパル資格情報 (使用可能な場合) を使用します。 ソース レジストリへの適切なロール割り当てアクセス権を持つMicrosoft Entra サービス プリンシパルの appID とパスワードを入力します。
- Microsoft Entraサービス プリンシパルの場合は、
Container Registry Repository Reader(ABAC 対応レジストリの場合) またはAcrPull(ABAC 以外のレジストリの場合) が割り当てられていることを確認します。
サービス プリンシパルは、イメージをレジストリにインポートする必要のある無人のシステム (ビルド システムなど) で使用できます。
az acr import \
--name myregistry \
--source sourceregistry.azurecr.io/sourcerepo:tag \
--image targetimage:tag \
--username <SP_App_ID> \
--password <SP_Passwd>
別のテナントのAzure コンテナー レジストリからコンテナー イメージをインポートする
別のMicrosoft Entra テナントのAzure コンテナー レジストリからイメージをインポートするには、ログイン サーバー名でソース レジストリを指定し、レジストリへのプル アクセスを有効にする資格情報を指定します。
テナント間のインポートは、パブリック アクセスが無効なレジストリではサポートされていません。
ユーザー名とパスワードを使用したテナント間のインポート
たとえば、 Microsoft Entra 以外のリポジトリスコープのトークン とパスワード、またはソース レジストリへの正しいロールの割り当てを持つ Microsoft Entra サービス プリンシパル の appID とパスワードを使用します。
- Microsoft Entraサービス プリンシパルの場合は、ソース レジストリに
Container Registry Repository Reader(ABAC 対応レジストリの場合) またはAcrPull(ABAC 以外のレジストリの場合) が割り当てられていることを確認します。
az acr import \
--name myregistry \
--source sourceregistry.azurecr.io/sourcerepo:tag \
--image targetimage:tag \
--username <SP_App_ID> \
--password <SP_Passwd>
アクセス トークンを使用したテナント間のインポート
レジストリのアクセス許可を持つソース テナントの ID を使用してソース レジストリにアクセスするには、アクセス トークンを取得します。
# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>
# Get access token returned by `az account get-access-token`
az account get-access-token
ターゲット テナントで、アクセス トークンをパスワードとして az acr import コマンドに渡します。 ソース レジストリは、ログイン サーバー名を指定します。 このコマンドではユーザー名は必要ありません。
az acr import \
--name myregistry \
--source sourceregistry.azurecr.io/sourcerepo:tag \
--image targetimage:tag \
--password ($token|ConvertFrom-Json).accessToken
Azure以外のプライベート コンテナー レジストリからコンテナー イメージをインポートする
Azure 以外のプライベート レジストリからイメージをインポートするには、レジストリへのプル アクセスを有効にする資格情報を指定します。 たとえば、次のようにして、プライベート Docker レジストリからイメージをプルします。
az acr import \
--name myregistry \
--source docker.io/sourcerepo/sourceimage:tag \
--image sourceimage:tag \
--username <username> \
--password <password>
コンテナー イメージのインポートに関する問題のトラブルシューティング
イメージのインポート中にエラーが発生した場合は、次の表で詳細を確認してください。
| エラー メッセージ | 説明 |
|---|---|
The remote server may not be RFC 7233 compliant |
ディストリビューション スペックでは、Range: bytes=<start>-<end>の範囲ヘッダー形式を使用できます。 ただし、リモート サーバーが RFC 7233 に準拠していない可能性があります。 |
Unexpected response status code |
範囲クエリの実行時に、ソース リポジトリから予期しない応答状態コードが取得されました。 |
Unexpected length of body in response |
受信したコンテンツの長さが、予想されるサイズと一致しません。 予想されるサイズは、BLOB サイズと範囲ヘッダーによって決まります。 |
次のステップ
この記事では、パブリック レジストリや別のプライベート レジストリから Azure コンテナー レジストリにコンテナー イメージをインポートする方法について説明しました。
その他のイメージ インポート オプションについては、 az acr import または Import-AzContainerRegistryImage リファレンスを参照してください。
イメージのインポートを利用すると、別の Azure リージョン、サブスクリプション、または Microsoft Entra テナントのコンテナー レジストリにコンテンツを移動できます。 詳細については、「 コンテナー レジストリを別のリージョンに手動で移動する」を参照してください。
ネットワーク制限付きコンテナー レジストリからの成果物のエクスポートを無効にします。