使用Azure App Service将Spring Boot Web服务部署到Docker Hub自定义容器镜像
使用Azure App Service将Spring Boot Web服务部署到(Docker Hub的自定义容器镜像)
为了什么
我将在Windows 11上的Linux环境中进行云开发。
您可以在此处查看文章的列表。
实现
将Spring Boot Web应用程序的自定义容器映像部署到Microsoft Azure App Service。
此外,Azure还提供了一个完全托管的注册表服务,即Azure Container Registry。我们也可以使用Azure CLI进行操作,希望能在另一个机会中介绍给大家。
技术主题 (jì shù zhǔ tí)
Azure 应用服务是什么?
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 –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
显示”你好,世界”的步骤
创建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 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 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
命令
内容
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
命令
说明
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
$ 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
命令
内容
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
命令
内容
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上运行。
$ az webapp delete -n <name> -g <group>
确认Web应用程序的运行
执行以下命令时,将启动网络浏览器。
$ az webapp browse \
--resource-group rg-hello \
--name app-hello-spring-boot
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环境中,可以启动由Dockerfile构建的Spring Boot Web服务的自定义容器映像。
你觉得怎么样?作为验证目的,在WSL Ubuntu上,你可以方便地将Spring Boot Web应用作为容器在Azure App Service环境中启动。请务必试一试。我们将继续介绍Azure的开发环境等,敬请期待。
推荐内容