将 Go Web 应用部署到 Azure 容器应用

本快速入门介绍如何将容器化 Go Web 应用部署到 Azure 容器应用。

使用 Azure 容器应用可以执行打包在任何容器中的应用程序代码,而无需管理复杂的云基础结构或复杂的容器业务流程协调程序,而无需担心运行时或编程模型。 Azure 容器应用的常见用途包括:部署 API 终结点、托管后台处理应用程序、处理事件驱动的处理以及运行微服务。

按照本教程逐步讲解如何构建 Docker 映像、将该映像部署到Azure 容器注册表,以及将 Go Web 应用部署到 Azure 容器应用。

先决条件

  • Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。

下载示例应用

若要遵循本教程,需要一个用于容器化的示例应用程序。 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 容器注册表:

  1. 创建 Azure 资源组。

    az group create \
        --name <resourceGroupName> \
        --location eastus
    
  2. 创建 Azure 容器注册表。

    az acr create \
        --resource-group <resourceGroupName> \
        --name <azureContainerRegistryName> \
        --sku basic \
        --admin-enabled true
    
  3. 登录到 Azure 容器实例。

    az acr login --name <azureContainerRegistryName>  
    

<resourceGroupName><azureContainerRegistryName> 替换为相应的值。 请注意,Azure 容器注册表名称需要全局唯一。

生成并推送 Docker 映像

创建Azure 容器注册表后,生成并推送示例 Go Web 应用的 Docker 映像。

运行以下命令生成并将映像推送到注册表:

  1. 获取登录服务器信息。

    az acr show \
        --name <azureContainerRegistryName> \
        --resource-group <resourceGroupName> \
        --query loginServer \
        --output tsv  
    
  2. 在本地生成 Docker 映像。

    docker build -t <loginServer>/<imageName>:latest .
    
  3. 向 Azure 容器注册表推送 Docker 映像。

    docker push <loginServer>/<imageName>:latest
    
  4. 验证映像是否已成功推送到Azure 容器注册表。

    az acr repository list \
        --name <azureContainerRegistryName> \
        --output table
    

替换loginServerimageNameazureContainerRegistryName替换为相应的值。 映像名称是推送到 Azure 容器注册表 的 Docker 映像,稍后用于部署到 Azure 容器应用。

现在,Azure 容器注册表中提供了一个映像,可以部署 Azure 容器应用及其环境。

创建 Azure 容器应用环境

Azure 容器应用没有容器业务流程协调程序的复杂性,但它仍然需要某种方法来建立安全边界,这是 Azure 容器应用环境所处的位置。 在同一环境中部署的容器应用共享相同的虚拟网络,并将日志写入同一 Log Analytics 工作区。 在部署 Azure 容器应用之前,需要一个要部署到的环境。

运行以下命令以创建 Azure 容器应用环境:

  1. 获取Azure 容器注册表管理员密码。

    ACR_PASSWORD=$(az acr credential show \
        --name <azureContainerRegistryName> \
        --query 'passwords[0].value' \
        --out tsv)
    
  2. 创建容器应用环境。

    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

后续步骤