共用方式為


教學課程:從原始程式碼建置和部署至 Azure Container Apps

本文說明如何使用慣用的程式設計語言,從您電腦上的原始程式碼,建置應用程式並將其部署至 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. 
  1. 建立並執行您的原始程式碼。

    建立新的 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,以便將應用程式部署至容器應用程式。

  2. 在 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 資源

  1. 使用下列命令從 CLI 登入 Azure。 若要完成驗證程式,請務必遵循所有提示。

    az login
    
  2. 安裝或更新 Azure CLI 的 Azure Container Apps 擴充功能。

    az extension add --name containerapp --upgrade
    

    注意

    如果您在執行 az containerapp 命令時收到遺漏參數的錯誤,請確定您已安裝最新版的 Azure Container Apps 擴充功能。

  3. 現在您的 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) 會產生隨機字串,以作為容器登錄名稱使用。 登錄名稱必須是全域唯一的,因此此字串有助於確保您的命令能夠順利執行。

  4. 建立資源群組,以組織與容器應用程式部署相關的服務。

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --output none
    
  5. 建立 使用者指派的受控識別 ,並使用下列命令取得其標識碼。

    首先,建立受控識別。

    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)
    
  6. 使用下列命令建立容器應用程式環境來裝載您的應用程式。

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --mi-user-assigned $IDENTITY_ID \
        --output none
    
  7. 在您的資源群組中建立 Azure Container Registry (ACR) 實例。 登錄會儲存您的容器映像。

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $REGISTRY_NAME \
      --sku Basic \
      --output none
    
  8. 使用下列命令,將使用者指派的受控識別指派給容器登錄實例。

    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 上了解該問題。

下一步

接下來,繼續瞭解如何更新您所建立的容器應用程式。