将Spring Boot自定义容器映像部署到Azure Container Apps(ACA):使用GraalVM生成本地映像
将Spring Boot自定义容器映像部署到Azure Container Apps(ACA):使用GraalVM本机映像。
你好,我是株式会社船井総研デジタル的员工 @fsdg-adachi_h 。今天我将介绍在Azure Container Apps环境中,使用GraalVM生成本地镜像的Spring Boot Web应用程序,并将其作为容器启动的方法。

目标
我将在Windows 11上使用Linux进行云开发。
您可以在这里查看文章列表。
实现
将GraalVM原生映像的Spring Boot Web应用程序部署到Microsoft Azure Container Apps (ACA)的自定义容器映像中。
以原生图像格式启动应用程序容器
技术话题
Microsoft Azure 容器化应用(ACA)是什么?
这是一个在Azure上运行的容器应用平台。
ACA支持Docker容器和Kubernetes集群环境,开发人员可以创建容器镜像,并将其部署为Kubernetes资源。此外,ACA支持自定义域名,可以保持公司品牌的一致性。
优点
说明
简单的设置和部署
ACA具有简单的用户界面,只需点击几次即可设置和部署容器应用。
可扩展性
ACA可以自动进行扩展。当应用程序所需的资源增加时,ACA会自动添加所需的资源并分散处理。
安全性
ACA提供了在运行容器应用时所需的安全功能。例如,与Azure Active Directory的集成以及容器级的访问控制等。
成本效益
ACA在需要时添加所需资源,可以将无用资源的使用降至最低。此外,只需支付所需资源的费用,可以以成本有效的方式使用。
开发环境
- Windows 11 Home 22H2 を使用しています。
> wsl –version
WSL版本:1.0.3.0
内核版本:5.15.79.1
WSLg版本:1.0.47Ubuntu* 您可以从此相关文章中了解安装方法
$ lsb_release -a
没有可用的LSB模块。
发行商ID:Ubuntu
描述:Ubuntu 22.04.1 LTS
版本:22.04
Java JDK* 您可以从此相关文章中了解安装方法
$ java -version
openjdk版本:”17.0.6″ 2023-01-17
OpenJDK运行时环境GraalVM CE 22.3.1(构建 17.0.6+10-jvmci-22.3-b13)
OpenJDK 64位服务器VM GraalVM CE 22.3.1(构建 17.0.6+10-jvmci-22.3-b13,混合模式,共享)
Maven* 您可以从此相关文章中了解安装方法
$ mvn -version
Apache Maven 3.6.3
Maven主页:/usr/share/maven
Java版本:11.0.18,供应商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64
Docker* 您可以从此相关文章中了解安装方法
$ docker –version
Docker版本23.0.1,构建a5ee5b1
Azure CLI* 您可以从此相关文章中了解安装方法
$ az –version
azure-cli 2.45.0
core 2.45.0
telemetry 1.0.8
创建Web应用程序的规范
显示”Hello World”的步骤
创建Spring Boot Web服务
您可以在本关联文章中确认步骤。
移动至项目文件夹。
将目录切换至项目文件夹。
※ 以 ~/tmp/hello-spring-boot 为项目文件夹。
$ cd ~/tmp/hello-spring-boot
确认容器镜像
启动Docker守护进程。
$ sudo service docker start
* Starting Docker: docker [ OK ]
我会检查容器镜像。
$ docker images | grep app-hello-spring-boot-native
app-hello-spring-boot-native latest f0794df4d28c 23 minutes ago 149MB
将容器镜像注册到Docker Hub。
登录Docker Hub。
$ docker login
Login Succeeded
给容器镜像打上标签。
$ docker tag app-hello-spring-boot-native:latest \
$USER/app-hello-spring-boot-native:latest
将容器映像推送到Docker Hub。
$ docker push $USER/app-hello-spring-boot-native:latest
创建Shell变量
location_name=japaneast
resource_group_name=rg-hello
containerapp_env_name=cae-hello
containerapp_name=ca-hello-spring-boot-native
container_image_name=app-hello-spring-boot-native:latest
登入Azure环境
以下是一篇解释从相关文章继续的步骤的文章。
使用 Azure CLI 进行登录。
$ az login
蔚藍環境
资源组
创建资源组。
$ az group create \
--name $resource_group_name \
--location $location_name
容器应用环境
创建容器应用环境。
※ 由于基于Kubernetes基础设施,所以可能需要一些时间。
$ az containerapp env create \
--resource-group $resource_group_name \
--name $containerapp_env_name \
--location $location_name
容器应用程序
进行容器应用的创建和部署。
$ az containerapp create \
--resource-group $resource_group_name \
--environment $containerapp_env_name \
--name $containerapp_name \
--image $USER/$container_image_name \
--target-port 8080 \
--ingress 'external' \
--min-replicas 0
$ az containerapp delete \
–resource-group $resource_group_name \
–name $containerapp_name
将容器应用的FQDN作为shell变量containerapp_fqdn获取。
$ containerapp_fqdn=$(az containerapp show \
--resource-group $resource_group_name \
--name $containerapp_name \
--query 'properties.configuration.ingress.fqdn' \
--output tsv)
确认容器应用的FQDN。
$ set | grep containerapp_fqdn
containerapp_fqdn=ca-hello-spring-boot-native.wonderfuldune-033c35fb.japaneast.awesomecontainerapps.io
在中国称为“Azure门户”的验证

