本文說明如何使用慣用的程式設計語言,從您電腦上的原始程式碼,建置應用程式並將其部署至 Azure Container Apps。
在本教學課程中,您會:
- 建立簡單的 Web 應用程式。
- 為您的應用程式建立相關聯的 Dockerfile。
- 從編譯的程式代碼建立映像,並將其推送至容器登錄。
- 使用受控識別安全地存取您的容器登錄。
- 將您的容器部署至 Azure Container Apps。
- 在瀏覽器中檢視您的應用程式,以確認部署。
必要條件
若要完成此專案,您需要下列項目:
| 需求 | 指示 |
|---|---|
| Azure 帳戶 | 如果您沒有帳戶,可免費建立帳戶。 您需要 Azure 訂用帳戶的「參與者」或「擁有者」權限才能繼續。 如需詳細資料,請參閱使用 Azure 入口網站指派 Azure 角色。 |
| Azure CLI |
安裝 Azure CLI 或升級至最新版本。 Azure 開發人員 CLI (azd 命令) 可透過 Azure CLI 取得。 |
視您選擇的語言而定,您可能也需要安裝適當的運行時間、SDK 和其他相依性。
安裝 .NET SDK。
建立本機應用程式
下列步驟顯示建置範例應用程式以部署在 Azure Container Apps 上所需的程式代碼和相依性。
注意
如果您想要使用所列語言以外的其他語言,請在您慣用的 AI 模型中輸入下列提示。
提交提示之前,請以您選擇的語言取代 <LANGUAGE> 。
Generate the simplest possible "hello world" web server in idiomatic <LANGUAGE>.
Make sure to include any dependencies required for the application to run locally and in production.
建立並執行您的原始程式碼。
建立新的 C# 專案。
dotnet new webapp --name MyAcaDemo --language C#變更為 MyAcaDemo 資料夾。
cd MyAcaDemo在程式代碼編輯器中開啟
Program.cs,並以下列程式代碼取代內容。public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); webBuilder.UseUrls("http://*:8080"); }); }使用此程式代碼實
Program作 類別會建立 Web 應用程式的基礎。 接下來,建立負責傳回網頁作為響應的類別。在相同的資料夾中,建立名為
Startup.cs的新檔案,然後輸入下列程序代碼。public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Hello World!"); }); }); } }現在,對 Web 應用程式提出要求時,會傳回 “Hello World!” 文字。 若要確認您的程式代碼已在本機計算機上正確執行,請在發行組態中建置您的專案。
dotnet build -c Release接下來,執行您的應用程式以確認您的程式代碼已正確實作。
dotnet run --configuration Release確認應用程式如預期般運作後,您可以停止本地伺服器並繼續建立 Dockerfile,以便將應用程式部署至容器應用程式。
在 MyAcaDemo 資料夾中,建立名為
Dockerfile的檔案,並新增下列內容。FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY . . RUN dotnet publish -c Release -o /app/publish FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final WORKDIR /app COPY --from=build /app/publish . EXPOSE 8080 ENTRYPOINT ["dotnet", "MyAcaDemo.dll"]既然您已準備好程序代碼和 Dockerfile,您可以將應用程式部署至 Azure Container Apps。
建立 Azure 資源
使用下列命令從 CLI 登入 Azure。 若要完成驗證程式,請務必遵循所有提示。
az login安裝或更新 Azure CLI 的 Azure Container Apps 擴充功能。
az extension add --name containerapp --upgrade注意
如果您在執行
az containerapp命令時收到遺漏參數的錯誤,請確定您已安裝最新版的 Azure Container Apps 擴充功能。現在您的 Azure CLI 設定已完成,您可以定義一組環境變數。
執行下列命令之前,請先檢閱所提供的值。
位置已設定為 美國中部,但您可以視需要變更為最接近的位置。
LOCATION="CentralUS" RESOURCE_GROUP="my-demo-group" IDENTITY_NAME="my-demo-identity" ENVIRONMENT="my-demo-environment" REGISTRY_NAME="mydemoregistry$(openssl rand -hex 4)" CONTAINER_APP_NAME="my-demo-app"命令
mydemoregistry$(openssl rand -hex 4)會產生隨機字串,以作為容器登錄名稱使用。 登錄名稱必須是全域唯一的,因此此字串有助於確保您的命令能夠順利執行。建立資源群組,以組織與容器應用程式部署相關的服務。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --output none建立 使用者指派的受控識別 ,並使用下列命令取得其標識碼。
首先,建立受控識別。
az identity create \ --name $IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --output none現在,將識別標識碼設定為變數以供稍後使用。
IDENTITY_ID=$(az identity show \ --name $IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)使用下列命令建立容器應用程式環境來裝載您的應用程式。
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --mi-user-assigned $IDENTITY_ID \ --output none在您的資源群組中建立 Azure Container Registry (ACR) 實例。 登錄會儲存您的容器映像。
az acr create \ --resource-group $RESOURCE_GROUP \ --name $REGISTRY_NAME \ --sku Basic \ --output none使用下列命令,將使用者指派的受控識別指派給容器登錄實例。
az acr identity assign \ --identities $IDENTITY_ID \ --name $REGISTRY_NAME \ --resource-group $RESOURCE_GROUP \ --output none
建置映像並將其推送至登錄
使用下列命令,建置容器映射並將其推送至容器登錄實例。
az acr build \
-t $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
-r $REGISTRY_NAME .
此命令會將標籤 helloworld 套用至您的容器映像。
建立容器應用程式
使用下列命令建立容器應用程式。
az containerapp create \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--environment $ENVIRONMENT \
--image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
--target-port 8080 \
--ingress external \
--user-assigned $IDENTITY_ID \
--registry-identity $IDENTITY_ID \
--registry-server $REGISTRY_NAME.azurecr.io \
--query properties.configuration.ingress.fqdn
此命令會將 acrPull 角色新增至使用者指派的受控識別,以便從容器登錄提取映像。
下表描述此命令所使用的參數。
| 參數 | 數值 | Description |
|---|---|---|
name |
$CONTAINER_APP_NAME |
容器應用程式的名稱。 |
resource-group |
$RESOURCE_GROUP |
部署容器應用程式的資源群組。 |
environment |
$ENVIRONMENT |
容器應用程式執行所在的環境。 |
image |
$REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" |
要部署的容器映像,包括登錄名稱和標記。 |
target-port |
8080 |
符合應用程式正在接聽要求的埠。 |
ingress |
external |
讓您的容器應用程式可從公用因特網存取。 |
user-assigned |
$IDENTITY_ID |
容器應用程式的使用者指派受控識別。 |
registry-identity |
registry-identity |
用來存取容器登錄的身分識別。 |
registry-server |
$REGISTRY_NAME.azurecr.io |
容器登錄的伺服器位址。 |
query |
properties.configuration.ingress.fqdn |
將輸出篩選為只有應用程式的完整功能變數名稱(FQDN)。 |
此命令完成後,它會傳回新 Web 應用程式的 URL。
驗證部署
將應用程式的 URL 複製到網頁瀏覽器。 容器應用程式啟動之後,它會傳 回 Hello World!。
因為這是應用程式第一次存取時,應用程式可能需要幾分鐘的時間才能傳回回應。
清除資源
如果您不打算使用本教學課程中建立的 Azure 資源,您可以使用單一命令加以移除。 執行命令之前,本教學課程系列會有下一個步驟,示範如何 變更程序代碼,並在 Azure 中更新您的應用程式。
如果您已完成並想要移除本教學課程中建立的所有 Azure 資源,請使用下列命令刪除資源群組。
az group delete --name aca-demo
提示
有問題嗎? 在 Azure 容器應用程式存放庫中提出問題,讓我們在 GitHub 上了解該問題。
下一步
接下來,繼續瞭解如何更新您所建立的容器應用程式。