LoginSignup
0
0

More than 1 year has passed since last update.

Spring Boot WEBサービスを ACI (Azure Container Instances) で起動する (Docker Hub カスタムコンテナイメージ)

Last updated at Posted at 2023-02-27

Spring Boot WEBサービスを ACI (Azure Container Instances) で起動する (Docker Hub カスタムコンテナイメージ)

目的

Spring Boot WEBサービスAzure Container Instances 環境で起動して理解を深めます。

実現すること

Microsoft Azure Container Instances (ACI) に Spring Boot WEBアプリのカスタムコンテナイメージをデプロイします。

この記事では、Docker Hub にプュシュしたパブリックアクセスのカスタムコンテナイメージを使用しています。 実際のシステムを構築される際にはご注意ください。

Microsoft Azure Container Registry (ACR) を使用した構成の例として、以下の記事もございます。

技術背景

Microsoft Azure Container Instances (ACI) とは?

こちらを展開してご覧いただけます。

Microsoft Azure Container Apps (ACA)

Microsoft Azure Container Instances (ACI) は、コンテナを簡単にデプロイ・実行できるマネージドコンテナ実行環境です。クラウドネイティブアプリケーションやマイクロサービスを構築する上で、柔軟性が高く、シンプルな設定でコンテナを実行できる点が特徴です。

また、料金形態も課金単位を秒単位まで細かく設定できるため、使い方に応じた最適なコスト管理が可能です。

開発環境

  • 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 Boot WEBサービスの作成

こちらを参照して頂けます。

プロジェクトフォルダに移動

※ ~/tmp/hello-spring-boot をプロジェクトフォルダとします。

$ cd ~/tmp/hello-spring-boot

Java アプリをビルド(※参考)

※ target/app.jar が作成されます。
※ 下の コンテナイメージを作成する操作でも同時に target/app.jar が作成されるので必須ではありません。

$ mvn clean install

コンテナイメージを作成

コンテナイメージをビルド

※ ローカルの Docker 環境 (Docker Desktop) に app-hello-spring-boot コンテナイメージが作成されます。
※ コンテナイメージの作成時間が Unix エポックになるのは spring-boot:build-image の仕様です。

$ mvn spring-boot:build-image \
    -Dspring-boot.build-image.imageName=app-hello-spring-boot

コンテナイメージの確認

$ docker images | grep app-hello-spring-boot
app-hello-spring-boot   latest   e37cc77f2b36   43 years ago   262MB

ローカルでコンテナイメージを起動して確認

$ docker run --name app-local -p 8080:8080 app-hello-spring-boot

別ターミナルから curl コマンドで確認

※ 8080 ポートでリッスン出来ているか確認します。

$ curl -v http://localhost:8080/api/data
*   Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api/data HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Mon, 27 Feb 2023 07:18:25 GMT
<
* Connection #0 to host localhost left intact
{"message":"Hello World!"}

Docker Hub にコンテナイメージを登録

※ $USER の部分はご自身のコンテナレジストリに読み替えて下さい。

タグ付け

$ docker tag app-hello-spring-boot $USER/app-hello-spring-boot:latest

プュシュ

$ docker push $USER/app-hello-spring-boot:latest

Docker Hub に $USER/app-hello-spring-boot:latest としてカスタムコンテナイメージが公開出来ました。

Azure のアカウントを取得

公式 Azure の無料アカウントを使ってクラウドで構築

Azure CLI でサインイン

こちらを参照して頂けます。

ログイン

$ az login

Azure 環境

リソースグループ

リソースグループを作成

Microsoft.Resources/resourceGroups
$ az group create \
    --name rg-hello \
    --location japaneast

リソースグループ一覧表示

$ az group list

※ リソースグループを削除する場合

$ az group delete -n <group>

ACI 環境

コンテナグループの作成とデプロイ
※ Kubernetes 基盤の環境だと思われるので少し時間がかかります。
※ $USER の部分はご自身のコンテナレジストリに読み替えて下さい。

Microsoft.ContainerInstance/containerGroups
$ az container create \
    --resource-group rg-hello \
    --name ci-hello \
    --image $USER/app-hello-spring-boot:latest \
    --ip-address public \
    --ports 8080

※ コンテナグループを削除する場合

$ az container delete -n <name> -g <group>

コンテナグループのIPアドレスを取得

$ az container show \
    --resource-group rg-hello \
    --name ci-hello \
    --query ipAddress.ip \
    --output tsv
20.46.187.231

WEBブラウザで確認
※ URLは環境で読み替えて下さい。

http://20.46.187.231:8080/api/data

WEBブラウザに {"message":"Hello World!"} と表示され、JSON データを取得することが出来ました。

※ 別ターミナルから curl コマンドで確認

$ curl -v http://20.46.187.231:8080/api/data
*   Trying 20.46.187.231:8080...
* Connected to 20.46.187.231 (20.46.187.231) port 8080 (#0)
> GET /api/data HTTP/1.1
> Host: 20.46.187.231:8080
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Mon, 27 Feb 2023 08:12:19 GMT
<
* Connection #0 to host 20.46.187.231 left intact
{"message":"Hello World!"}

ターミナルに {"message":"Hello World!"} と表示され、JSON データを取得することが出来ました。

※ Azure 側で SSL/TLS対応や HTTP/2プロトコル適用などはされていないようです。

コンテナに接続

$ az container exec \
    --resource-group rg-hello \
    --name ci-hello \
    --exec-command "/bin/bash"

コンテナに接続後

$ pwd
/workspace
$ ls -la
total 20
drwxr-xr-x 1 cnb  cnb  4096 Jan  1  1980 .
drwxr-xr-x 1 root root 4096 Feb 27 08:10 ..
drwxr-xr-x 1 cnb  cnb  4096 Jan  1  1980 BOOT-INF
drwxr-xr-x 3 cnb  cnb  4096 Jan  1  1980 META-INF
drwxr-xr-x 3 cnb  cnb  4096 Jan  1  1980 org

コンテナの情報

$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
NAME="Ubuntu"
ID=ubuntu
PRETTY_NAME="Paketo Buildpacks Base Bionic"
VERSION_ID="18.04"
HOME_URL="https://github.com/paketo-buildpacks/bionic-base-stack"
UBUNTU_CODENAME=bionic
VERSION="18.04.6 LTS (Bionic Beaver)"
ID_LIKE=debian
SUPPORT_URL="https://github.com/paketo-buildpacks/bionic-base-stack/blob/main/README.md"
BUG_REPORT_URL="https://github.com/paketo-buildpacks/bionic-base-stack/issues/new"
VERSION_CODENAME=bionic

まとめ

  • Ubuntu のシンプルな構成の Java 開発環境で Spring Boot WEBサービスのカスタムコンテナイメージを ACI (Azure Container Instances) 環境で起動させることが出来ました。

個人的見解

  • Microsoft Azure においては、Azure Container Apps という、コンテナイメージがより容易にデプロイ・運用出来る PaaS が開始されたので、Azure Container Instances の利用は用途によると思いました。

参考

[Microsoft Learn] Azure Container Instances (ACI) コマンド リファレンス

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0