使用 ACI (Azure 容器实例) 在 Docker Hub 上的自定义容器镜像上启动 Spring Boot WEB 服务

使用ACI (Azure Container Instances)在Docker Hub自定义容器映像中启动Spring Boot的WEB服务。

Objective

在Azure容器实例环境中启动Spring Boot WEB服务,以深入理解。

实现

将Spring Boot WEB应用程序的自定义容器镜像部署到Microsoft Azure容器实例(ACI)。

在构建实际系统时,请注意使用了在Docker Hub上推送的具有公开访问权限的自定义容器镜像。

以下是使用Microsoft Azure容器注册表(ACR)的配置示例的相关文章。

请注意,这是自动生成的中文翻译,可能不完全准确。

 

技術背景 – Technical background

Microsoft Azure容器实例(ACI)是什么?

这里可以展开查看。Microsoft Azure 容器应用(ACA)

Microsoft Azure 容器实例(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.47Ubuntu
$ lsb_release -a
没有可用的 LSB 模块。
发行商 ID:Ubuntu
描述:Ubuntu 22.04.1 LTS
发行版: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
版本 4.16.3 (96739)

$ docker –version
Docker 版本 20.10.22, 构建 3a2c30b

$ docker-compose –version
Docker Compose 版本 v2.15.1

※ 本文将主要介绍在Ubuntu终端中进行操作的基本方法。

显示”Hello World”的步骤

创建Spring Boot Web服务

您可以参考这里。

 

移动到项目文件夹中

假设 ~/tmp/hello-spring-boot 是项目文件夹。

$ cd ~/tmp/hello-spring-boot

构建Java应用程序(参考)

※ 将会创建目标/app.jar。
※ 在创建下方的容器图像操作中,同时创建目标/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-hello-spring-boot   latest   e37cc77f2b36   43 years ago   262MB

在本地启动容器镜像并进行确认

$ docker run --name app-local -p 8080:8080 app-hello-spring-boot

从另一个终端使用curl命令进行确认

※ 尝试检查是否可以在8080端口上进行侦听。

$ curl -v http://localhost:8080/api/data
*   Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api/data HTTP/1.1
> Host: localhost: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 07:18:25 GMT
<
* Connection #0 to host localhost left intact
{"message":"Hello World!"}

将容器映像注册到Docker Hub

请将 “$USER” 这部分替换为您自己的容器注册表。

标记

$ docker tag app-hello-spring-boot $USER/app-hello-spring-boot:latest

$ docker push $USER/app-hello-spring-boot:latest

我已经将自定义容器镜像,以”$USER/app-hello-spring-boot:latest”的形式发布到Docker Hub。

获取Azure账号

使用Azure的免费账户,在云端构建。

用 Azure CLI 登录

您可以参考这个。

 

登录

$ az login

請提供一個自然的中文翻譯選項

资源组

创建资源组

$ az group create \
    --name rg-hello \
    --location japaneast

显示资源组列表。

$ az group list

如果要删除资源组, you have the following option.

$ az group delete -n <group>

ACI环境(Native Chinese Version):

创建和部署容器组
※ 可能是在 Kubernetes 基础设施上运行,所以可能需要一些时间。
※ 将 $USER 替换为您自己的容器注册表。

$ az container create \
    --resource-group rg-hello \
    --name ci-hello \
    --image $USER/app-hello-spring-boot:latest \
    --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.46.187.231

请在网页浏览器中查看
※ 请根据环境更改URL。

http://20.46.187.231:8080/api/data

在Web浏览器中显示了`{“message”:”Hello World!”}`并成功获取了JSON数据。

请用curl命令从其他终端进行确认。

$ curl -v http://20.46.187.231:8080/api/data
*   Trying 20.46.187.231:8080...
* Connected to 20.46.187.231 (20.46.187.231) port 8080 (#0)
> GET /api/data HTTP/1.1
> Host: 20.46.187.231: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.46.187.231 left intact
{"message":"Hello World!"}

在终端上显示了 {“message”:”你好,世界!”} ,并成功获取到了 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

容器的资讯 de

$ 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) 環境で起動させることが出来ました。

个人观点

    Microsoft Azure においては、Azure Container Apps という、コンテナイメージがより容易にデプロイ・運用出来る PaaS が開始されたので、Azure Container Instances の利用は用途によると思いました。

请提供以下内容的中文表达方式:

1. 请参考
2. 参照
3. 参考之处

[Microsoft 学习] Azure 容器实例 (ACI) 命令参考

 

广告
将在 10 秒后关闭
bannerAds