在本快速入門中,您將瞭解如何將容器化的 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.App、 Microsoft.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:
為你要建立的資源設定環境變數。 將括號內的佔位文字替換成適當的值。 您的 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,請相應調整指令。
使用 az group create 命令來建立 Azure 資源群組。
az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION使用 az acr create 命令建立 Azure Container Registry。
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 網頁應用程式的 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 .將 Docker 映像推送至 Azure Container Registry。
docker push $LOGIN_SERVER/$IMAGE_NAME:latest使用 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 容器應用程式。
為你要建立的資源設定環境變數。 將括號內的佔位文字替換成適當的值。
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 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
執行 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"對 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