AKS を使いこなす : チュートリアルの深堀り - コンテナレジストリを作成する

今回は[チュートリアル:Azure Container Registry をデプロイして使用する](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-prepare-acr)の深堀をしていきます。

このチュートリアルでは、前回ダウンロードしたアプリケーションのイメージを作成して、レジストリに登録するところまでをやっています。

# イメージとコンテナ

OS などの実行環境と実行するアプリケーションを含んだものをとイメージと呼び、インスタンス化されてコンテナランタイムで実行されているものをコンテナと呼びます。コンテナというキーワードは技術全体をさす場合もあるため状況に応じて理解しましょう。

# タグ

イメージのバージョニングはタグで行います。タグは以下のようにイメージの後につきます。

azure-vote-front:v1
azure-vote-front:v2
azure-vote-front:latest

タグを省略した場合、```latest``` タグが自動的に付与され、最新のイメージが利用されます。

# コンテナレジストリ

コンテナの元であるイメージは、実行環境でビルドするかダウンロードしてきます。コンテナレジストリはビルド済のイメージを保持するサービスで、以下のような機能を提供します。

- イメージ本体およびタグなどのメタデータの保存
- ダウンロード要求に対する応答
- イメージ単位やユーザー単位に Readme の提供
- ユーザーの認証や認可

Docker は既定で [Docker Hub](https://hub.docker.com/) というパブリックのコンテナレジストリを利用します。イメージをプライベートに管理運用したい場合は、有料の Docker Hub の機能を使ったり、[Azure Container Registry (ACR)](https://azure.microsoft.com/en-us/services/container-registry/) などクラウドサービスを使うことになります。

[ACR](https://azure.microsoft.com/en-us/services/container-registry/) は Azure が提供するコンテナレジストリであり、Azure AD と統合されたセキュリティやモニタ機能を使える他、プレビューですが VNET に組み込んで使うなどエンタープライズ向けの機能を提供します。

# チュートリアルの深堀

では実際にチュートリアルを見ていきましょう。

## ACR の作成

まずコンテナレジストリである ACR を作成しています。ACR を作成するホストと SKU は任意で選択できますが、個人的には全てのリソースを日本に作成したいため、eastjapan を利用します。

1\. 手順では azure-cli を使っているため、[Azure CLI のインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest)を参考にインストールを実施。

2\. シェルを起動して Azure にログイン。ブラウザが起動するので認証を実行。

```shell
az login
```

3\. サブスクリプションが複数ある場合は適切なものを設定。

```shell
az account list # サブスクリプション一覧を表示
az account set -s <subscription id> # 利用するサブスクリプションを指定
az account show # 利用するサブスクリプションの表示
```
4\. リソースグループの作成。ここではリソースグループ名は akstutorial、リージョンは東日本を指定。

```shell
az group create --name akstutorial --location japaneast
```

5\. ACR の作成。名前はグローバルで一意のものを指定。SKU については[こちら](https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-skus)より違いを参照。

```shell
az acr create -g akstutorial -n kenakamuacr --sku basic
```

6\. 作成した ACR にログイン。

```shell
az acr login -n kenakamuacr
```

## イメージの準備

次に ACR にアップロードするイメージを前回ダウンロードしたアプリケーションを使って作成します。各イメージは以下の属性を持っています。

- レポジトリ名: イメージが格納されているレポジトリの名前
- タグ: イメージのタグ
- ID: イメージを一意に特定する ID

尚、同じイメージ ID に対して複数の名前やタグをつけることができます。

1\. 現在ローカルにあるイメージを確認。前回のアプリケーションの状態のままであれば以下のように 3 つのイメージが存在。

```shell
docker images
```
```shell
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
azure-vote-front             latest              f1056b864e11        10 hours ago        965MB
redis                        latest              63130206b0fa        11 days ago         98.2MB
tiangolo/uwsgi-nginx-flask   python3.6           b3b62e990e26        6 weeks ago         964MB
```
2\. ACR のイメージは **ACR のログインサーバー名/イメージ名:バージョン** というタグの命名規則がある。まずは以下コマンドで ACR のログインサーバー名を取得。

- az acr list で ACR 一覧を取得
- query パラメーターで任意の値のみ取得

```shell
az acr list --resource-group akstutorial --query "[].{acrLoginServer:loginServer}" --output table
```
```shell
AcrLoginServer
----------------------
kenakamuacr.azurecr.io
```

3\. azure-vote-front に対してタグを設定。以下の場合、レポジトリが ```kenakamuacr.azurecr.io/azure-vote-front```、タグが ```v1``` となる

```shell
docker tag azure-vote-front kenakamuacr.azurecr.io/azure-vote-front:v1
```

4\. 再度イメージの一覧を取得。タグをつけたイメージが表示される。IMAGE ID が azure-vote-front の ```f1056b864e11``` と一致しているため、実体は同じ。

```shell
docker images
```
```shell
REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZE
azure-vote-front                          latest              f1056b864e11        11 hours ago        965MB
kenakamuacr.azurecr.io/azure-vote-front   v1                  f1056b864e11        11 hours ago        965MB
redis                                     latest              63130206b0fa        11 days ago         98.2MB
tiangolo/uwsgi-nginx-flask                python3.6           b3b62e990e26        6 weeks ago         964MB
```

## ACR にイメージをプッシュ

最後に作成したイメージを ACR にプッシュ(アップロード)します。

1\. docker push でイメージをプッシュ。タグより docker は自動的に ACR を検索してプッシュを実行。

```shell
docker push kenakamuacr.azurecr.io/azure-vote-front:v1
```

2\. イメージをプッシュすると ACR にレポジトリが作成される。

```shell
az acr repository list --name kenakamuacr --output table 
```
```shell
Result
----------------
azure-vote-front
```
[ポータルから見た場合]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/765ffc5a-0ced-25ba-45fa-67d9cdd49f50.png)

3\. タグも確認。

```shell
az acr repository show-tags --name kenakamuacr --repository azure-vote-front --output table
```
```shell
Result
--------
v1
```
[ポータルから見た場合]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/82b36b40-46f1-0f7e-c831-f1da3d456576.png)

# まとめ

今回は ACR の作成とイメージのプッシュまでやりました。次回は AKS クラスターを作成します。

[次の記事へ](https://qiita.com/kenakamu/items/fb8adae1c5ddb906e0f2)
[目次に戻る](https://qiita.com/kenakamu/items/e155740aa60c85a3d867)

# 参考

[Azure Container Registry](https://docs.microsoft.com/ja-jp/azure/container-registry/)
[Azure Container Registry SKU](https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-skus)