Azure Container Registry 入門 (Dockerイメージをプッシュ)

こんにちは、エキサイト新卒1年目、趣味は自宅鯖(オンプレ)のNOGU(@NOGU_D626🐤)です。

前回 MacにAzure CLI のインストールを行いました。
今回はその続きでAzure Container RegistryをCLI上で作成し、DockerイメージをPushするところまでやっていきたいと思います。

公式のドキュメントはこちらになります。

docs.microsoft.com

前提

  • PCへのAzure CLI のインストール作業は済んでいること。

  • Azure上にアカウントがあり、$ az loginコマンドを実行しログイン済みであること。

  • PCにDockerなどがインストールされていること。

※ 画像やコンソールの結果等などに関しては、個人アカウントでの検証を行っておりプライバシの問題やセキュリティの観点から一部マスクした状態で掲載させていただきます。 あらかじめご了承ください。

Azure Container Registryとは

Microsoft 独自のオープンソースの Docker Registry 2.0 に基づくマネージド Docker レジストリサービスです。
Azure Container Registry(ACR)はプライベートDockerコンテナーイメージのストレージを提供し、成果物をビルド、保存、管理することができます

Azure Container Registryの作成

Azure Container Registryを作成するには、Azureリソースグループが必要です。
Azureのリソースグループがやっていることとしてはリソースをまとめ、サブスクリプションに紐づけることを行っています。
また、リソースグループの大きな特徴としてリソースグループを削除すると、紐づけられているリソースも全て同時に削除されます。
説明が長くなってしまいましたが、以下のコマンドを実行しリソースグループを作成していきます。
今回は個人環境なので リソース名をrg-nogu-sandboxとしています。

$ az group create --name rg-nogu-sandbox --location japaneast

リソースグループが作成されたかは以下のコマンドを実行することで確認することができます。

$ az group list  --output table
                              
Name              Location    Status
----------------  ----------  ---------
dev               japaneast   Succeeded
NetworkWatcherRG  japaneast   Succeeded
rg-nogu-sandbox   japaneast   Succeeded

次に az acr createコマンドを使用し、Azure Container Registryを作成します。 必須のパラメータに関しては 以下の3つとなっています。簡単に紹介していきます

  • --name : コンテナー レジストリの名前。

  • --resource-group : リソース グループの名前。先ほど作成したリソースグループを指定します。

  • --sku : コンテナー レジストリの SKU。特に指定なけれはBasicでいいと思います。

それぞれの詳しいコマンドのパラメータについては公式サイトをご覧ください。

以下のコマンを実行します。

$ az acr create --resource-group rg-nogu-sandbox --name nogusandbox --sku Basic

実際にAzure Container Registryが作成されたかは以下のコマンドで確認することができます。

全部のコンテナーレジストリを一覧を表示する場合
az acr list -o table
NAME         RESOURCE GROUP    LOCATION    SKU    LOGIN SERVER            CREATION DATE         ADMIN ENABLED
-----------  ----------------  ----------  -----  ----------------------  --------------------  ---------------
nogusandbox  rg-nogu-sandbox   japaneast   Basic  nogusandbox.azurecr.io  2022-08-19T14:44:08Z  False
リソース グループ内のコンテナー レジストリを一覧を表示する場合
$ az acr list -g rg-nogu-sandbox -o table                                                             
NAME         RESOURCE GROUP    LOCATION    SKU    LOGIN SERVER            CREATION DATE         ADMIN ENABLED
-----------  ----------------  ----------  -----  ----------------------  --------------------  ---------------
nogusandbox  rg-nogu-sandbox   japaneast   Basic  nogusandbox.azurecr.io  2022-08-19T14:44:08Z  False

Dockerイメージの作成

Azure Container RegistryにプッシュするDockerイメージを作成します。 今回は以下のような最小構成のNginxのDockerファイルを用意します。

├── Dockerfile
├── default.conf
└── index.html

