本快速入门介绍如何将容器化 Go Web 应用部署到 Azure 容器应用。
使用 Azure 容器应用 可以运行打包在任何容器中的应用程序代码,而无需管理复杂的云基础结构或复杂的容器业务流程协调程序。 它还无需担心运行时或编程模型。 Azure 容器应用的常见用途包括:部署 API 终结点、托管后台处理应用程序、处理事件驱动的处理以及运行微服务。
按照本教程的指导,逐步构建 Docker 映像、将该映像部署到 Azure 容器注册表,以及将 Go Web 应用部署到 Azure 容器应用。
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 已安装 Go:版本 1.18 或更高版本
- Docker Desktop
安装
若要从 CLI 登录到 Azure,请运行 az login 命令,然后按照提示完成身份验证过程。
az login
为了确保运行最新版本的 CLI,请运行 az upgrade 命令。
az upgrade
接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。
如果在 Azure CLI 中运行 az containerapp 命令时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。
az extension add --name containerapp --upgrade
注意
从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true 安装容器应用扩展。
az extension add --name containerapp --upgrade --allow-preview true
安装当前扩展或模块后,请注册Microsoft.App和Microsoft.ContainerRegistryMicrosoft.OperationalInsights命名空间。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.ContainerRegistry
az provider register --namespace Microsoft.OperationalInsights
注意
Azure 容器应用资源从 Microsoft.Web 命名空间迁移到了 Microsoft.App 命名空间。 有关详细信息,请参阅 2022 年 3 月从 Microsoft.Web 迁移到 Microsoft.App 的命名空间。
下载示例应用
若要学习本教程,你需要一个用于容器化的示例应用程序。 msdocs-go-webapp-quickstart GitHub 存储库提供了一个示例 Go Web 应用。 将示例应用程序下载或克隆到本地工作站。
git clone https://github.com/Azure-Samples/msdocs-go-webapp-quickstart.git
cd msdocs-go-webapp-quickstart
创建 Azure 容器注册表
Azure 容器注册表用于生成、存储和管理容器映像。 使用它来存储 Docker 映像,其中包含前面提到的示例存储库中提供的示例 Go Web 应用。
运行以下命令,创建一个 Azure 容器注册表:
为要创建的资源设置环境变量。 将括号中的占位符文本替换为相应的值。 Azure 容器注册表名称需要全局唯一。
RESOURCE_GROUP_NAME="<resourceGroupName>" # Name of the Azure resource group to create LOCATION="<location>" # Azure region (For example, "eastus", "westus2") ACR_NAME="<azureContainerRegistryName>" # Globally unique name for Azure Container Registry用于设置环境变量的示例命令适用于 Bash shell。 如果使用的是其他 shell,请相应地调整命令。
使用 az group create 命令创建 Azure 资源组。
az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION使用 az acr create 命令创建 Azure 容器注册表。
az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACR_NAME \ --sku basic使用 az acr login 命令登录到 Azure 容器实例。
az acr login --name $ACR_NAME注意
如果在运行
az acr login命令时收到类似于以下错误的错误,请确保 Docker 守护程序在系统上运行:You may want to use 'az acr login -n $ACR_NAME --expose-token' to get an access token, which doesn't require Docker to be installed. An error occurred: DOCKER_COMMAND_ERROR
生成并推送 Docker 映像
创建 Azure 容器注册表后,生成并推送示例 Go Web 应用的 Docker 映像。
运行以下命令,生成映像并将其推送到注册表。
为要创建的 Docker 映像设置环境变量。 将括号中的占位符文本替换为相应的值。
IMAGE_NAME="go-webapp" # Name for the Docker image用于设置环境变量的示例命令适用于 Bash shell。 如果使用的是其他 shell,请相应地调整命令。
使用 az acr show 命令获取登录服务器信息,并将其存储在环境变量中。
LOGIN_SERVER=$(az acr show \ --name $ACR_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query loginServer \ --output tsv) echo "Login server: $LOGIN_SERVER"在本地生成 Docker 映像。
docker build -t $LOGIN_SERVER/$IMAGE_NAME:latest .向 Azure 容器注册表推送 Docker 映像。
docker push $LOGIN_SERVER/$IMAGE_NAME:latest使用 az acr repository list 命令验证映像是否已成功推送到 Azure 容器注册表。
az acr repository list \ --name $ACR_NAME \ --output table
在 Azure 容器注册表中提供了映像后,即可部署 Azure 容器应用及其环境。
创建 Azure 容器应用环境
Azure 容器应用没有容器业务流程协调程序的复杂性,但仍需要某种方法来建立安全边界。 Azure 容器应用环境提供此功能。 同一环境中的容器应用共享同一个虚拟网络中,并将日志写入同一个 Log Analytics 工作区。 在部署 Azure 容器应用之前,你需要一个要部署的环境。
为要创建的资源设置环境变量。 将括号中的占位符文本替换为相应的值。
CONTAINER_APP_ENV="mygoappenv" # Name for the Container Apps environment CONTAINER_APP_NAME="mygoapp" # Name for your container app用于设置环境变量的示例命令适用于 Bash shell。 如果使用的是其他 shell,请相应地调整命令。
运行 az containerapp env create 命令,以创建 Azure 容器应用环境。
az containerapp env create \ --name $CONTAINER_APP_ENV \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION
部署到 Azure 容器应用
此时,你已完成以下步骤:
- 创建了 Azure 容器注册表。
- 生成 Docker 映像并将其推送到注册表。
- 设置 Azure 容器应用环境。
最后一步是部署应用程序。
运行 az containerapp create 命令,将 Go Web 应用部署到 Azure 容器应用。
az containerapp create \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--environment $CONTAINER_APP_ENV \
--image "$LOGIN_SERVER/$IMAGE_NAME:latest" \
--registry-server "$LOGIN_SERVER" \
--registry-identity system \
--target-port 8080 \
--ingress external
--registry-identity system 参数在容器应用上配置系统分配的托管标识。 容器应用使用此标识(而不是不太安全的用户名和密码)通过容器注册表进行身份验证。 该命令还会自动为身份创建角色分配,并授权其从注册表拉取镜像。 若要使用托管标识进行身份验证和授权,注册表必须是 Azure 容器注册表。
验证 Web 应用 URL
运行 containerapp show 命令,以获取 Web 应用程序的入口的 FQDN(完全限定域名)。
APP_FQDN=$(az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.configuration.ingress.fqdn \ --output tsv) echo "App URL: https://$APP_FQDN"针对 FQDN 运行 curl 命令,并确认输出反映网站的 HTML。 还可以在 Web 浏览器中打开 URL 以与 Web 应用交互。
curl "https://$APP_FQDN"命令返回 Web 应用的主页的 HTML,如下所示:
<!DOCTYPE html> <html> <head> <title>Hello Azure - Go Quickstart</title> <link rel="stylesheet" href="/assets/main.css"> <link rel="icon" type="image/x-icon" href="/assets/favicon.ico"> </head> <header> <h1>Welcome to Azure</h1> </header> <section> <img src="/assets/images/azure-icon.svg"> <form method="post"> <label for="form-label">Could you please tell me your name?</label><br> <input type="text" id="name" name="name" style="max-width: 256px;"><br> <button type="submit">Say Hello</button> </form> </section> </html>
清理资源
在使用完该示例应用后,可从 Azure 中删除该应用的所有资源。 这样做可以避免持续收费,并使 Azure 订阅保持整洁。 删除资源组还会删除资源组中的所有资源,这也是为应用删除所有 Azure 资源的最快方法。
运行 az group delete 命令,删除资源组及其所有资源.
az group delete \
--name $RESOURCE_GROUP_NAME \
--no-wait