【Microsoft Azure】DockerコンテナをACR経由でAppServiceにデプロイする

こんにちは。今日は、オンプレミス(手元)の環境にあるDockerコンテナをAppServiceにデプロイする手順について整理しておきたいと思います。

Dockerイメージを準備する

既に手元にDocker環境がある方は読み飛ばしていただいて問題ありません。

例えば、Azure App ServiceでWebサーバーNginxをベースにしたアプリケーションをデプロイしたいというケースを想定して、Nginxが動作するDockerコンテナを作成して、Azure App Serviceにデプロイしてみたいと思います。

Dockerをインストールする

ここからはローカル環境にDockerがインストールされている前提で説明します。(こちらがまだの方は、Dockerインストールを先に行ってください)

Nginx Dockerイメージを取得する

Nginxを搭載したDockerコンテナイメージは、Docker HubでNginx公式のものが配布されているので、こちらを取得します。以下コマンドで、利用可能な(=Docker Hubで公開されている)キーワードを含むDockerイメージを検索可能です。OFFICIAL = [OK]となっているものが公式のものです。

docker search nginx

続いて、公式のNginx Dockerイメージをダウンロードします。

docker pull nginx

最後に、正しくDockerイメージがダウンロードできたことを確認します。”nginx”というリポジトリが追加できていますね。

docker image ls 

Dockerコンテナの動作確認

それでは、このコンテナを実行してみます。

docker run --name nginx01 -d -p 8080:80 nginx

上のコマンドを実行すると、バックグラウンドでコンテナが起動します。

さて、この状態でブラウザでhttp://localhost:8080を指定すると、Dockerコンテナ上で起動するNginxサーバに接続することができました。

ちなみにですが、以下のコマンドで、nginxのDockerイメージのレイヤー構成を確認してみると、コンテナ起動時にNginxが起動していることが分かります。なので、コンテナ起動後にすぐブラウザからnginxのページに接続できるわけですね。

docker inspect nginx

Docker上に起動するプロセスとしても確認することができます。

docker ps

動作確認ができたところで、一度プロセスを停止しておきます。

docker stop コンテナID
docker rm コンテナID

Azure App Service for Containerに移行する

さて、ここからは作成したDockerイメージをAzure App Service上に展開していきます。

App ServiceにDockerコンテナを展開する方法は、2020年9月現在以下の4種類があります。

  • Azure Container Registry
  • Docker Hub
  • プライベートレジストリ
  • クイックスタート

今回は、Azure Container RegistryからDockerイメージを取得してデプロイする方法を選択しようと思います。

Azure Container Registry (ACR) にDockerイメージを登録する

Azure Portalから、コンテナレジストリを選択して作成します。

レジストリを作成すると、ログインサーバーという情報が概要から確認できるようになります。

これが、DockerイメージをACRに登録するために必要な情報になります。

続いて、このレジストリにDockerイメージを追加します。登録には、Azure CLIが必要ですので、事前にインストールしておいてください。

詳しくは、こちらをご参照ください。

Azure CLIがインストールされた状態で、はじめにAzure ACRへのログインを行う必要があります。

## Azure ACRへのログイン
az acr login -n ACR名

Login Succeedと表示されれば成功です。続けて、ローカルのDockerイメージをACRにプッシュします。

ここには、ACR固有のお作法があり、専用のタグをイメージに付与する必要があります。

## docker tag Dockerイメージ名 ログインサーバー/名前:バージョン
docker tag nginx sampleregistry013.azurecr.io/nginx:v1

docker image ls

リポジトリには2つ表示されていて少し混乱しました(Dockerイメージがコピーされた?)が、これは、そういうわけではなくあくまでイメージは1つ、ということみたいです。

そして、このタグをつけたDockerイメージをACRにPushします。

 docker push sampleregistry013.azurecr.io/nginx:v1

Pushが成功したようです!Azure Portalから確認してみると、nginxリポジトリが追加されています!

これで、ACR上にnginx Dockerイメージが登録され、他サービスから利用できるようになりました!

Azure App ServiceにDockerイメージをデプロイする

Azure Portal上からWebアプリ(App Service)を選択して作成します。

このとき、作成画面で「コンテナ」を指定します。

続けて、Dockerの設定でACRを選択して、先ほど登録したリポジトリを選択します。

・・・とここでエラー発生。調べてみると、これはACRでAdminユーザが有効化されていないことが原因のようです。

一度ACRに戻り、Adminユーザを有効化します。アクセスキーブレードから管理者ユーザを”有効”にします。

ちなみに、Azure CLIから設定する場合は、以下コマンドになります。

az acr update -n <acrName> --admin-enabled true
ACRの管理者アカウントとは?

こちらに説明がありますが、

  • レジストリに対する完全なアクセス許可を持つ
  • 既定では無効化されている
  • レジストリからAzureサービスにイメージをデプロイする場合に管理者アカウントが利用される

https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-authentication#admin-account

もう一度WebAppの設定をやり直すと、今度は無事イメージを選択できました!

設定が終わったら、App ServiceのURLにアクセスしてみます。すると・・・

でたー!無事、DockerイメージをApp Serviceにデプロイすることができました!

本日も最後までご覧いただきありがとうございました!

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。