Dockerfile

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/
COPY ./*.html /var/www/html/

default.conf

server {
    listen 80;
    server_name my_nginx;
    charset UTF-8;

    location / {
        root /var/www/html;  # htmlファイルの配置場所を指定
        index  index.html index.htm;  # 最初に表示するhtmlファイルを指定 
    } 
}

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>TEST Deploy</title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>

必要なファイルの準備ができました。DockerイメージをACRにPUSHしていきたいところですが、一旦ローカル上で動作するか確認してからにしたいと思います。
Dockerイメージを作成するには docker build コマンドを実行します。

$ docker build -t docker-nginx .

[+] Building 1.3s (8/8) FINISHED                                                                                                             
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 36B                                                                                                     0.0s
 => [internal] load .dockerignore  
:
:
 => => naming to docker.io/library/docker-nginx                                                                                       0.0s

作成されたDockerイメージを確認します。

$ docker images 

docker-nginx                         latest    7a2458fd277e   2 minutes ago   142MB

作成したイメージを使ってDockerコンテナを起動してみます。
以下のコマンドを実行します。

$ docker run --name nginx-test --rm -d -p 80:80 docker-nginx

起動しているコンテナを確認するには docker ps コマンドを使用し、確認することができます。

$ docker ps

CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                NAMES
f02ff97d4b8f   docker-nginx   "/docker-entrypoint.…"   9 hours ago   Up 9 hours   0.0.0.0:80->80/tcp   nginx-test

ブラウザから「localhost」にアクセスすると以下のように表示されます。

ここまでDockerイメージの作成はと確認作業は完了しました。
次に実際に作成したイメージをあらかじめ作成しておいたAzure Container Registry にpushしていきたいと思います。

ACR (Azure Container Registry)へイメージをpushする

az acr loginコマンドでACRインスタンスにログインをしておきます。

$  az acr login --name nogusandbox

Login Succeeded

PushするDockerイメージは、ACRのログインサーバ名でタグ付けする必要がありDockerイメージをPushする際のルーティングとして使用されます。
以下のコマンドでAzure Container Registryのログインサーバ名を確認することができます。

$  az acr list --resource-group rg-nogu-sandbox --query "[].{acrLoginServer:loginServer}" --output table   


AcrLoginServer
----------------------
nogusandbox.azurecr.io

docker tag コマンドを使用してイメージにタグ付けします。

dockerを使い慣れてる人は多いと思いますが念のため説明します。
docker tagコマンドのフォーマットとオプションとしては以下のようになります。

docker tag [既存Dockerイメージ名orイメージID] [付与するDockerイメージ名]

実際に以下のコマンドを実行しタグをつけていきます。
適宜 ACRのログインサーバ名使用するイメージ名などは各自の環境に合わせて変更してください。

$ docker tag docker-nginx  nogusandbox.azurecr.io/docker-nginx:dev

タグを付けした後、docker images コマンド を実行してタグを確認します。

$ docker images   
                                                                                                                          
REPOSITORY                            TAG       IMAGE ID       CREATED         SIZE

nogusandbox.azurecr.io/docker-nginx   dev       7a2458fd277e   10 hours ago    142MB

タグを付けしたイメージを実際にACRにプッシュします。
以下のコマンを実行してください。

$ docker push nogusandbox.azurecr.io/docker-nginx:dev

ACRにプッシュしたイメージを確認するには、az acr repository listコマンドを使用することで確認することが可能です。

$ az acr repository list --name nogusandbox --output table      
                                                                           
Result
------------
docker-nginx

特定のイメージのタグを表示するには az acr repository show-tags コマンドで確認することが可能です。

$ az acr repository show-tags --name nogusandbox --repository docker-nginx --output table

Result
--------
dev

実際にpushしたイメージなどはazureのポータル上からも確認することが可能です。

ACR 上のイメージの実行する

az acr loginコマンドで ACR にログインしている状態にします。

$  az acr login --name nogusandbox

ACR のサーバを指定して docker run コマンドを実行することでコンテナイメージを実行することができます。

$  docker run --name nginx-test -it -d -p 80:80 nogusandbox.azurecr.io/docker-nginx:dev

実際に以下のコマンドを実行し,Dockerイメージとコンテナが作成されていることを確認してみましょう。

$ docker images

REPOSITORY                            TAG       IMAGE ID       CREATED         SIZE
nogusandbox.azurecr.io/docker-nginx   dev       7a2458fd277e   10 hours ago    142MB


$  docker ps

CONTAINER ID   IMAGE                                     COMMAND                  CREATED              STATUS              PORTS     NAMES
d16b2e1cc42e   nogusandbox.azurecr.io/docker-nginx:dev   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    quirky_cohen
その他

Dockerファイルからのbuildしてからイメージ作成を行いpushをするといった作業を分けて行いましたが同時に実行することも可能です。

$ az acr build --image nginx-nogu:v1 \ 
  --registry nogusandbox \          
  --file Dockerfile .

Packing source code into tar to upload...
Uploading archived source code from 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'...
Sending context (1.042 KiB) to registry: nogusandbox...
Queued a build with ID: ss
Waiting for an agent...
:
:
- image:
    registry: nogusandbox.azurecr.io
    repository: nginx-nogu
    tag: v1
    digest: xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/nginx
    tag: latest
    digest: xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  git: {}

Run ID: ss was successful after 31s
リソースをクリーンアップする

使い終わったリソースは料金がかかってしまうことあるので全て削除しても構わない場合は以下を実行しましょう。
時間がかかる場合がありますが気長に待ちましょう。

$ az group delete --name rg-nogu-sandbox

Are you sure you want to perform this operation? (y/n): y
 \ Running ..
最後に

長いチュートリアルになってしまいましたが、記事を最後まで読んでいただきありがとうございます。
記事に関するご指摘や意見等などありましたらお気軽にNOGU(@NOGU_D626🐤)にてDMいただければと思います。

公式のクイックスタートは以下になります。 docs.microsoft.com

次は・・・AzureかAWS Client VPN いやBIG-IP 書きたいネタはたくさんありまくり♨️

それではまた次回!!