共用方式為


部署背景工作服務到 Azure

在本文中,您將了解如何將 .NET 背景工作服務部署至 Azure。 當背景工作從 Azure Container Registry (ACR) 執行為 Azure 容器執行個體 (ACI) 時,可以作為雲端中的微服務。 長時間執行的服務有許多使用案例,背景工作服務才而存在。

在本教學課程中,您會了解如何:

  • 建立背景工作角色服務。
  • 建立容器登錄資源。
  • 將映像推送至容器登錄。
  • 部署為容器執行個體。
  • 確認背景工作角色服務功能。

提示

範例瀏覽器中提供所有「.NET 中的背景工作角色」範例原始程式碼以供下載。 如需詳細資訊,請參閱瀏覽程式碼範例:.NET 中的背景工作角色

必要條件

建立新專案

若要使用 Visual Studio Code 建立新的背景工作服務專案,請選取 [檔案]>[新增]>[專案...]。從 [建立新專案] 對話方塊搜尋 [背景工作服務],然後選取 [背景工作服務] 範本。 輸入所需的專案名稱、選取適當的位置,然後選取 [下一步]。 在 [其他資訊] 頁面上,針對 [目標 Framework] 選取 .NET 5.0,然後核取 [啟用 Docker] 選項以啟用 Docker 支援。 選取所需的 Docker OS

若要使用 Visual Studio Code 建立新的背景工作服務專案,您可以從整合式終端執行 .NET CLI 命令。 如需詳細資訊,請參閱 Visual Studio Code:整合式終端

開啟整合式終端,然後執行 dotnet new 命令,並以您想要的專案名稱取代 <Project.Name>

dotnet new worker --name <Project.Name>

如需 .NET CLI 新背景工作服務專案命令的詳細資訊,請參閱 dotnet new worker

若要使用 .NET CLI 建立新的背景工作服務專案,請在工作目錄中開啟您最愛的終端。 執行 dotnet new 命令,並以您想要的專案名稱取代 <Project.Name>

dotnet new worker --name <Project.Name>

如需 .NET CLI 新背景工作服務專案命令的詳細資訊,請參閱 dotnet new worker

建置應用程式,以確保會還原相依套件,並編譯而不會發生錯誤。

若要從 Visual Studio 建置應用程式,請選取F6或選取 [建置] > [建置方案] 功能表選項。

若要從 Visual Studio Code 建置應用程式,請開啟整合式終端視窗,然後從工作目錄執行 dotnet build 命令。

dotnet build

如需 .NET CLI 建置命令的詳細資訊,請參閱 dotnet build

若要從 .NET CLI 建置應用程式,請從工作目錄執行 dotnet build 命令。

dotnet build <path/to/project.csproj>

指定您的 <path/to/project.csproj> 值,這是要建置的專案檔路徑。 如需 .NET CLI 建置命令的詳細資訊,請參閱 dotnet build

新增 Docker 支援

如果您在建立新的背景工作專案時正確選取 [啟用 Docker] 核取方塊,請跳至 [建置 Docker 映像] 步驟。

如果您未選取此選項,則不擔心,您仍可立即新增。 在 Visual Studio 中 [方案總管]專案節點上按一下滑鼠右鍵,並選取 [新增] > [Docker 支援]。 系統會提示您選取 [目標作業系統],選取 [確定] 並選取預設 OS 選項。

Docker File Options

在 Visual Studio Code 中,您需要安裝 Docker 擴充功能Azure 帳戶擴充功能。 開啟 [命令選擇區],然後選取 [Docker:將 Docker 檔案新增至工作區] 選項。 如果系統提示您選取應用程式平台,請選擇 .NET: Core Console。 如果系統提示您選取專案,請選擇您建立的背景工作服務專案。 當系統提示您選取作業系統時,請選擇第一個列出的作業系統。 當系統提示您是否要包含選擇性 Docker Compose 檔案時,請選取 [否]

Docker 支援需要 Dockerfile。 此檔案是一組完整的指示,可讓您將 .NET 背景工作服務建置為 Docker 映像。 Dockerfile沒有副檔名的檔案。 以下程式碼是 Dockerfile 的範例,應該位於專案檔的根目錄。

使用 CLI 時,不會為您建立 Dockerfile。 將其內容複製到專案根目錄中名為 Dockerfile 的新檔案中。

FROM mcr.microsoft.com/dotnet/runtime:8.0@sha256:e6b552fd7a0302e4db30661b16537f7efcdc0b67790a47dbf67a5e798582d3a5 AS base
WORKDIR /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]

注意

您需要更新 Dockerfile 中參考 *App.CloudService 的各種程式碼,請將此值取代為您的專案名稱。

