使用Azure App Service将Spring Boot Web服务部署到Docker Hub自定义容器镜像

使用Azure App Service将Spring Boot Web服务部署到(Docker Hub的自定义容器镜像)

spring-boot_on_azure-app-service.png

为了什么

我将在Windows 11上的Linux环境中进行云开发。

您可以在此处查看文章的列表。

 

实现

将Spring Boot Web应用程序的自定义容器映像部署到Microsoft Azure App Service。

在这篇文章中,我们使用在Docker Hub上发布的可公开访问的自定义容器镜像。在实际的系统开发中,获取容器镜像的注册表可能会有所不同,请适时确认。
此外,Azure还提供了一个完全托管的注册表服务,即Azure Container Registry。我们也可以使用Azure CLI进行操作,希望能在另一个机会中介绍给大家。

技术主题 (jì shù zhǔ tí)

Azure 应用服务是什么?

你可以展开查看这个。Microsoft Azure App Service

Azure上运行的容器应用平台。
Microsoft Azure App Service是Microsoft Azure平台即服务(PaaS)服务之一,专注于托管Web应用程序、移动应用程序和API应用程序的服务。

特点和优点
描述

简单的部署
通过Azure门户、Azure CLI、Azure DevOps等工具,可以轻松部署Web应用程序。此外,它支持多种编程语言和框架,可实现灵活的开发。

可伸缩性
Azure App Service支持自动缩放和手动缩放,可根据应用程序的负载灵活进行扩展。

高可用性
Azure App Service具有全球负载均衡和故障转移功能,可实现高可用性。

集成
Azure App Service可以与Azure的其他服务无缝集成。例如,与Azure SQL Database和Azure Storage等存储服务配合使用,便于管理应用程序的数据。

安全性
Azure App Service提供网络安全组(NSG)和Web应用程序防火墙(WAF)等安全功能,可提高应用程序的安全性。

通过这些特点和优点,Azure App Service被开发者和企业用作支持快速且灵活的Web应用程序开发和部署的平台。

开发环境

    Windows 11 Home 22H2 を使用しています。
由于操作 WSL 的 Ubuntu,因此 macOS 用户也可以参考。
WSL(Microsoft Store 应用版)※ 您可以从相关文章中确认安装方式
> 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 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 版本:11.0.18,供应商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64

Docker ※ 您可以从相关文章中确认安装方式
$ docker –version
Docker 版本 23.0.1,构建 a5ee5b1

在这篇文章中,我们主要使用 Ubuntu 终端进行操作。为了那些第一次学习使用 Vim 进行复制粘贴的人,我们在下面的文章中介绍了步骤。请务必尝试一下。

 

显示”你好,世界”的步骤

创建Spring Boot Web服务

以下是一篇解释从此相关文章继续的步骤的文章。

 

切换到Spring Boot应用的项目文件夹中

前往项目文件夹。
※ 将~/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上创建一个账户。

 

Docker Hub 是一个基于云的注册表,用于共享、存储和管理容器。Docker Hub 中存储了由社区和官方创建的镜像。此外,用户还可以上传和共享自定义容器镜像。

我要登录Docker Hub。

$ docker login
Login Succeeded

给容器镜像打标签。
※ 请将 $USER 部分替换为您自己的容器仓库。

$ docker tag app-hello-spring-boot $USER/app-hello-spring-boot:latest
打开说明
Docker tag命令可以为本地保存的容器镜像添加指定的标签,从而对容器镜像进行重命名。
在这个例子中,我们为名为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 push命令用于将容器镜像推送到Docker Hub仓库。user/app-hello-spring-boot指定了要推送的镜像的名称和标签,latest指定了镜像的版本。
这样,就会在Docker Hub上创建一个名为user的用户名仓库,并将名为app-hello-spring-boot的容器镜像上传到其中。

到目前为止,您可以将自定义容器映像发布到 Docker Hub,名称为 $USER/app-hello-spring-boot:latest。

登录到Azure环境

以下是解释从这篇相关文章的续篇的步骤的文章。

 

使用 Azure CLI 登录。

$ az login

蔚藍的环境

资源组

创建资源组。

$ az group create \
    --name rg-hello \
    --location japaneast
打开说明。此命令使用Azure CLI创建Azure资源组。

命令
内容

