Spring MVC WEBアプリを Azure App Service 環境で起動する (Docker イメージ)
目的
Spring MVC WEBアプリを Azure App Service 環境で起動して理解を深めます。
実現すること
Microsoft Azure App Service に Spring MVC WEBアプリの Docker イメージをデプロイします。
開発環境
- Windows 11 Home 22H2 を使用しています。
- WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。
WSL (Microsoft Store アプリ版)
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Java JDK ※ 最小構成 Java JDK の導入と Hello World!
$ java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)
Maven ※ 最小構成 Maven の導入と Hello World!
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Docker Desktop
Version 4.16.3 (96739)
$ docker --version
Docker version 20.10.22, build 3a2c30b
$ docker-compose --version
Docker Compose version v2.15.1
※ この記事では基本的に Ubuntu のターミナルで操作を行います。
"Hello World" を表示する手順
Spring MVC WEBアプリの作成
最小構成 Spring MVC WEBアプリの Hello World! を参照してください。
プロジェクトフォルダに移動
※ ~/tmp/hello-spring-mvc をプロジェクトフォルダとします。
$ cd ~/tmp/hello-spring-mvc
Java アプリをビルド
※ target/hello-spring-mvc.war が作成されます。
$ mvn clean install
Docker イメージを作成
Dockerfile を作成
$ vim Dockerfile
ファイルの内容
FROM jetty:10.0.13-jre11-alpine
COPY target/*.war /var/lib/jetty/webapps/app.war
EXPOSE 8080
Docker イメージをビルド
※ ローカルの Docker 環境 (Docker Desktop) に app-hello-spring-mvc Docker イメージが作成されます。
$ docker build -t app-hello-spring-mvc .
Docker イメージの確認
$ docker images | grep app-hello-spring-mvc
app-hello-spring-mvc latest fb56b58a2aed 37 minutes ago 195MB
Azure のアカウントを取得
Azure CLI でサインイン
Azure CLI をインストールする手順 を参照してください。
$ az login
※ 最新バージョンに更新する場合
$ az upgrade
Azure 環境
リソースグループ
リソースグループを作成
$ az group create \
--name rg-hello \
--location japaneast
リソースグループ一覧表示
$ az group list
※ リソースグループを削除する場合
$ az group delete -n <group>
コンテナ レジストリ
コンテナ レジストリを作成
※ --sku Free では作成できません。
※ --name はパブリックで一意の値が求められます。
$ az acr create \
--resource-group rg-hello \
--name cr20230212 \
--sku Basic
コンテナ レジストリ一覧表示
$ az acr list
コンテナ レジストリログイン資格情報を表示
$ az acr update -n cr20230212 --admin-enabled true
$ az acr credential show \
--resource-group rg-hello \
--name cr20230212
{
"passwords": [
{
"name": "password",
"value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
{
"name": "password2",
"value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
],
"username": "cr20230212"
}
※ コンテナ レジストリを削除する場合
$ az acr delete --n <acr-name>
コンテナ レジストリにログイン
$ az acr login --name cr20230212
Docker イメージをコンテナ レジストリにプュシュ
$ docker tag app-hello-spring-mvc cr20230212.azurecr.io/app-hello-spring-mvc:latest
$ docker push cr20230212.azurecr.io/app-hello-spring-mvc:latest
コンテナ レジストリのイメージを確認
$ az acr repository list --name cr20230212 --output table
Result
--------------------
app-hello-spring-mvc
ローカルの Docker イメージを Azure コンテナ レジストリにプュシュすることが出来ました。
App Service プラン
App Service プランを作成
$ az appservice plan create \
--resource-group rg-hello \
--name asp-hello \
--sku Free \
--is-linux
App Service プランの一覧表示
$ az appservice plan list
※ App Service プランを削除する場合
$ az appservice plan delete -n <plan> -g <group>
App Service WEB アプリ
※ Azure App Service に Spring MVC WEBアプリの Docker イメージをデプロイする方法はいくつかありますが、今回は Azure CLI で ACR 上の Docker イメージをデプロイする方法を紹介します。
WEB アプリの作成とデプロイ
$ az webapp create \
--resource-group rg-hello \
--plan asp-hello \
--name app-hello-spring-mvc \
--deployment-container-image-name cr20230212.azurecr.io/app-hello-spring-mvc:latest \
--docker-registry-server-user cr20230212 \
--docker-registry-server-password XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Web アプリの設定を構成
※ App Service WEB アプリはデフォルトで 80 番ポートをリッスンする仕様です。
$ az webapp config appsettings set \
--resource-group rg-hello \
--name app-hello-spring-mvc \
--settings WEBSITES_PORT=8080
Web アプリのログ記録の構成
$ az webapp log config \
--resource-group rg-hello \
--name app-hello-spring-mvc \
--docker-container-logging filesystem \
--application-logging filesystem \
--web-server-logging filesystem
起動する場合
※ デフォルトで App Service は起動しているが Web アプリは起動していない。
$ az webapp start --name app-hello-spring-mvc --resource-group rg-hello
WEBブラウザーでアクセス
$ az webapp browse --name app-hello-spring-mvc --resource-group rg-hello
WEB アプリのログ確認
$ az webapp log tail --name app-hello-spring-mvc --resource-group rg-hello
※ 立ち上がりに少し時間が掛かりますがページが表示されます。
- しかし表示されたページ "/" にはコンテンツを設定していません。
改めてWEBブラウザで確認
※ URLは環境で読み替えて下さい。
https://app-hello-spring-mvc.azurewebsites.net/app/hello
WEBブラウザに "Hello World!" と表示することが出来ました。
まとめ
- Ubuntu の 最小構成の Java 開発環境で Spring MVC WEBアプリを Azure App Service 環境で起動させることが出来ました。