Docker コマンドを使用せず、Azure コンテナー レジストリにコンテナー イメージを簡単にインポート (コピー) できます。 たとえば、開発レジストリのイメージを運用レジストリにインポートしたり、パブリック レジストリから基本イメージをコピーしたりすることができます。
Azure Container Registry は、既存のレジストリからイメージおよびその他の成果物をコピーする多くの一般的なシナリオに対応しています。
パブリック レジストリからイメージをインポートする
同じまたは別の Azure サブスクリプションまたはテナント内にある別の Azure コンテナー レジストリから Helm 3 グラフを含むイメージまたは OCI 成果物をインポートする
Azure 以外のプライベート コンテナー レジストリからインポートする
Azure コンテナー レジストリにイメージをインポートするやり方は、Docker CLI コマンドを使用する場合と比べて次のような利点があります。
クライアント環境にローカルの Docker をインストールする必要がない場合、サポートされている OS の種類に関係なく、任意のコンテナー イメージをインポートできます。
マルチ アーキテクチャ イメージ (公式の Docker イメージなど) をインポートすると、マニフェストの一覧で指定されたすべてのアーキテクチャとプラットフォームのイメージがコピーされます。
ターゲット レジストリへのアクセス権がある場合、レジストリのパブリック エンドポイントは必要ありません。
重要
- イメージをインポートするには、外部レジストリで RFC 7233 がサポートされている必要があります。 失敗を回避するには、RFC 7233 の範囲がサポートされているレジストリを使用し、さらにレジストリ URI を含めて az acr import コマンドを使用することをお勧めします。
制限事項
- インポートされたイメージのマニフェストの最大数は 50 です。
コンテナー イメージをインポートするには、Azure CLI を Azure Cloud Shell またはローカルで実行する必要があります (バージョン 2.0.55 以降を推奨します)。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、「 Azure CLI のインストール」を参照してください。
注
同じコンテナー イメージを複数の Azure リージョンに分散する必要がある場合、Azure Container Registry では geo レプリケーションもサポートされます。 レジストリの geo レプリケーション (Premium サービス レベルが必要) を行うと、1 つのレジストリに含まれる同一のイメージとタグ名を、複数のリージョンで使用できます。
重要
2 つの Azure コンテナー レジストリ間でのイメージのインポートに対する変更は、2021 年 1 月の時点で導入されました。
- ネットワーク制限付き Azure コンテナー レジストリとの間でインポートするには、制限付きレジストリで 、信頼されたサービスによるアクセスが ネットワークをバイパスできるようにする必要があります。 既定では、この設定は有効で、インポートが可能になっています。 プライベート エンドポイントまたはレジストリ ファイアウォール規則を使用する新しく作成されたレジストリで設定が有効になっていない場合、インポートは失敗します。
- インポートのソースまたはターゲットとして使用される既存のネットワーク制限付き 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 内の ltsc2019
リポジトリから windows
Windows Server Core イメージをインポートすることができます。
az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2019 \
--image servercore:ltsc2019
同じ AD テナント内の Azure コンテナー レジストリからインポートする
統合された Microsoft Entra アクセス許可を使用して、同じ AD テナント内の Azure コンテナー レジストリからイメージをインポートできます。
ID には、ソース レジストリからイメージ、タグ、および OCI 参照元を表示およびプルするためのアクセス許可が必要です。
-
ABAC 対応のソース レジストリの場合は、ソース レジストリに
Container Registry Repository Reader
ロールとContainer Registry Repository Catalog Lister
ロールの両方が必要です。 -
ABAC 以外のソース レジストリの場合は、ソース レジストリに対する
AcrPull
ロールが必要です。
-
ABAC 対応のソース レジストリの場合は、ソース レジストリに
ID には、ターゲット レジストリ (
Container Registry Data Importer and Data Reader
ロール) でのイメージの読み取りとインポートのトリガーの両方に対するアクセス許可も必要です。レジストリの場所は、同じ Active Directory テナント内であれば、同じ Azure サブスクリプション内でも、別の Azure サブスクリプション内でも構いません。
ソース レジストリへのパブリック アクセスが無効になっています。 パブリック アクセスが無効になっている場合、レジストリ ログイン サーバー名ではなく、リソース ID でソース レジストリを指定します。
プライベート エンドポイントまたはレジストリ ファイアウォール規則を持つソース レジストリまたはターゲット レジストリでは、制限されたレジストリによって 信頼されたサービス がネットワークにアクセスできるようにする必要があります。
同じサブスクリプション内のレジストリからインポートする
たとえば、ソース レジストリ aci-helloworld:latest
から同じ Azure サブスクリプションの myregistry に イメージをインポートします。
az acr import \
--name myregistry \
--source mysourceregistry.azurecr.io/aci-helloworld:latest \
--image aci-helloworld:latest
次の例では、 aci-helloworld:latest
イメージを、 レジストリのパブリック エンドポイントへのアクセスが無効になっているソース レジストリ mysourceregistry から myregistry にインポートします。 ソース レジストリのリソース ID は、--registry
パラメーターを使用して指定しています。
--source
パラメーターには、レジストリ ログイン サーバー名ではなく、ソース リポジトリとタグのみを指定することに注意してください。
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
次の例では、タグではなくマニフェスト ダイジェスト (sha256:...
として表される SHA-256 ハッシュ) によってイメージをインポートしています。
az acr import \
--name myregistry \
--source mysourceregistry.azurecr.io/aci-helloworld@sha256:123456abcdefg
別のサブスクリプション内のレジストリからインポートする
注
あるレジストリから別のレジストリにイメージをインポートするには、ソースおよびターゲット レジストリの両方のリージョンが、サブスクリプションのリソース プロバイダーに属する Azure Container Registry (ACR) に登録されていることを確認する必要があります。
次の例では、 mysourceregistry は、同じ Active Directory テナント内の myregistry とは異なるサブスクリプションにあります。 ソース レジストリのリソース ID は、--registry
パラメーターを使用して指定しています。
--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/sourcerrepo:tag \
--image targetimage:tag \
--username <SP_App_ID> \
--password <SP_Passwd>
別の AD テナント内の 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/sourcerrepo: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/sourcerrepo:tag \
--image targetimage:tag \
--password <access-token>
Azure 以外のプライベート コンテナー レジストリからインポートする
Azure 以外のプライベート レジストリからイメージをインポートするには、レジストリへのプル アクセスを有効にする資格情報を指定します。 たとえば、次のようにして、プライベート Docker レジストリからイメージをプルします。
az acr import \
--name myregistry \
--source docker.io/sourcerepo/sourceimage:tag \
--image sourceimage:tag \
--username <username> \
--password <password>
次のステップ
この記事では、パブリック レジストリや別のプライベート レジストリから Azure コンテナー レジストリにコンテナー イメージをインポートする方法について説明しました。
- その他のイメージ インポート オプションについては、 az acr import コマンド リファレンスを参照してください。
イメージのインポートを利用すると、別の Azure リージョン、サブスクリプション、または Microsoft Entra テナントのコンテナー レジストリにコンテンツを移動できます。 詳細については、「 コンテナー レジストリを別のリージョンに手動で移動する」を参照してください。
ネットワーク制限付きコンテナー レジストリからの成果物のエクスポートを無効にします。