如需官方 .NET 映像的詳細資訊,請參閱 Docker Hub:.NET RuntimeDocker .NET SDK

組建 Docker 映像

若要建置 Docker 映像,Docker 引擎必須執行。

重要

使用 Docker Desktop 和 Visual Studio 時,若要避免磁碟區共用的相關錯誤,請確定已啟用磁碟區共用。

  1. 在 Docker Desktop 的設定畫面上,選取 [共用磁碟機]
  2. 選取包含專案檔的磁碟機。

如需詳細資訊,請參閱使用 Docker 對 Visual Studio 開發進行疑難排解

以滑鼠右鍵按一下 [方案總管] 中的Dockerfile,然後選取 [建置 Docker 映像]。 隨即顯示 [輸出] 視窗,並報告 docker build 命令進度。

以滑鼠右鍵按一下 Explorer 中的 Dockerfile,然後選取 [建置映像]。 當系統提示您將影像標記為時,請輸入 appcloudservice:latestDocker 工作輸出終端會顯示,並報告 Docker 建置命令進度。

注意

如果沒有提示您標記映像,Visual Studio Code 可能依賴現有的 tasks.json。 如果不想要已使用的標記,您可以藉由更新 tasks 陣列中的 docker-build 組態專案 dockerBuild/tag 值來進行變更。 請考慮下列範例組態區段:

{
  "type": "docker-build",
  "label": "docker-build: release",
  "dependsOn": [
    "build"
  ],
  "dockerBuild": {
    "tag": "appcloudservice:latest",
    "dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
    "context": "${workspaceFolder}",
    "pull": true
  },
  "netCore": {
    "appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
  }
}

Dockerfile 的根目錄中開啟終端視窗,然後執行下列 Docker 命令:

docker build -t appcloudservice:latest -f Dockerfile .

docker build 命令執行時,會以指示步驟處理 Dockerfile 中的每個行。 此命令會建置映像,並建立名為 appcloudservice 的本機存放庫以指向該映像。

提示

產生的 Dockerfile 在開發環境之間有所不同。 例如,如果您從 Visual Studio 新增 Docker 支援,當您嘗試從 Visual Studio Code 建置 Docker 映像時可能會遇到問題,因為 Dockerfile 步驟有所不同。 最好選擇單一開發環境,並透過本教學課程加以使用。

建立容器登錄

Azure Container Registry (ACR) 可讓您建置、儲存及管理私人登錄中的映像及成品。 若要建立容器登錄,您必須在 Azure 入口網站中建立新的資源

  1. 選取 [訂用帳戶],以及對應的 [資源群組] (或建立新的資源群組)。
  2. 輸入登錄名稱
  3. 選取 [位置]
  4. 選取適當的 SKU,例如基本
  5. 選取 [檢閱 + 建立]。
  6. 看到通過驗證之後,請選取 [建立]

重要

若要在建立容器執行個體時使用此容器登錄,您必須啟用管理員使用者。 選取 [存取金鑰],然後啟用管理員使用者

Azure Container Registry (ACR) 可讓您建置、儲存及管理私人登錄中的映像及成品。 在 Dockerfile 的根目錄中開啟終端機視窗,然後執行下列 Docker 命令:

重要

若要從 Azure CLI 與 Azure 資源互動,您必須針對終端會話進行驗證。 若要進行驗證,請使用 az login 命令:

az login

登入之後,當您有多個訂用帳戶且未設定預設訂用帳戶時,請使用 az account set 命令來指定訂用帳戶。

az account set --subscription <subscription name or id>

登入 Azure CLI 之後,您的會話便可以據此與資源互動。

如果您還沒有想要與背景工作服務建立關聯的資源群組,請使用 az group create 命令建立一個資源群組:

az group create -n <resource group> -l <location>

提供 <resource group> 名稱和 <location>。 若要建立容器登錄,您必須呼叫 az acr create 命令。

az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true

請將預留位置取代為您自己適當的值:

  • <registry name>:登錄機碼的名稱。
  • <resource group>:您使用的資源群組名稱。
  • <sku>:接受的值、基本傳統進階標準

上述命令會:

  • 在指定的資源群組中建立 Azure Container Registry,指定登錄名稱。
  • 啟用管理員使用者 - 這是 Azure 容器執行個體的必要項目。

如需詳細資訊,請參閱快速入門:建立 Azure 容器登錄

將映像推送至容器登錄

建置 .NET Docker 映像並建立容器登錄資源之後,您現在可以將映像推送至容器登錄。

以滑鼠右鍵按一下 [方案總管] 中的專案,然後選取 [發佈]。 隨即顯示 [發佈] 對話方塊。 針對 [目標],選取 [Azure],然後選取 [下一步]

