将 Go Web 应用部署到 Azure 容器应用
本快速入门介绍如何将容器化 Go Web 应用部署到 Azure 容器应用。
使用 Azure 容器应用可以执行打包在任何容器中的应用程序代码,而无需管理复杂的云基础结构或复杂的容器业务流程协调程序,而无需担心运行时或编程模型。 Azure 容器应用的常见用途包括:部署 API 终结点、托管后台处理应用程序、处理事件驱动的处理以及运行微服务。
按照本教程逐步讲解如何构建 Docker 映像、将该映像部署到Azure 容器注册表,以及将 Go Web 应用部署到 Azure 容器应用。
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 已安装 Go:版本 1.18 或更高版本
- Docker Desktop
下载示例应用
若要遵循本教程,需要一个用于容器化的示例应用程序。 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 资源组。
az group create \ --name <resourceGroupName> \ --location eastus
创建 Azure 容器注册表。
az acr create \ --resource-group <resourceGroupName> \ --name <azureContainerRegistryName> \ --sku basic \ --admin-enabled true
登录到 Azure 容器实例。
az acr login --name <azureContainerRegistryName>
将 <resourceGroupName>
和 <azureContainerRegistryName>
替换为相应的值。 请注意,Azure 容器注册表名称需要全局唯一。
生成并推送 Docker 映像
创建Azure 容器注册表后,生成并推送示例 Go Web 应用的 Docker 映像。
运行以下命令生成并将映像推送到注册表:
获取登录服务器信息。
az acr show \ --name <azureContainerRegistryName> \ --resource-group <resourceGroupName> \ --query loginServer \ --output tsv
在本地生成 Docker 映像。
docker build -t <loginServer>/<imageName>:latest .
向 Azure 容器注册表推送 Docker 映像。
docker push <loginServer>/<imageName>:latest
验证映像是否已成功推送到Azure 容器注册表。
az acr repository list \ --name <azureContainerRegistryName> \ --output table
替换loginServer
和imageName
azureContainerRegistryName
替换为相应的值。 映像名称是推送到 Azure 容器注册表 的 Docker 映像,稍后用于部署到 Azure 容器应用。
现在,Azure 容器注册表中提供了一个映像,可以部署 Azure 容器应用及其环境。
创建 Azure 容器应用环境
Azure 容器应用没有容器业务流程协调程序的复杂性,但它仍然需要某种方法来建立安全边界,这是 Azure 容器应用环境所处的位置。 在同一环境中部署的容器应用共享相同的虚拟网络,并将日志写入同一 Log Analytics 工作区。 在部署 Azure 容器应用之前,需要一个要部署到的环境。
运行以下命令以创建 Azure 容器应用环境:
获取Azure 容器注册表管理员密码。
ACR_PASSWORD=$(az acr credential show \ --name <azureContainerRegistryName> \ --query 'passwords[0].value' \ --out tsv)
创建容器应用环境。
az containerapp env create \ --name <containerAppEnvName> \ --resource-group <resourceGroupName> \ --location "East US"
部署到 Azure 容器应用
此时,你已创建一个Azure 容器注册表、生成并推送 Docker 映像并将其推送到其中,并创建了 Azure 容器应用环境。 剩下的就是部署应用程序。
运行以下命令,将 Go Web 应用部署到 Azure 容器应用:
az containerapp create \
--name <containerAppName> \
--resource-group <resourceGroupName> \
--environment <containerAppEnvName> \
--image "<loginServer>/<imageName>:latest" \
--registry-server "<loginServer>" \
--registry-username "<azureContainerRegistryName>" \
--registry-password "$ACR_PASSWORD" \
--target-port 8080 \
--ingress 'external'
验证 Web 应用 URL
运行以下 Azure CLI 命令,获取 Web 应用程序的入口的 FQDN(完全限定域名)。
APP_FQDN=$(az containerapp show \
--name <containerAppName> \
--resource-group <resourceGroupName> \
--query properties.configuration.ingress.fqdn \
--output tsv)
接下来,针对 FQDN 运行 curl 命令,并确认输出反映网站的 HTML。
curl "https://$APP_FQDN"
清理资源
在使用完该示例应用后,可从 Azure 中删除该应用的所有资源。 这可以避免持续产生费用,并使 Azure 订阅不受限制。 删除资源组还会删除资源组中的所有资源,这也是为应用删除所有 Azure 资源的最快方法。
az group delete \
--name <resourceGroupName> \
--no-wait
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