クイック スタート:Azure CLI を使用したプライベート コンテナー レジストリの作成

Azure Container Registry は、コンテナー イメージおよび関連アーティクルのビルド、保管、管理をするための、プライベート レジストリ サービスです。 このクイックスタートでは、Azure CLI を使用して Azure コンテナー レジストリ インスタンスを作成します。 次に、Docker コマンドを使用してコンテナー イメージをレジストリにプッシュし、最後にレジストリからイメージをプルして実行します。

このクイック スタートでは、Azure CLI を実行している必要があります (バージョン 2.0.55 以降を推奨)。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

Docker もローカルにインストールする必要があります。 Docker では、macOSWindows、または Linux システムで Docker を簡単に構成できるパッケージが提供されています。

Azure Cloud Shell には、必要な Docker コンポーネント (dockerd デーモン) すべてが含まれていないため、このクイックスタートで Cloud Shell を使用することはできません。

リソース グループを作成する

az group create コマンドを使用して、リソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。

次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroup --location eastus

コンテナー レジストリの作成

このクイック スタートでは、Basic レジストリを作成します。これは、Azure Container Registry について学習している開発者にとって、コストが最適なオプションです。 利用可能なサービス レベルの詳細については、コンテナー レジストリのサービス レベルに関するページを参照してください。

az acr create コマンドを使用して ACR インスタンスを作成します。 レジストリ名は Azure 内で一意であり、5 から 50 文字の小文字の英数字を含める必要があります。 次の例では、mycontainerregistry を使用します。 これを一意の値に更新します。

az acr create --resource-group myResourceGroup \
  --name mycontainerregistry --sku Basic

レジストリが作成されると、出力は次のようになります。

{
  "adminUserEnabled": false,
  "creationDate": "2019-01-08T22:32:13.175925+00:00",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry",
  "location": "eastus",
  "loginServer": "mycontainerregistry.azurecr.io",
  "name": "mycontainerregistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

出力の loginServer をメモしておいてください。これは、完全修飾レジストリ名です (すべて小文字)。 以降このクイックスタートでは、コンテナー レジストリ名のプレースホルダーとして <registry-name> を、レジストリのログイン サーバー名のプレースホルダーとして <login-server> を使用します。

ヒント

このクイック スタートでは、Basic レジストリを作成します。これは、Azure Container Registry について学習している開発者にとって、コストが最適なオプションです。 ストレージとイメージのスループットを向上させる他のレベルと、プライベート エンドポイント を使用した接続などの機能を選択します。 利用可能なサービス レベル (SKU) の詳細については、コンテナー レジストリのサービス レベルに関するページを参照してください。

レジストリへのログイン

コンテナー イメージをプッシュしたりプルしたりするには、あらかじめレジストリにログインしておく必要があります。 そのためには、az acr login コマンドを使用します。 Azure CLI でログインする際は、レジストリ リソース名のみを指定します。 完全修飾ログイン サーバー名は使用しません。

az acr login --name <registry-name>

例:

az acr login --name mycontainerregistry

このコマンドが完了すると、Login Succeeded というメッセージが返されます。

レジストリにイメージをプッシュする

Azure Container Registry にイメージをプッシュするには、まずイメージを用意する必要があります。 ローカル コンテナー イメージがまだない場合は、次の docker pull コマンドを実行して、既存のパブリック イメージをプルします。 この例では、Microsoft Container Registry から hello-world イメージをプルします。

docker pull mcr.microsoft.com/hello-world

イメージをレジストリにプッシュするには、レジストリのログイン サーバーの完全修飾名を使用して、そのイメージにタグを付けておく必要があります。 ログイン サーバー名は、<registry-name>.azurecr.io (すべて小文字にする必要があります) という形式です (mycontainerregistry.azurecr.io など)。

docker tag コマンドを使用してイメージにタグ付けします。 <login-server> を ACR インスタンスのログイン サーバー名で置き換えます。

docker tag mcr.microsoft.com/hello-world <login-server>/hello-world:v1

例:

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

コンテナー レジストリにイメージをプッシュした後は、ローカルの Docker 環境から hello-world:v1 イメージを削除します (この docker rmi コマンドは、Azure コンテナー リポジトリ内の hello-world リポジトリからイメージを削除しないことに注意してください)。

docker rmi <login-server>/hello-world:v1

コンテナー イメージの一覧表示

次の例は、レジストリ内のリポジトリを一覧表示します。

az acr repository list --name <registry-name> --output table

出力:

Result
----------------
hello-world

次の例は、hello-world リポジトリのタグを一覧表示します。

az acr repository show-tags --name <registry-name> --repository hello-world --output table

出力:

Result
--------
v1

レジストリからイメージを実行する

ここで、docker run を使用して、コンテナー レジストリから 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.

[...]

リソースをクリーンアップする

必要がなくなったら、az group delete コマンドを使用して、リソース グループ、コンテナー レジストリ、そこに格納されているコンテナー イメージを削除できます。

az group delete --name myResourceGroup

次のステップ

このクイック スタートでは、Azure CLI を使って Azure Container Registry を作成し、レジストリにコンテナー イメージをプッシュしてから、レジストリからイメージをプルして実行しました。 Azure Container Registry のチュートリアルに進んで、ACR についての理解を深めましょう。