LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-02-16

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

目的

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

実現すること

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

技術背景

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

Spring Boot WEBサービスの Hello World! を参照して頂けます。

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

※ ~/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
app-hello-spring-boot-app   latest   e37cc77f2b36   43 years ago   262MB

Azure のアカウントを取得

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

Azure CLI でサインイン

Azure CLI をインストールする手順 を参照して頂けます。

$ az login

Azure 環境

リソースグループ

リソースグループを作成

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

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

$ az group list

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

$ az group delete -n <group>

コンテナ レジストリ

コンテナ レジストリを作成
※ --sku Free では作成できません。
※ --name はパブリックで一意の値が求められます。

Microsoft.ContainerRegistry/registries
$ 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 tag app-hello-spring-boot cr20230212.azurecr.io/app-hello-spring-boot:latest
$ docker push cr20230212.azurecr.io/app-hello-spring-boot:latest

コンテナ レジストリのイメージを確認

$ az acr repository list --name cr20230212 --output table
Result
---------------------
app-hello-spring-boot

ローカルの コンテナイメージを Azure コンテナ レジストリにプュシュすることが出来ました。

ACI 環境

コンテナグループの作成とデプロイ

Microsoft.ContainerInstance/containerGroups
$ az container create \
    --resource-group rg-hello \
    --name ci-hello \
    --image cr20230212.azurecr.io/app-hello-spring-boot:latest \
    --registry-login-server cr20230212.azurecr.io \
    --registry-username cr20230212 \
    --registry-password XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
    --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.222.223.225

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

http://20.222.223.225:8080/api/data

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

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

$ curl -v http://20.222.223.225:8080/api/data
*   Trying 20.222.223.225:8080...
* Connected to 20.222.223.225 (20.222.223.225) port 8080 (#0)
> GET /api/data HTTP/1.1
> Host: 20.222.223.225: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.222.223.225 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) 環境で起動させることが出来ました。

参考

公式 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