Docker イメージを Microsoft Azure で運用する

最終更新日: 2020年6月12日
R8 | R9

Microsoft Azure とは

Microsoft Azure は、IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Servide)といった各種サービスを利用できるクラウドプラットフォームです。従量課金制となっており、利用に応じた分だけ支払うという料金体系です。

本資料では、Azureの以下のサービスを利用します。各機能の詳細は公式ガイドを参照してください。

Container Registry (CR)
プライベート版のDocker Hubと捉えるとよいでしょう。開発者が用意したDocker Imageをこのサービスに登録しておくことで、自身の別サービスから送ります。なおDocker以外のコンテナイメージの登録も可能です。
※ 以降「Azure Container Registry」を「ACR」または「CR」と省略して表記する場合があります。
Web App Service (Web App)
Docker HubやContainer Registryに登録されているWebアプリケーションのImageを使ってWebアプリケーションをサービスとして起動させる機能です。
Storage Account (Storage)
複数のサービス間でファイル共有などを実現できるサービスです。
Resource Group
Azureの各種サービスをさまざまな用途でグループ化する機能です。(本機能は複数のサービスをグループ化する機能となっており、これ自体が直接的なサービスではありません。)

Azure Portal

Azure Portal は、Azure全般の管理に使用できるポータルサイトです。Web画面(GUI)からAzureの各種サービスの作成などの管理が可能です。

Azure アカウントの用意

Microsoft Azureのアカウントを用意します。本マニュアルに記載の内容は、無償試用版でもお試しいただけます。

ワンポイント

本ページは2019年2月時点の内容にもとづいています。利用した Wagby のバージョンは R8.2.0 で、Windows OS を用いています。

Azure CLIのインストール

事前の準備として、Azure CLI をインストールします。

Azure CLIをインストールすることで、ローカルのターミナル(Windowsが提供するコマンドプロンプトまたはPowerShell)からAzureのコマンド類("az xxxx")を利用できるようになります。

このページでは、コマンドラインインタフェース (CLI) を使った Azure の利用方法も説明します。

Azure CLIへのログイン

次のコマンドを実行するとブラウザ側でAzureへのログイン画面が開きます。Azureに登録されているユーザでログインできることを確認してください。

C:\Wagby-8.2.0>az login

Azure Container Registryの準備

続いて Container Registry (CR) を作成します。ここにWagbyのDocker Imageが登録されます。

Resource Groupの作成

Azure Portalから「リソースグループ > 追加」を選択します。

図1 リソースグループの作成(1)
図2 リソースグループの作成(2)

以降は、この「wagbytestrg」の中にアプリケーションなどを準備していきます。

すでにご自身のリソースグループが用意されている場合は、それをご利用いただくこともできます。適時、説明文を読み替えてください。

Container Registryの作成

Portalから「リソースの作成 > コンテナ > Container Registry」を選択します。

図3 ContainerRegistryの作成

登録例は次のようになります。

設定項目説明
レジストリ名今回は "wagbycr" とした。
サブスクリプション任意 ("試用版" など)
リソースグループ先に作成した "wagbyrg" もしくは自身のRG
場所任意 ("西日本" など)
管理者ユーザ"有効" とします。これで管理者ユーザをdocker loginとして利用できるようになります。
SKU任意 ("Basic","Standard" など)

入力後、「作成」ボタンを押下することで準備完了となります。この確認はPortalの「リソースグループ」内に作成したCRができているかをチェックします。

Dockerサンプルの動作確認

ローカルにDockerがインストールされた開発者の環境で、DockerとAzure Container Registryを行き来するために、手もとのDockerが外部へアクセスできることを確認します。

ここではDockerはすでにインストール済みとしています。

Dockerのサンプル「hello-world」を登録してみましょう。このサンプルはDockerに付属しています。はじめにローカルで動作することを確認しておきます。

C:\Wagby-8.2.0>docker run -it hello-world

ここでは wagbycr.azurecr.io というCRのlogin server名を付与します。書式は次の通りです。

