こんにちは、エキサイト新卒1年目、趣味は自宅鯖(オンプレ)のNOGU(@NOGU_D626🐤)です。
前回 MacにAzure CLI のインストールを行いました。
今回はその続きでAzure Container RegistryをCLI上で作成し、DockerイメージをPushするところまでやっていきたいと思います。
公式のドキュメントはこちらになります。
前提
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 書きたいネタはたくさんありまくり♨️
それではまた次回!!