こんにちは。今日は、オンプレミス(手元)の環境にあるDockerコンテナをAppServiceにデプロイする手順について整理しておきたいと思います。
Contents
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
もう一度WebAppの設定をやり直すと、今度は無事イメージを選択できました!
設定が終わったら、App ServiceのURLにアクセスしてみます。すると・・・
でたー!無事、DockerイメージをApp Serviceにデプロイすることができました!
本日も最後までご覧いただきありがとうございました!
こちらに説明がありますが、
https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-authentication#admin-account