docker tag [local image name] [ACR Login Server]/[Image Name]:[Label]
CRのLogin Server名はPortalからCRの詳細画面を開くと*login server*として表示されています。
C:\Wagby-8.2.0>docker tag hello-world wagbycr.azurecr.io/hello-world:v1

タグを設定後、イメージを転送します。

C:\Wagby-8.2.0>docker push wagbycr.azurecr.io/hello-world:v1
The push refers to repository [wagbycr.azurecr.io/hello-world]
af0b15c8625b: Pushed
v1: digest: sha256:92c7f9c92844bbbb5d0a1
...

転送後、ローカルの開発環境に残っているhello-world:v1イメージを削除しておきます。(これはAzureのCRから削除するということではありません。)

C:\Wagby-8.2.0>docker rmi wagbycr.azurecr.io/hello-world:v1

Azure Container RegistryへDockerイメージを登録する

Azure CLIから上記作成のCRにアクセスします。コマンドプロンプトを開いてAzureへログインします。

C:\Wagby-8.2.0>az login
[
  {
    "cloudName": "AzureCloud",
    "id": "xxxxxx",
    "isDefault": true,
    "name": "無料試用版",
    "state": "Enabled",
...
  }
]

CR内のコンテナイメージを確認します。az コマンドを使います。

C:\Wagby-8.2.0>az acr repository list --name wagbycr --output table
Result
-----------
hello-world
C:\Wagby-8.2.0>az acr repository show-tags --name wagbycr --repository hello-world --output table
Result
--------
v1

コマンドラインではなく、Azure Portalからwagbycr内のレポジトリを確認することもできます。

図4 AzurePortalでwagbycr内のレポジトリを確認する

この「hello-world」は以降、使用しませんので、ここで削除しておきます。削除は hello-world の右端にある "... > 削除" を選択することで対応できます。

wagbyappのDockerイメージの作成

ここまでで、Azure に Docker イメージを転送し、実行できるまでを確認できました。
いよいよ Wagby の Docker 対応を説明します。次のページをベースにしており、AWS ではなく Azure 向けの説明に変えています。

1. Docker用設定ファイルのコピーと展開

Wagby で設計したリポジトリを用意します。ここでは内蔵データベース(HSQLDB)を利用するものとします。

その環境に次の設定ファイルを展開(上書き)します。

  • Dockerfile
  • docker-compose.yml
  • customize/tomcat/conf/logging.properties
  • customize/resources/log4j.properties

ログ出力はファイルへは行わず、標準出力にするように変更します。 このため "管理処理 > システムログ閲覧"、"管理処理 > 統計情報"、ログを監視するジョブ(AlterMailFromLog)機能は利用できなくなります。 詳細は "環境 > オートスケール環境で運用する > システムログ閲覧" をご覧下さい。

設定ファイルは、ここからダウンロードしてください。

2. ビルドと WAR ファイルの作成

フルビルド後、WARファイルを作成します。
コマンドプロンプトを開きます。Wagbyをインストールしたフォルダの直下にあるmiscフォルダに移動し、createWar コマンドを実行します。[詳細...]

C:\Wagby-8.2.0/misc>createWar.bat

3. Dockerイメージの作成

Wagbyをインストールしたフォルダに戻ります。次のDockerコマンドを実行します。

最初に展開した設定ファイルに含まれているDockerfileが、Wagbyインストールフォルダに含まれている必要があります。
C:\Wagby-8.2.0>docker build -t jasminesoft/wagbyapp .

4. Dockerイメージの検証

docker run コマンドでアプリケーションを動作させてみます。

C:\Wagby-8.2.0>docker run -d --rm -p 8888:8080 --name wagbyapp1 jasminesoft/wagbyapp
bf04a4b969e1de5f71db19ce77a26a89400beac05abcda2805b61b282b34db18

docker ps コマンドで、起動したプロセスの状態を確認します。

C:\Wagby-8.2.0>docker ps
CONTAINER ID        IMAGE                  COMMAND             CREATED              STATUS              PORTS                    NAMES
bf04a4b969e1        jasminesoft/wagbyapp   "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:8888->8080/tcp   wagbyapp1

起動を確認できましたら、ブラウザを使って Wagby アプリケーションの画面を開きます。アドレスバーに入力する URL は次のとおりです。