验证容器的运行
从终端使用curl命令进行确认。
$ curl https://$containerapp_fqdn/api/data -w '\ntime_total: %{time_total}s\n'
完成(※省略time_total)
{"message":"Hello World!"}
连接到容器
连接到容器应用程序
$ az containerapp exec \
--resource-group $resource_group_name \
--name $containerapp_name
连接到容器后,请确认目录。
※离开容器时按ctrl + D。
# pwd
/app
# ls -lah
total 67M
drwxr-xr-x 1 root root 4.0K Aug 2 09:18 .
drwxr-xr-x 1 root root 4.0K Aug 2 11:03 ..
-rwxr-xr-x 1 root root 67M Aug 2 09:16 app
使用top命令来检查当前情况。
top - 11:04:32 up 18:34, 0 users, load average: 0.10, 0.18, 0.29
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.4 us, 1.0 sy, 0.0 ni, 96.5 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 15990.8 total, 4189.2 free, 2167.2 used, 9634.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 13467.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 1396004 94288 48104 S 0.0 0.6 0:00.06 app
24 root 20 0 2888 956 864 S 0.0 0.0 0:00.00 sh
31 root 20 0 7316 3492 2928 R 0.0 0.0 0:00.00 top
以下是使用 top 命令显示 CPU 状况的情况。
top - 11:04:45 up 18:35, 0 users, load average: 0.09, 0.17, 0.28
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu0 : 2.4 us, 0.3 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 1.0 us, 0.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 2.0 us, 0.3 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15990.8 total, 4192.7 free, 2163.4 used, 9634.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 13471.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 1396004 94288 48104 S 0.0 0.6 0:00.06 app
24 root 20 0 2888 956 864 S 0.0 0.0 0:00.00 sh
31 root 20 0 7316 3492 2928 R 0.0 0.0 0:00.00 top
我尝试展示容器的信息。
# cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
表演的计量
容器环境 ɡqì
容器资源的分配
请求处理完成所需时间。
日志流:显示启动时间的日志
2023-08-02T10:44:27.514912040Z 2023-08-02T10:44:27.514Z INFO 1 --- [ main] com.example.springboot.Application : Started Application in 0.042 seconds (process running for 0.045)
2023-08-02T10:55:00.896887847Z 2023-08-02T10:55:00.896Z INFO 1 --- [ main] com.example.springboot.Application : Started Application in 0.039 seconds (process running for 0.042)
度量: CPU利用率
度量:内存使用量
总结
我可以在Azure Container Apps环境中启动通过Dockerfile构建的GraalVM原生映像Spring Boot Web服务的自定义容器映像。
您觉得怎么样?作为验证目的,您可以在 Azure Container Apps 环境中轻松启动 GraalVM 的本地映像 Spring Boot Web 应用程序作为容器。请务必试一试。我们将继续介绍 Azure 的开发环境等内容,请敬请期待。
相关文章
让我们与常规的自定义容器映像的部署进行比较!