Azure Container Registry は、コンテナー イメージおよび関連アーティファクトのビルド、保管、管理を行うための、プライベート レジストリ サービスです。 このクイックスタートでは、Azure PowerShell をローカルで使用して Azure Container Registry インスタンスを作成します。 続いて、Docker CLI を使用して hello-world コンテナー イメージをプルし、その hello-world コンテナー イメージにタグ付けを行って新規のコンテナー イメージを作成し、その新規のコンテナー イメージをコンテナー レジストリにプッシュし、ローカルのコンテナー イメージを削除し、最後にそのイメージをレジストリからプルして実行します。
前提条件
Note
Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。
このクイックスタートには、Azure PowerShell モジュールが必要です。
Get-Module -ListAvailable Az を実行して、インストールされているバージョンを判断します。 インストールまたはアップグレードする必要がある場合は、「Azure PowerShell モジュールをインストールする」を参照してください。
Docker もローカルにインストールされている必要があります。 Docker には macOS、Windows、Linux の各システム用のパッケージがあります。
Azure Cloud Shell には、必要な Docker コンポーネント (dockerd デーモン) がすべて含まれているわけではないため、このクイックスタートで Cloud Shell を使用することはできません。
Azure にサインインする
Connect-AzAccount コマンドを使用して Azure サブスクリプションにサインインし、画面上の指示に従います。
Connect-AzAccount
リソース グループを作成する
Azure での認証が済んだら、New-AzResourceGroup を使用してリソース グループを作成します。 リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。
New-AzResourceGroup -Name myResourceGroup -Location EastUS
コンテナー レジストリを作成する
次に、New-AzContainerRegistry コマンドを使用して新しいリソース グループにコンテナー レジストリを作成します。
レジストリの名前は Azure 内で一意にする必要があります。また、5 ~ 50 文字の英数字を含める必要があります。 次の例では、「mycontainerregistry」という名前のレジストリを作成しています。以下のコマンドの mycontainerregistry を置き換えてから実行して、レジストリを作成します。
$registry = New-AzContainerRegistry -ResourceGroupName "myResourceGroup" -Name "mycontainerregistry" -EnableAdminUser -Sku Standard -Location EastUS
ヒント
このクイック スタートでは、ほとんどの Azure Container Registry ワークフローで十分な Standard レジストリを作成します。 ストレージとイメージのスループットの向上、 およびプライベート エンドポイントを使用した接続などの機能については、 Premium 価格プラン オプション (SKU) を使用できます。 サービス レベル (SKU) の詳細については、 Azure Container Registry SKU の機能と制限に関するページを参照してください。
レジストリにログインする
コンテナー イメージをプッシュしたりプルしたりするには、Connect-AzContainerRegistry コマンドレットを使用してあらかじめレジストリにログインしておく必要があります。 次の例では、Connect-AzAccount コマンドレットを使用して Azure に認証する際、ログインで使用したものと同じ資格情報を使用しています。
Note
次の例で、$registry.Name の値はリソース名です。完全修飾レジストリ名ではありません。
Connect-AzContainerRegistry -Name $registry.Name
このコマンドが完了すると Login Succeeded が返されます。
イメージをレジストリにプッシュする
Azure Container Registry にイメージをプッシュするには、まずイメージを用意する必要があります。 ローカル コンテナー イメージがまだない場合は、次の docker pull コマンドを実行して、既存のパブリック イメージをプルします。 この例では、Microsoft Container Registry から hello-world イメージをプルします。
docker pull mcr.microsoft.com/hello-world
イメージをレジストリにプッシュする前に、レジストリ ログイン サーバーの完全修飾名を持つ docker タグ を使用して、イメージにタグを付ける必要があります。
- 一意の DNS 名ハッシュが含 まれるドメイン 名ラベル (DNL) で保護されたレジストリ のログイン サーバー名形式は
mycontainerregistry-abc123.azurecr.io。 -
UnsecureDNL オプションを使用して作成されたレジストリのログイン サーバー名の形式はmycontainerregistry.azurecr.io。
たとえば、 Tenant Reuse DNL スコープを持つレジストリを作成した場合、ログイン サーバーは DNS 名にハッシュを持つ mycontainerregistry-abc123.azurecr.io のようになります。
Unsecure DNL オプションを使用してレジストリを作成すると、ログイン サーバーはハッシュなしでmycontainerregistry.azurecr.ioのように見えます。
レジストリのログイン サーバーで docker tag コマンドを使用してイメージにタグを付けます。 このクイック スタートでは、 hello-world イメージに v1タグを付けます。
DNL で保護されたレジストリのイメージにタグを付けるコマンドの例:
docker tag mcr.microsoft.com/hello-world mycontainerregistry-abc123.azurecr.io/hello-world:v1
DNL 以外のレジストリのイメージにタグを付けるコマンドの例:
docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1
最後に、docker push を使用して、レジストリ インスタンスにイメージをプッシュします。
<login-server> をレジストリ インスタンスのログイン サーバー名で置き換えます。 この例では、hello-world レポジトリを作成します。これには、hello-world:v1 イメージが含まれています。
docker push <login-server>/hello-world:v1
イメージをコンテナー レジストリにプッシュした後、hello-world:v1 コマンドを使用して、ローカル Docker 環境から イメージを削除します。 このコマンドでは、Azure コンテナー レジストリの hello-world リポジトリからイメージは削除されません。
docker rmi <login-server>/hello-world:v1
レジストリからイメージを実行する
ここで、hello-world:v1 を使用して、コンテナー レジストリから コンテナー イメージをプルして実行できます。
docker run <login-server>/hello-world:v1
出力例:
Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
リソースをクリーンアップする
このクイックスタートで作成したリソースでの作業が完了したら、Remove-AzResourceGroup コマンドを使用して、リソース グループ、コンテナー レジストリ、そこに格納されているコンテナー イメージを削除します。
Remove-AzResourceGroup -Name myResourceGroup
次のステップ
このクイックスタートでは、Azure PowerShell を使用して Azure Container Registry インスタンスをローカルに作成し、hello-world コンテナー イメージをプルし、その hello-world イメージにタグ付けを行って新規のコンテナー イメージを作成し、その新規のコンテナー イメージをコンテナー レジストリにプッシュし、ローカル コンテナー イメージを削除して、最後にレジストリからイメージをプルして実行しました。 Azure Container Registry のチュートリアルに進んで、ACR についての理解を深めましょう。