http://localhost:8888/wagby/

5. 停止

動作を確認できたら、docker stop コマンドで起動した Wagby アプリケーションを停止させておきます。

C:\Wagby-8.2.0>docker stop wagbyapp1

6. Dockerイメージをファイルとして生成する

起動を確認できたので、現在の環境をDockerイメージファイルとします。

最初に展開した設定ファイルに含まれているdocker-compose.ymlが、Wagbyインストールフォルダに含まれている必要があります。
C:\Wagby-8.2.0>docker-compose build

作成したイメージファイルの動作を確認します。

C:\Wagby-8.2.0>docker-compose up

先ほどと同様に、ブラウザで http://localhost:8080/wagby/ にアクセスします。ログオン画面が表示されれば成功です。

動作の確認ができましたら、停止しておきます。

C:\Wagby-8.2.0>docker-compose down

7. イメージファイルの確認

docker images コマンドを使って、現在、開発者のローカル環境にあるイメージを確認できます。

C:\Wagby-8.2.0>docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
wagbyapp               latest              8d75c4f9bab8        51 seconds ago      641MB
jasminesoft/wagbyapp   latest              7462a41498cd        2 minutes ago       641MB
tomcat                 8.5                 a0de3d800756        2 days ago          462MB

ここで例として表示されている「jasminesoft/wagbyapp」は最初の検証用に作ったイメージです。これからAzure上で使用するのは「wagbyapp」のイメージになります。必要に応じで不要なimageは削除しておくこともできます。削除は docker rmi コマンドを使います。

Azure Container RegistryへのWagby Dockerイメージの登録

上で用意したAzure Container Registryへ、WagbyのDockerイメージを登録します。

Azure CLIから上記作成のCRにアクセスします。コマンドプロンプトを開いてAzureへログインします。

C:\Wagby-8.2.0>az login
...
C:\Wagby-8.2.0>az acr login --name wagbycr
...

先に用意した wagbyapp というDocker イメージを CR "wagbycr" にアップロードします。
まず手元のDockerイメージを確認します。

C:\Wagby-8.2.0>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wagbyapp            latest              23e10fc32c99        8 minutes ago       641MB
                            ea7fb3b499af        24 hours ago        641MB
tomcat              8.5                 a0de3d800756        32 hours ago        462MB
...

"wagbyapp" を "wagbycr.azurecr.io/wagbyapp:v1" というタグと紐づけます。

この記法は `[ACR Login Server]/[Image Name]:[Label]` となります。
C:\Wagby-8.2.0>docker tag wagbyapp wagbycr.azurecr.io/wagbyapp:v1

これをAzureのwagbycrに転送します。

C:\Wagby-8.2.0>docker push wagbycr.azurecr.io/wagbyapp:v1
The push refers to repository [wagbycr.azurecr.io/wagbyapp]
34cf94c02412: Pushed
...
13d5529fd232: Pushed
v1: digest: sha256:0251590db9e0abef87cb0ecc35f9543e0cf4e39f66c3276d6fa11b9db544b44d size: 4711

手元のイメージを削除しておきます。

C:\Wagby-8.2.0>docker rmi wagbycr.azurecr.io/wagbyapp:v1
Untagged: wagbycr.azurecr.io/wagbyapp:v1
Untagged: wagbycr.azurecr.io/wagbyapp@sha256:0251590db9e0abef87cb0ecc35f9543e0cf4e39f66c3276d6fa11b9db544b44d

アップロードされているかを確認します。

C:\Wagby-8.2.0>az acr repository list --name wagbycr --output table
Result
-----------
hello-world
wagbyapp
C:\Wagby-8.2.0>az acr repository show-tags --name wagbycr --repository wagbyapp --output table
Result
--------
v1

Azure Portalでもイメージが表示されることを確認します。

図5 wagbyappの存在を確認する

ここまでの操作で、AzureのContainer Registry(ここではwagbycr)に wagbyappのDockerイメージをアップロードできました。

Azure Container RegistryでWagby Dockerイメージのインスタンスを起動する

1. App Service Planを準備する