az group create
此命令用于创建Azure资源组。

选项

内容

–name
rg-hello
指定资源组的名称。

–location
japaneast
指定要创建资源组的位置为japaneast。japaneast代表Azure的东日本区域。

应用服务计划

创建 App Service 计划。

$ az appservice plan create \
    --resource-group rg-hello \
    --name asp-hello \
    --sku Free \
    --is-linux
打开说明。这个命令是用来创建App Service计划的。

命令
说明

az appservice plan create
这是用于创建App Service计划的命令。

选项

说明

–resource-group
rg-hello
指定要创建App Service计划的资源组名称。

–name
asp-hello
指定App Service计划的名称。

–sku
Free
指定App Service计划的服务级别。在这种情况下,选择了免费计划。

–is-linux

指定App Service计划是否为基于Linux的主机。

让我们列出 App Service 计划的列表。

$ az appservice plan list
如果要删除 App Service 计划,请使用以下命令。
$ az appservice plan delete -n <plan> -g <group>

应用服务的网页应用

进行Web应用的创建和部署。
※请将$USER替换为您自己的容器仓库。

$ az webapp create \
    --resource-group rg-hello \
    --plan asp-hello \
    --name app-hello-spring-boot \
    --deployment-container-image-name $USER/app-hello-spring-boot:latest
打开说明。这个命令是用来创建App Service Web应用程序的。

命令
内容

az webapp create
用于创建App Service Web应用程序的命令。

选项

内容

–resource-group
rg-hello
指定要创建App Service Web应用程序的资源组名称。

–plan
asp-hello
指定要创建App Service Web应用程序的App Service计划名称。

–name
app-hello-spring-boot
指定App Service Web应用程序的名称。

–deployment-container-image-name
$USER/app-hello-spring-boot:latest
指定要部署为Web应用程序的容器镜像。

配置Web应用程序的设置。
* App Service Web应用程序默认监听端口为80。

$ az webapp config appsettings set \
    --resource-group rg-hello \
    --name app-hello-spring-boot \
    --settings WEBSITES_PORT=8080
打开说明。这个命令用于更改App Service Web应用的配置设置。

命令
内容
az webapp config appsettings set
这是用于更改App Service Web应用的配置设置的命令。

选项

内容
–resource-group
rg-hello
指定包含App Service Web应用的资源组名称。

–name
app-hello-spring-boot
指定App Service Web应用的名称。

–settings
WEBSITES_PORT=8080
将App Service Web应用设置为在端口8080上运行。

要删除 App Service Web 应用程序,请使用以下命令。
$ az webapp delete -n <name> -g <group>

确认Web应用程序的运行

执行以下命令时,将启动网络浏览器。

$ az webapp browse \
    --resource-group rg-hello \
    --name app-hello-spring-boot
尽管需要花费一些时间才能启动,但页面会显示出来。然而,显示出的页面 “/” 没有设置内容。
image.png
https://app-hello-spring-boot.awesomewebsites.net/api/data

在网页浏览器上成功显示{“message”:”Hello World!”},并成功获取了JSON数据。

※ 我会从另一个终端使用 curl 命令进行确认。

