共用方式為


將 Go Web 應用程式部署至 Azure Container Apps

在本快速入門中,您將瞭解如何將容器化的 Go Web 應用程式部署至 Azure Container Apps。

Azure 容器應用程式 讓你能在任何容器中執行應用程式程式碼,無需管理複雜的雲端基礎設施或複雜的容器編排器。 它也不需要擔心運行時間或程序設計模型。 Azure Container Apps 的常見用法包括:部署 API 端點、裝載背景處理應用程式、處理事件驅動處理,以及執行微服務。

遵循本教學課程,逐步解說建置 Docker 映像、將該映射部署至 Azure Container Registry,以及將 Go Web 應用程式部署至 Azure Container Apps。

必要條件

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

設定

若要從 CLI 登入 Azure,請執行 az login 命令,並遵循提示來完成驗證程式。

az login

若要確保您執行最新版的 CLI,請執行 az upgrade 命令。

az upgrade

接下來,安裝或更新 CLI 的 Azure 容器應用程式延伸模組。

如果你在 Azure CLI 執行 az containerapp 指令時收到缺少參數的錯誤,請確保你安裝的是最新版本的 Azure Container Apps 擴充功能。

az extension add --name containerapp --upgrade

注意

從 2024 年 5 月開始,Azure CLI 延伸模組預設不會再啟用預覽功能。 若要存取容器應用程式預覽功能,請使用 --allow-preview true 安裝容器應用程式延伸模組。

az extension add --name containerapp --upgrade --allow-preview true

現在安裝了目前的擴充功能或模組,註冊 Microsoft.AppMicrosoft.ContainerRegistry、 和 Microsoft.OperationalInsights 命名空間。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.ContainerRegistry
az provider register --namespace Microsoft.OperationalInsights

注意

Microsoft.Web 命名空間移轉至 Microsoft.App 命名空間的 Azure Container Apps 資源。 欲了解更多資訊,請參閱 2022 年 3 月從 Microsoft.Web 遷移至 Microsoft.App 的命名空間

下載範例應用程式

若要遵循本教學課程,您需要範例應用程式才能容器化。 msdocs-go-webapp-quickstart GitHub 倉庫提供了範例 Go 網頁應用程式。 將應用程式範例下載或複製到本機工作站。

git clone https://github.com/Azure-Samples/msdocs-go-webapp-quickstart.git

cd msdocs-go-webapp-quickstart

建立 Azure Container Registry

Azure Container Registry 可讓您建置、儲存及管理容器映射。 使用它來儲存 Docker 映射,其中包含先前所述的範例存放庫中提供的範例 Go Web 應用程式。

執行下列命令來建立 Azure Container Registry:

  1. 為你要建立的資源設定環境變數。 將括號內的佔位文字替換成適當的值。 您的 Azure Container Registry 名稱必須是全域唯一的。

    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,請相應調整指令。

  2. 使用 az group create 命令來建立 Azure 資源群組。

    az group create \
        --name $RESOURCE_GROUP_NAME \
        --location $LOCATION
    
  3. 使用 az acr create 命令建立 Azure Container Registry。

    az acr create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $ACR_NAME \
        --sku basic
    
  4. 使用 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 網頁應用程式的 Docker 映像檔。

執行以下指令來建立並將映像檔推送到登錄檔。

  1. 為你要建立的 Docker 映像設定環境變數。 將括號內的佔位文字替換成適當的值。

    IMAGE_NAME="go-webapp"  # Name for the Docker image
    

    設定環境變數的範例指令是針對 Bash shell。 如果你用的是不同的 shell,請相應調整指令。

  2. 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"
    
  3. 在本機建置 Docker 映像。

    docker build -t $LOGIN_SERVER/$IMAGE_NAME:latest .
    
  4. 將 Docker 映像推送至 Azure Container Registry。

    docker push $LOGIN_SERVER/$IMAGE_NAME:latest
    
  5. 使用 az acr repository list 命令,確認映射已成功推送至 Azure Container Registry。

    az acr repository list \
        --name $ACR_NAME \
        --output table
    

現在你在 Azure 容器登錄檔中已有映像檔,就可以部署 Azure 容器應用程式及其環境了。

建立容器應用程式環境

Azure 容器應用程式沒有容器編排器的複雜度,但仍需要某種方式來建立安全的邊界。 Azure Container Apps 環境提供此功能。 部署在相同環境中的容器應用程式會共用相同的虛擬網路,並將記錄寫入相同的Log Analytics工作區。 您必須先部署環境,才能部署 Azure 容器應用程式。

  1. 為你要建立的資源設定環境變數。 將括號內的佔位文字替換成適當的值。

    CONTAINER_APP_ENV="mygoappenv"  # Name for the Container Apps environment
    CONTAINER_APP_NAME="mygoapp"    # Name for your container app
    

    設定環境變數的範例指令是針對 Bash shell。 如果你用的是不同的 shell,請相應調整指令。

  2. 執行 az containerapp env create 命令來建立 Azure Container Apps 環境。

    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 Container Apps。

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 會設定容器應用程式上的系統指派 受控識別 。 容器應用程式使用這個身份,而非安全性較低的使用者名稱和密碼來與容器登錄檔進行認證。 此命令也會自動為身分識別建立 AcrPull 角色 指派,授權它從註冊表提取映像檔。 若要使用受控識別進行驗證和授權,登錄必須是 Azure Container Registry。

確認 Web 應用程式 URL

  1. 執行 az 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"
    
  2. 對 FQDN 執行 curl 指令,確認輸出是否反映網站的 HTML。 你也可以在網頁瀏覽器中開啟該網址,與網頁應用程式互動。

    curl "https://$APP_FQDN"
    

    「指令回傳網頁應用程式首頁的 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

下一步