Dockerイメージを管理・共有する仕組みとして、「レジストリ」が必要です。
特定の人のみがアクセスできるようにしたい場合はプライベートレジストリを使用しますが、今回は、自分で立てるのではなく、Azureがレジストリサービスとして提供しているAzure Container Registryを試してみたいと思います。
Azure Container Registry とは
Azure コンテナー レジストリは、オープンソースの Docker Registry 2.0 に基づいた、管理された プライベートなDocker レジストリ サービスです。
主な特徴は以下になります。
- 使い慣れたオープン ソースの Docker CLI を使用可能
- Azure Active Directory によるレジストリ認証のサポート
- DC/OS・Docker・Swarm・Kubernetes・Azureサービス(App Services・Batch・Service Fabric)等の様々なデプロイターゲットにイメージをプル可能
詳細は以下をご覧頂ければと思います。
https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-intro
前提動作環境
クライアントPCの動作環境は下記になります。
- OS:CentOS7
- Azure CLI バージョン:2.0.27※事前にインストール
- docker バージョン:18.03.0-ce※事前にインストール
Azure Container Registryの作成
Dockerコンテナイメージ用のプライベート レジストリとして、Azure Container Registryを作成します。
Azure Container Registryを作成する場合は、まず、Azureリソースグループが必要です。
Azureリソースグループとは、関連するリソースを1つに括った論理的なコンテナーです。
az group createコマンドでリソース グループを作成します。
今回は、eastus リージョンにrgAcrTestという名前のリソースグループを作成します。
# az group create --name rgAcrTest --location eastus
az acr createコマンドを使用して、acrTrialの名前でAzure Container Registryを作成します。
# az acr create --resource-group rgAcrTest --name acrTrial --sku Basic
以上で、Azure Container Registryの作成自体は完了です。
Dockerイメージの作成
Azure Container RegistryにプッシュするDockerイメージを作成します。
以下のシンプルなDockerfileを作成してみます。
FROM php:7.0-apache
作成したDockerfileからイメージを作成します。
# docker build -t webapp .
以上で、Dockerイメージの作成は完了です。
DockerイメージのAzure Container RegistryへのPush
az acr loginコマンドでACRインスタンスにログインします。
# az acr login --name acrTrial
docker imagesコマンドで、現在のイメージ一覧を表示し、イメージのタグ名を確認します。
# docker images
PushするDockerイメージは、Azure Container Registryのログインサーバ名でタグ付けする必要があります。
このタグは、Azure Container RegistryにDockerイメージをPushするときに、ルーティングするために使用されます。
Azure Container Registryのログインサーバ名を取得するには、次のコマンドを実行します。
# az acr list --resource-group rgAcrTest --query "[].{acrLoginServer:loginServer}" --output table AcrLoginServer -------------------------- acrtrial.azurecr.io
取得したAzure Container Registryのログインサーバ名で、PushするDockerイメージにタグ名を付けます。
下記のとおり、イメージ名は、必ず、Azure Container Registryのログインサーバ名/イメージ名:タグ名である必要があります。
# docker tag webapp acrtrial.azurecr.io/webapp:dev
タグを付けた後、docker images を実行してタグを確認します。
次の実行結果のとおり、「REPOSITORY」欄に「acrtrial.azurecr.io/webapp」、「TAG」欄に「dev」と表示される行があれば、タグ付けは成功です。
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE acrtrial.azurecr.io/webapp dev 2c1b7b71162b 3 weeks ago 386MB php 7.0-apache 2c1b7b71162b 3 weeks ago 386MB webapp latest 2c1b7b71162b 3 weeks ago 386MB
Azure Container RegistryにDockerイメージをプッシュします。完了するまでに数分かかります。
# docker push acrtrial.azurecr.io/webapp:dev
Azure Container Registry にプッシュされたイメージを確認するには、az acr repository list コマンドを使用します。
# az acr repository list --name acrTrial --output table Result -------- webapp
さらに、特定のイメージのタグを表示するには、az acr repository show-tagsコマンドを使用します。
# az acr repository show-tags --name acrTrial --repository webapp --output table Result -------- dev
以上で、Azure Container Registry へのプッシュが完了です。
まとめ
以上のように、Azure Container Registryは、オープンソースのDocker Registry v2と互換性があり、Docker CLIでのレジストリ操作方法が同じなため、自分でDocker Registryを立ち上げて管理する手間を考えると、効率的に便利です。
次回は、Azure サービスからAzure Container RegistryにプッシュしたイメージをAzureサービスにデプロイしてみたいと思います。
斎藤@SSTD