$ curl -v https://app-hello-spring-boot.awesomewebsites.net/api/data
以下为原文的汉语表达:显示详细信息。
$ curl -v https://app-hello-spring-boot.awesomewebsites.net/api/data
* 正在尝试连接 xx.xx.xx.xx:443…
* 已连接到 app-hello-spring-boot.awesomewebsites.net (xx.xx.xx.xx) 的 443 端口 (#0)
* ALPN,提供 h2
* ALPN,提供 http/1.1
* CA 文件: /etc/ssl/certs/ca-certificates.crt
* CA 路径: /etc/ssl/certs
* TLSv1.0 (OUT),TLS 头部,证书状态 (22):
* TLSv1.3 (OUT),TLS 握手,客户端 hello (1):
* TLSv1.2 (IN),TLS 头部,证书状态 (22):
* TLSv1.3 (IN),TLS 握手,服务器 hello (2):
* TLSv1.2 (IN),TLS 握手,证书 (11):
* TLSv1.2 (IN),TLS 握手,服务器密钥交换 (12):
* TLSv1.2 (IN),TLS 握手,服务器完成 (14):
* TLSv1.2 (OUT),TLS 头部,证书状态 (22):
* TLSv1.2 (OUT),TLS 握手,客户端密钥交换 (16):
* TLSv1.2 (OUT),TLS 头部,完成 (20):
* TLSv1.2 (OUT),TLS 改变密码,更改密码规范 (1):
* TLSv1.2 (OUT),TLS 头部,证书状态 (22):
* TLSv1.2 (OUT),TLS 握手,完成 (20):
* TLSv1.2 (IN),TLS 头部,完成 (20):
* TLSv1.2 (IN),TLS 头部,证书状态 (22):
* TLSv1.2 (IN),TLS 握手,完成 (20):
* SSL 连接使用 TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN,服务器同意使用 h2
* 服务器证书:
* 主题: C=US; ST=WA; L=Redmond; O=Microsoft Corporation; CN=*.awesomewebsites.net
* 开始日期: Dec 27 21:12:39 2022 GMT
* 到期日期: Dec 22 21:12:39 2023 GMT
* 主题备用名称: 主机 “app-hello-spring-boot.awesomewebsites.net” 与证书的 “*.awesomewebsites.net” 匹配
* 颁发者: C=US; O=Microsoft Corporation; CN=Microsoft Azure TLS Issuing CA 05
* SSL 证书验证通过。
* 使用 HTTP2,服务器支持多路复用
* 连接状态已更改 (HTTP/2 已确认)
* 在升级后将流缓冲区中的 HTTP/2 数据复制到连接缓冲区: len=0
* TLSv1.2 (OUT),TLS 头部,补充数据 (23):
* TLSv1.2 (OUT),TLS 头部,补充数据 (23):
* TLSv1.2 (OUT),TLS 头部,补充数据 (23):
* 使用流 ID: 1 (易处理句柄 0x556a1919fe90)
* TLSv1.2 (OUT),TLS 头部,补充数据 (23):
> GET /api/data HTTP/2
> Host: app-hello-spring-boot.awesomewebsites.net
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.2 (IN),TLS 头部,补充数据 (23):
* TLSv1.2 (OUT),TLS 头部,补充数据 (23):
* TLSv1.2 (IN),TLS 头部,补充数据 (23):
* TLSv1.2 (IN),TLS 头部,补充数据 (23):
* TLSv1.2 (IN),TLS 头部,补充数据 (23):
< HTTP/2 200
< content-type: application/json
< date: Wed, 08 Mar 2023 02:56:49 GMT
< set-cookie: ARRAffinity=f7e8112d174b035dedc0e95aa90dd578d821ba1ae7596ea4277e4837d982995e;Path=/;HttpOnly;Secure;Domain=app-hello-spring-boot.awesomewebsites.net
< set-cookie: ARRAffinitySameSite=f7e8112d174b035dedc0e95aa90dd578d821ba1ae7596ea4277e4837d982995e;Path=/;HttpOnly;SameSite=None;Secure;Domain=app-hello-spring-boot.awesomewebsites.net
<
* TLSv1.2 (IN),TLS 头部,补充数据 (23):
* 已将连接 #0 到主机 app-hello-spring-boot.awesomewebsites.net 保持连接
{“message”:”Hello World!”}

在终端上显示出 {“message”: “你好,世界!”},并且成功获取到了 JSON 数据。

Azure App Service 支持 SSL/TLS 和 HTTP/2 协议。

连接到容器

如果从自定义容器映像创建 Azure App Service Web 应用程序,则默认设置下无法连接到容器。在以下文章中介绍了连接到容器的方法。

 

总结

在Azure App Service环境中,可以启动由Dockerfile构建的Spring Boot Web服务的自定义容器映像。

使用Maven、Docker和Azure CLI,可以通过终端完成从开发Spring Boot应用程序到创建容器映像再到部署到Azure环境的所有过程。通过这样的方式,可以提升在云端系统开发中所需的技能和理解。即使是初学者也可以轻松地按照步骤进行操作,所以请务必尝试一下。

你觉得怎么样?作为验证目的,在WSL Ubuntu上,你可以方便地将Spring Boot Web应用作为容器在Azure App Service环境中启动。请务必试一试。我们将继续介绍Azure的开发环境等,敬请期待。

推荐内容

 

广告
将在 10 秒后关闭
bannerAds