ワンポイント

既にご自身でApp Service Planを用意しているなどの場合は読み飛ばしてください。2. の Web App Service の設定で、適宜割り当ててください。

App Service Plan とは、指定したリソース一式に対して、特定のサービス群(例えばWeb App Service)を割り当てることでAzureリソースの使用率を最適化できるというものです。

ここでは「開発用」に1つプランを用意し、これにWagbyアプリケーション(wagbyapp)を設定します。

Portalから "リソース作成 > 検索"で「App Service Plan」を検索します。"選択 > 新規作成"で新規作成画面を開きます。

図6 appserviceplanで検索する

この設定の途中にある「SKU」は、価格に応じたリソースのレベルとなっています。選択肢は次の通りです。

選択肢説明
F1無料 (Linuxが使えない)
D11GB RAM, 1083円/月 (Linuxが使えない)
B11.75GB RAM, 6249円/月 (Linuxが使える)
2019年2月時点の内容です。最新の状態に置き換えてお読みください。

CLIから作成することもできます。例を示します。

C:\Wagby-8.2.0>az appservice plan create --name wagbyAppServicePlan --resource-group wagbytestrg --sku B1 --is-linux

2. Web App Service の作成

Wagbyアプリケーションを運用するための「Web App Service」を作成します。

以下の説明は Azure Portal を使います。2019年2月時点ではCLIでイメージの指定時にAzure Container Registryを選択することができなかったためです。

Portalから "リソースの作成 > Web > Web App" を選択します。

図7 WebAppServiceの作成(1)

基本設定を次のように指定します。

  • 名称を "wagbywebapp" とします。
  • wagbyAppServicePlanなど適当なプランを指定します。
  • Dockerイメージを選択し、詳細を「コンテナ構成」をクリックして指定します。
図8 WebAppServiceの作成(2)

「コンテナの構成」を選択します。「Azure コンテナレジストリ」を選択し、先に用意したCR (wagbycr) 内のWagbyappイメージを使うようにします。

図9 WebAppServiceの作成(3)

ここまでの設定を保存して、終了します。

3. 設定を確認する

ここまでの設定内容を確認することができます。 Portalから"リソースグループ > wagbytestrg >「wagbywebapp」(App Serviceカテゴリ)" を選択します。

図10 設定の確認(1)
図11 設定の確認(2)

4. パラメータを追加する

ここまでの設定に加え、wagbyapp を起動するためのパラメータを追加します。具体的には次のとおりです。

パラメータ説明
WEBSITES_PORT8080wagbyappイメージの利用するポート8080をWebポートに指定する。最初の「docker-compose up」でテスト起動したときのURLを参考に。(http://localhost:8080/wagby/)
WEBSITES_CONTAINER_START_TIME_LIMIT1800Webコンテナの起動タイムアウト時間を、指定できる最大値の1800にする。

Azure Portalを利用する場合は、"wagbywebapp > アプリケーション設定" を開きます。 上記パラメータ(「アプリ設定名」(key)と「値」(value) )を追加します。

図12 パラメータの追加

CLIでも設定できます。次のコマンドになります。

C:\Wagby-8.2.0>az webapp config appsettings set --resource-group wagbytestrg --name wagbywebapp --settings WEBSITES_PORT=8080
C:\Wagby-8.2.0>az webapp config appsettings set --resource-group wagbytestrg --name wagbywebapp --settings WEBSITES_CONTAINER_START_TIME_LIMIT=1800

5. Web App Serviceの停止と起動(再起動)

ここまでの設定を行なったあと、wagbywebapp を停止して、起動します。

CLIではstartやrestartがうまく動作しないことがありました。この場合はPortalから操作してください。

起動後は以下のURLにアクセスします。Wagbyのログオン画面が表示されることを確認してください。

https://wagbywebapp.azurewebsites.net/wagby/

図13 Wagbyログオン画面が表示される
最初のWeb Appの起動ではWagbyアプリケーションが正しく起動しない場合がありました。この場合は初回の起動や設定変更直後の起動後にいったん停止し、起動しなおしてください。(それでもアクセスできない場合は設定をみなおしてください。)