サポート > Wagby Developer Network(R8) > サーバの運用 > Docker イメージを Microsoft Azure で運用する

Microsoft Azure は Docker コンテナをサポートします。Docker 対応アプリケーションの起動や終了をはじめとするさまざまな管理を行うことができます。

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

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

Azure CLIへのログイン

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

C:\Wagby-8.2.0>az login

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

Resource Groupの作成

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

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

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

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

Container Registryの作成

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

図4 Container Registryの作成

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

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

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

ローカルに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内のレポジトリを確認することもできます。

図1 Azure Portalでwagbycr内のレポジトリを確認する

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

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

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

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

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

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

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

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 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イメージをアップロードできました。

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 "app service plan" で検索する

この設定の途中にある「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 Web App Service の作成 (1)

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

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

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

図9 Web App Service の作成 (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アプリケーションが正しく起動しない場合がありました。この場合は初回の起動や設定変更直後の起動後にいったん停止し、起動しなおしてください。(それでもアクセスできない場合は設定をみなおしてください。)