Visual Studio: Publish dialog - select Azure

針對 [特定目標],選取 [Azure Container Registry],然後 [下一步]

Visual Studio: Publish dialog - select container registry

接下來,針對 Container Registry,選取您用來建立 ACR 資源的訂用帳戶名稱 。 從 [容器登錄] 選取區域,選取您建立的容器登錄,然後選取 [完成]

Visual Studio: Publish dialog - select container registry details

這會建立發行設定檔,可用來將映像發佈至容器登錄。 選取 [發行] 按鈕將映像推送至容器登錄、[輸出] 視窗會報告發行進度,並在成功完成時看到「已成功發行」訊息。

從 Visual Studio Code 中的 [活動列] 選取 [Docker]。 展開 [映像] 樹狀檢視面板,然後展開 appcloudservice 映像節點,然後以滑鼠右鍵按一下 latest 標籤。

Visual Studio Code: Docker - push image

整合式終端機視窗會將 docker push 命令的進度回報給容器登錄。

若要將映像推送至容器登錄,您必須先登入登錄:

az acr login -n <registry name>

az acr login 命令會透過 Docker CLI 登入容器登錄。 若要將映像推送至容器登錄,請使用 az acr build 命令搭配您的容器登錄名稱作為 <registry name>

az acr build -r <registry name> -t appcloudservice .

上述命令會:

  • 將來源封裝成 tar 檔案。
  • 上傳至容器登錄。
  • 容器登錄會將 tar 檔案解壓縮。
  • Dockerfile在容器登錄資源中執行 docker build 命令。
  • 將映像新增至容器登錄。

若要確認映像已成功推送至容器登錄,請導覽至 Azure 入口網站。 開啟容器登錄資源,選取 [服務] 下的 [存放庫]。 您應該會看到文字映像。

部署為容器執行個體

從 Visual Studio Code,從 [Azure 工作列]選取 [Docker]。 展開 [登錄] 節點,然後選取 [連線登錄]。 出現提示時選取 [Azure],並視需要登入。

重要

從 Visual Studio Code 部署為容器執行個體,不再適用於 Mac。 如需詳細資訊,請參閱 GitHub:關於 Visual Studio Code 的 Docker 延伸模組

Visual Studio Code - Docker: Connect registry

展開 [REGISTRIES] 節點,選取 [Azure],您的訂用帳戶 > 容器登錄 > 映像,然後在標籤上按一下滑鼠右鍵。 選取 [部署映像到 Azure 容器執行個體]

Visual Studio Code - Docker: Deploy image to Azure Container Instances

若要建立容器執行個體,請先使用 az container create 命令建立容器群組。

az container create -g <resource group> \
  --name <instance name> \
  --image <registry name>.azurecr.io/<image name>:latest \
  --registry-password <password>

請提供適當的值:

  • <resource group>:您在本教學課程中使用的資源群組名稱。
  • <instance name>:容器執行個體的名稱。
  • <registry name>:容器登錄的名稱。
  • <image name>:映像的名稱。
  • <password>:容器登錄的密碼 - 您可以從 Azure 入口網站容器登錄資源 > [存取金鑰] 取得此密碼。

若要建立容器執行個體,您也必須在 Azure 入口網站中建立新的資源

  1. 選取上一節中的相同訂用帳戶和對應的資源群組
  2. 輸入容器名稱 - appcloudservice-container
  3. 選取對應至上一個位置選取範圍的區域
  4. 針對[映像來源],選取[Azure Container Registry]
  5. 依上一個步驟中提供的名稱選取登錄
  6. 選取 [映像] 和 [映像標籤]
  7. 選取 [檢閱 + 建立]。
  8. 假設已通過驗證,請選取 [建立]

建立資源可能需要一些時間,一旦建立,請選取 [移至資源] 按鈕。

如需詳細資訊,請參閱快速入門:建立 Azure 容器執行個體

驗證服務功能

將在建立容器執行個體之後立即開始執行。

若要確認您的背景工作服務正常運作,請導覽至容器執行個體資源中的 Azure 入口網站,選取 [容器] 選項。

Azure portal: Container instance running

您將會看到容器及其目前的狀態。 在此情況下,其為執行中。 選取 [記錄] 以查看 .NET 背景工作服務輸出。

若要確認您的背景工作服務正常運作,您可以從執行中的應用程式檢視記錄。 使用 az container logs 命令:

az container logs -g <resource group> --name <instance name>

請提供適當的值:

  • <resource group>:您在本教學課程中使用的資源群組名稱。
  • <instance name>:容器執行個體的名稱。

您將會看到 .NET 背景工作服務輸出記錄,這表示您已成功將容器化應用程式部署至 ACI。

另請參閱