在 Azure 容器应用程序(ACA)中部署 Spring Boot Web 服务(使用 Docker Hub 自定义容器镜像)
使用Azure容器应用程序(ACA)将Spring Boot Web服务部署到Docker Hub的自定义容器映像。

目标
使用 Windows 11 的 Linux 进行云端开发。
您可以从这里查看文章列表。
实现
将Spring Boot Web应用程序的自定义容器映像部署到Microsoft Azure容器应用程序(ACA)。
以JAR文件格式作为容器来启动应用程序。
技术主题
微软Azure容器应用程序(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模块。
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Java JDK *您可以从相关文章中查找安装方法。
$ java -version
openjdk version “11.0.18” 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
Maven *您可以从相关文章中查找安装方法。
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Docker *您可以从相关文章中查找安装方法。
$ docker –version
Docker版本23.0.1,构建a5ee5b1
制作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
app-hello-spring-boot latest 39115028afa6 12 seconds ago 390MB
将容器镜像注册到 Docker Hub。
创建一个Docker Hub帐户。
https://hub.docker.com/signupDocker Hub 是一个基于云的注册表,用于共享、存储和管理容器。在 Docker Hub 上存储着由社区创建的官方和社区图像。此外,用户还可以上传和共享自定义容器图像。
登录 Docker Hub。
$ docker login
Login Succeeded
给容器镜像打上标签。
$ docker tag app-hello-spring-boot:latest \
$USER/app-hello-spring-boot:latest
在这个示例中,为名为app-hello-spring-boot的容器镜像添加了标签user/app-hello-spring-boot:latest。这里的user表示Docker Hub上的用户名。标签可以在冒号 : 后面包含版本等信息,但在这里我们指定了latest,表示最新版本。
将容器镜像推送到Docker Hub。
$ docker push $USER/app-hello-spring-boot:latest
这样,将在 Docker Hub 上创建一个名为 user 的用户仓库,并在其中上传一个名为 app-hello-spring-boot 的容器镜像。
创建shell变量
location_name=japaneast
resource_group_name=rg-hello
containerapp_env_name=cae-hello
containerapp_name=ca-hello-spring-boot
container_image_name=app-hello-spring-boot:latest
登录到Azure环境
这篇文章将从此相关文章的继续部分开始介绍步骤。
使用 Azure CLI 进行登录。
$ az login
蔚蓝环境
资源组
创建资源组。
$ az group create \
--name $resource_group_name \
--location $location_name
命令
内容
az group create
用于创建Azure资源组的命令。
选项
值
内容
–name
rg-hello
指定资源组的名称。
–location
japaneast
将资源组创建在japaneast地区。 japaneast指代Azure的日本东部区域。
容器应用环境 ɡ qì ɡ ɡ
只需要一个选项,用中文进行更改:安装扩展功能。
* 仅需要第一次安装。
$ az extension add –name containerapp –upgrade
注册Microsoft.App命名空间。
$ az provider register –namespace Microsoft.App
注册Microsoft.OperationalInsights提供程序。
$ az provider register –namespace Microsoft.OperationalInsights
创建容器化应用环境。
※ 由于基于Kubernetes平台,所以需要一些时间。
$ az containerapp env create \
--resource-group $resource_group_name \
--name $containerapp_env_name \
--location $location_name
命令
说明
az containerapp env create
用于创建Container Apps环境的命令。
选项
值
说明
–resource-group
rg-hello
要部署应用程序的资源组名称。
–name
cae-hello
Container Apps环境的名称。
–location
japaneast
要创建资源组的位置。japaneast表示Azure的东日本地区。
$ az containerapp env delete \
–resource-group $resource_group_name \
–name $containerapp_env_name
容器应用
我将创建和部署容器应用程序。
※ 请将”$USER”替换为您自己的容器存储库。
$ 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 create 用于创建容器应用程序的命令。
选项 值 内容
–resource-group rg-hello 指定要部署资源所属的资源组名称。
–environment cae-hello 指定容器应用程序环境的名称。
–name ca-hello-spring-boot 指定容器应用程序的名称。
–image $USER/app-hello-spring-boot:latest 指定要运行的容器镜像的名称。这里使用了在前面步骤中推送到Docker Hub的镜像名称。
–target-port 8080 指定容器公开的端口。这里是因为Spring Boot应用程序在端口8080上公开,所以指定为8080。
–ingress ‘external’ 指定允许从外部访问容器的入口设置。这里指定为允许外部访问的’external’。
–min-replicas 0 指定最小副本数。这里将最小副本数设置为0。
$ az containerapp delete \
–resource-group $resource_group_name \
–name $containerapp_name
使用shell变量containerapp_fqdn获取容器应用的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.wonderfulgrass-e3276e77.japaneast.awsomecontainerapps.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 17M
drwxr-xr-x 1 root root 4.0K Aug 2 00:00 .
drwxr-xr-x 1 root root 4.0K Aug 2 01:22 ..
-rw-r--r-- 1 root root 17M Aug 1 23:46 app.jar
使用top命令来查看系统状态。
top - 01:24:20 up 8:54, 0 users, load average: 0.14, 0.22, 0.18
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.0 us, 0.8 sy, 0.0 ni, 96.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15990.8 total, 4770.9 free, 2144.2 used, 9075.8 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 13491.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3518000 129108 20636 S 0.0 0.8 0:05.56 java
33 root 20 0 2616 528 464 S 0.0 0.0 0:00.00 sh
40 root 20 0 9080 3692 3180 R 0.0 0.0 0:00.00 top
以下是使用top命令显示CPU信息的情况。
top - 01:24:28 up 8:54, 0 users, load average: 0.13, 0.22, 0.18
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu0 : 3.0 us, 0.7 sy, 0.0 ni, 96.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 2.0 us, 0.7 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu2 : 3.3 us, 0.7 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 1.7 us, 1.0 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15990.8 total, 4765.2 free, 2149.5 used, 9076.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 13485.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3518000 129108 20636 S 0.0 0.8 0:05.57 java
33 root 20 0 2616 528 464 S 0.0 0.0 0:00.00 sh
40 root 20 0 9080 3692 3180 R 0.0 0.0 0:00.00 top
让我尝试显示容器的信息。
# cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
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"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
表演成绩的测量
集装箱环境
容器资源分配
请求处理完成所需时间。
日志流:显示启动时间的日志
2023-08-02T00:57:26.494853482Z 2023-08-02 00:57:26.494 INFO 1 --- [ main] com.example.springboot.Application : Started Application in 8.001 seconds (JVM running for 9.591)
2023-08-02T01:10:53.504096753Z 2023-08-02 01:10:53.503 INFO 1 --- [ main] com.example.springboot.Application : Started Application in 8.197 seconds (JVM running for 9.837)
指标:中央处理器使用率
度量:内存使用量
总结
我可以在Azure Container Apps环境中启动通过Dockerfile构建的Spring Boot Web服务的自定义容器映像。
请问您的体验如何?您可以使用WSL Ubuntu,通过Azure容器应用环境轻松将Spring Boot Web应用程序作为容器运行。请务必尝试。我们还将继续介绍Azure的开发环境等内容,请敬请期待。
我们来比较一下
您可以查看有关实施与本次相同规格的文章。