Bereitstellen eines Workerdiensts in Azure

In diesem Artikel erfahren Sie, wie Sie einen .NET-Workerdienst in Azure bereitstellen. Wenn Ihr Worker als Azure Container Instance (ACI) über Azure Container Registry (ACR)ausgeführt wird, kann er als Microservice in der Cloud fungieren. Es gibt viele Anwendungsfälle für Dienste mit langer Laufzeit, und dies ist der Grund für die Existenz des Workerdiensts.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen eines Workerdiensts.
  • Erstellen einer Containerregistrierungsressource.
  • Pushen eines Bilds in die Containerregistrierung.
  • Bereitstellen als Containerinstanz.
  • Überprüfen der Funktionalität des Workerdiensts.

Tipp

Der gesamte Quellcode des Beispiels „Worker in .NET“ steht im Beispielbrowser zum Download zur Verfügung. Weitere Informationen finden Sie unter Durchsuchen von Codebeispielen: Worker in .NET.

Voraussetzungen

Erstellen eines neuen Projekts

Um ein neues Workerdienstprojekt mit Visual Studio zu erstellen, wählen Sie Datei>Neu>Projekt aus. Suchen Sie im Dialogfeld Neues Projekt erstellen nach „Workerdienst“, und wählen Sie die Workerdienstvorlage aus. Geben Sie den gewünschten Projektnamen ein, wählen Sie einen geeigneten Speicherort aus, und klicken Sie auf Weiter. Wählen Sie auf der Seite Zusätzliche Informationen unter Zielframework die Option .NET 5.0 aus, und aktivieren Sie Docker aktivieren, um die Docker-Unterstützung zu aktivieren. Wählen Sie das gewünschte Docker-Betriebssystem aus.

Um ein neues Workerdienstprojekt mit Visual Studio Code zu erstellen, können Sie .NET-CLI-Befehle über das integrierte Terminal ausführen. Weitere Informationen finden Sie unter Visual Studio Code: Integriertes Terminal.

Öffnen Sie das integrierte Terminal, führen Sie den Befehl dotnet new aus, und ersetzen Sie <Project.Name> durch den gewünschten Projektnamen.

dotnet new worker --name <Project.Name>

Weitere Informationen zum .NET-CLI-Befehl für ein neues Workerdienstprojekt finden Sie unter dotnet new worker.

Um ein neues Workerdienstprojekt mit der .NET-CLI zu erstellen, öffnen Sie Ihr bevorzugtes Terminal in einem Arbeitsverzeichnis. Führen Sie den Befehl dotnet new aus, und ersetzen Sie <Project.Name> durch den gewünschten Projektnamen.

dotnet new worker --name <Project.Name>

Weitere Informationen zum .NET-CLI-Befehl für ein neues Workerdienstprojekt finden Sie unter dotnet new worker.

Kompilieren Sie die Anwendung, um sicherzustellen, dass die abhängigen Pakete wiederhergestellt werden und die Kompilierung fehlerfrei erfolgt.

Um die Anwendung über Visual Studio zu erstellen, drücken Sie F6, oder wählen Sie die Menüoption Erstellen>Projektmappe erstellen aus.

Um die Anwendung über Visual Studio Code zu erstellen, öffnen Sie das integrierte Terminalfenster, und führen Sie den Befehl dotnet build aus dem Arbeitsverzeichnis aus.

dotnet build

Weitere Informationen zum .NET-CLI-Erstellungsbefehl finden Sie unter dotnet build.

Um die Anwendung über die .NET-CLI zu erstellen, führen Sie den Befehl dotnet build im Arbeitsverzeichnis aus.

dotnet build <path/to/project.csproj>

Geben Sie den <path/to/project.csproj>-Wert an. Dies ist der Pfad der zu erstellenden Projektdatei. Weitere Informationen zum .NET-CLI-Erstellungsbefehl finden Sie unter dotnet build.

Hinzufügen der Docker-Unterstützung

Wenn Sie beim Erstellen eines neuen Workerprojekts das Kontrollkästchen Docker aktivieren ausgewählt haben, fahren Sie mit dem Schritt Erstellen des Docker-Images fort.

Falls Sie diese Option nicht ausgewählt haben, machen Sie sich keine Gedanken – Sie können sie auch jetzt noch hinzufügen. Klicken Sie in Visual Studio im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Hinzufügen>Docker-Unterstützung aus. Sie werden aufgefordert, ein Zielbetriebssystem auszuwählen. Behalten Sie die Standardauswahl bei, und wählen Sie OK aus.

Docker File Options

In Visual Studio Code müssen die Docker-Erweiterung und die Azure Account-Erweiterung installiert sein. Öffnen Sie die Befehlspalette, und wählen Sie Add Docker Files to Workspace (Docker-Dateien dem Arbeitsbereich hinzufügen) aus. Wenn Sie zur Auswahl der Anwendungsplattform aufgefordert werden, wählen Sie .NET Core-Konsole aus. Wenn Sie zur Auswahl des Projekts aufgefordert werden, wählen Sie das Workerdienstprojekt aus, das Sie erstellt haben. Wenn Sie zur Auswahl des Betriebssystems aufgefordert werden, wählen Sie das zuerst aufgeführte Betriebssystem aus. Wenn Sie gefragt werden, ob optionale Docker Compose-Dateien enthalten sein sollen, wählen Sie Nein aus.

Die Docker-Unterstützung erfordert eine Dockerfile-Datei. Bei dieser Datei handelt es sich um eine Reihe umfassender Anweisungen zum Erstellen des .NET-Workerdiensts als Docker-Image. Das Dockerfile ist eine Datei ohne Dateierweiterung. Der folgende Code ist ein Beispiel für ein Dockerfile. Dieses muss sich im Stammverzeichnis der Projektdatei befinden.

Bei Verwendung der CLI wird das Dockerfilenicht für Sie erstellt. Kopieren Sie den Inhalt in eine neue Datei namens Dockerfile im Stammverzeichnis des Projekts.

FROM mcr.microsoft.com/dotnet/runtime:8.0 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 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"]

Hinweis

Sie müssen alle Zeilen im Dockerfile aktualisieren, die auf „*App.CloudService“ verweisen. Ersetzen Sie diese Zeichenfolge durch den Namen Ihres Projekts.

Weitere Information zu den offiziellen .NET-Images finden Sie unter Docker Hub: .NET Runtime und Docker Hub: .NET SDK.

Erstellen des Docker-Images

Zum Erstellen des Docker-Images muss die Docker-Engine ausgeführt werden.

Wichtig

Wenn Sie Docker Desktop und Visual Studio verwenden, stellen Sie sicher, dass die Volumefreigabe aktiviert ist, um entsprechende Fehler zu vermeiden.

  1. Wählen Sie in Docker Desktop im Bildschirm Einstellungen die Option Freigegebene Laufwerke.
  2. Wählen Sie die Laufwerke aus, die Ihre Projektdateien enthalten.

Weitere Informationen finden Sie unter Problembehandlung bei der Visual Studio-Entwicklung mit Docker.

Klicken Sie mit der rechten Maustaste auf die Dockerfile-Datei im Projektmappen-Explorer,und wählen Sie Docker-Image erstellen aus. Das Fenster Ausgabe wird angezeigt und gibt den Fortschritt des docker build-Befehls an.

Klicken Sie mit der rechten Maustaste auf Dockerfile im Explorer, und wählen Sie Image erstellen aus. Bei der Aufforderung Tag image as (Image markieren als) geben Sie appcloudservice:latest ein. Das Ausgabeterminal für Docker-Aufgaben wird angezeigt und gibt den Fortschritt des Befehls „docker build“ an.

Hinweis

Wenn Sie nicht zum Markieren des Images aufgefordert werden, ist es möglich, dass Visual Studio Code eine vorhandene tasks.json verwendet. Wenn das verwendete Tag nicht erwünscht ist, können Sie es ändern, indem Sie den Wert des docker-buildKonfigurationselementsdockerBuild/tag im tasks-Array aktualisieren. Sehen Sie sich den folgenden Beispielkonfigurationsabschnitt an:

{
  "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"
  }
}

Öffnen Sie ein Terminalfenster im Stammverzeichnis der Dockerfile-Datei, und führen Sie den folgenden Docker-Befehl aus:

docker build -t appcloudservice:latest -f Dockerfile .

Während der docker build-Befehl ausgeführt wird, verarbeitet er jede Zeile in der Dockerfile-Datei als Anweisungsschritt. Dieser Befehl erstellt das Image und ein lokales Repository namens appcloudservice, das auf dieses Image verweist.

Tipp

Die generierte Dockerfile-Datei unterscheidet sich je nach Entwicklungsumgebung. Wenn Sie beispielsweise über Visual Studio die Docker-Unterstützung hinzufügen, können Probleme beim Erstellen des Docker-Images über Visual Studio Code auftreten, da die Dockerfile-Schritte voneinander abweichen. Es ist am besten, eine einzelne Entwicklungsumgebung auszuwählen und im gesamten Tutorial zu verwenden.

Erstellen einer Containerregistrierung

Mit Azure Container Registry (ACR) können Sie Containerimages und -artefakte in einer privaten Registrierung erstellen, speichern und verwalten. Um eine Containerregistrierung zu erstellen, müssen Sie im Azure-Portal eine neue Ressource erstellen.

  1. Wählen Sie das Abonnement und die entsprechende Ressourcengruppe aus (oder erstellen Sie eine neue).
  2. Geben Sie einen Registrierungsnamen ein.
  3. Wählen Sie einen Speicherortaus.
  4. Wählen Sie eine geeignete SKU aus, z. B. Basic.
  5. Klicken Sie auf Überprüfen + erstellen.
  6. Nachdem die Überprüfung erfolgreich war, wählen Sie Erstellen aus.

Wichtig

Um diese Containerregistrierung beim Erstellen einer Containerinstanz zu verwenden, müssen Sie Administratorbenutzer aktivieren. Wählen Sie Zugriffsschlüssel aus, und aktivieren Sie Administratorbenutzer.

Mit Azure Container Registry (ACR) können Sie Containerimages und -artefakte in einer privaten Registrierung erstellen, speichern und verwalten. Öffnen Sie ein Terminalfenster im Stammverzeichnis der Dockerfile-Datei, und führen Sie den folgenden Azure CLI-Befehl aus:

Wichtig

Für die Interaktion mit Azure-Ressourcen über die Azure-Befehlszeilenschnittstelle müssen Sie für Ihre Terminalsitzung authentifiziert werden. Verwenden Sie zum Authentifizieren den Befehl az login:

az login

Nachdem Sie sich angemeldet haben, verwenden Sie den Befehl az account set, um Ihr Abonnement anzugeben, wenn Sie mehr als ein Abonnement festgelegt haben und kein Standardabonnement festgelegt ist.

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

Nachdem Sie sich bei der Azure CLI angemeldet haben, kann Ihre Sitzung entsprechend mit Ressourcen interagieren.

Wenn Sie noch nicht über eine Ressourcengruppe verfügen, der Sie Ihren Workerdienst zuordnen möchten, erstellen Sie eine mit dem Befehl az group create:

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

Geben Sie den Namen der <resource group> und den <location> an. Rufen Sie den Befehl az acr create auf, um eine Containerregistrierung zu erstellen.

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

Ersetzen Sie die Platzhalter durch für Ihre Umgebung geeignete Werte:

  • <registry name>: der Name der Registrierung
  • <resource group>: der von Ihnen verwendete Ressourcengruppenname
  • <sku>: akzeptierte Werte: Basic, Classic, Premium oder Standard

Der vorherige Befehl:

  • Erstellt eine Azure Container Registry unter Angabe eines Registrierungsnamens in der angegebenen Ressourcengruppe.
  • Aktiviert einen Administratorbenutzer – dies ist für Azure Container Instances erforderlich.

Weitere Informationen finden Sie unter Schnellstart: Erstellen einer Azure-Containerregistrierung.

Übertragen des Images in die Containerregistrierung per Pushvorgang

Nachdem das .NET Docker-Image und die Containerregistrierungsressource erstellt wurden, können Sie das Image jetzt in die Containerregistrierung pushen.

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Veröffentlichen aus. Das Dialogfeld Veröffentlichen wird angezeigt. Wählen Sie unter Ziel die Option Azure und dann Weiter aus.

Visual Studio: Publish dialog - select Azure

Wählen Sie unter Bestimmtes Ziel die Option Azure Container Registry und dann Weiter aus.

Visual Studio: Publish dialog - select container registry

Wählen Sie als Nächstes für die Containerregistrierung den Abonnementnamen aus, den Sie zum Erstellen der ACR-Ressource verwendet haben. Wählen Sie im Auswahlbereich Containerregistrierungen die erstellte Containerregistrierung aus, und klicken Sie dann auf Fertig stellen.

Visual Studio: Publish dialog - select container registry details

Dadurch wird ein Veröffentlichungsprofil erstellt, das zum Veröffentlichen des Images in der Containerregistrierung verwendet werden kann. Wählen Sie die Schaltfläche Veröffentlichen aus, um das Image in die Containerregistrierung zu pushen. Im Fenster Ausgabe wird der Veröffentlichungsfortschritt angezeigt, und nach erfolgreichem Abschluss erscheint eine Meldung mit dem Hinweis, dass die Veröffentlichung erfolgreich war.

Wählen Sie Docker in der Aktivitätsleiste in Visual Studio Code aus. Erweitern Sie die Strukturansicht IMAGES und dann den appcloudservice-Bildknoten, und klicken Sie mit der rechten Maustaste auf das latest-Tag.

Visual Studio Code: Docker - push image

Im Fenster des integrierten Terminals wird der Status des docker push-Befehls an die Containerregistrierung gemeldet.

Um ein Image in die Containerregistrierung zu pushen, müssen Sie sich zuerst bei der Registrierung anmelden:

az acr login -n <registry name>

Der Befehl az acr login meldet Sie über die Docker-CLI bei einer Containerregistrierung an. Um das Image in die Containerregistrierung zu pushen, verwenden Sie den Befehl az acr build mit dem Namen Ihrer Containerregistrierung als <registry name>:

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

Der vorherige Befehl:

  • Packt die Quelle in eine tar-Datei.
  • Lädt sie in die Containerregistrierung hoch.
  • Die Containerregistrierung entpackt die tar-Datei.
  • Führt den Befehl docker build in der Containerregistrierungsressource für die Dockerfile-Datei aus.
  • Überträgt das Image an die Containerregistrierung.

Um zu überprüfen, ob das Image erfolgreich in die Containerregistrierung gepusht wurde, navigieren Sie zum Azure-Portal. Öffnen Sie die Containerregistrierungsressource, und wählen Sie unter Dienste die Option Repositorys aus. Daraufhin sollte das Image angezeigt werden.

Bereitstellen als Containerinstanz

Wählen Sie in Visual Studio Code Docker in der Aktivitätsleiste aus. Erweitern Sie den Knoten REGISTRIES, und wählen Sie Connect Registry aus. Wählen Sie Azure aus, wenn Sie dazu aufgefordert werden, und melden Sie sich ggf. an.

Wichtig

Das Bereitstellen als Containerinstanz über Visual Studio Code funktioniert auf Mac nicht mehr. Weitere Informationen finden Sie unter GitHub: Informationen zur Docker-Erweiterung für Visual Studio Code.

Visual Studio Code - Docker: Connect registry

Erweitern Sie den Knoten REGISTRIES. Wählen Sie „Azure, Ihr Abonnement > die Containerregistrierung > das Image“ aus, und klicken Sie dann mit der rechten Maustaste auf das Tag. Wählen Sie Deploy Image to Azure Container Instances aus.

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

Um eine Containerinstanz zu erstellen, müssen Sie zunächst mit dem Befehl az container create eine Containergruppe erstellen.

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

Geben Sie die entsprechenden Werte an:

  • <resource group>: der Ressourcengruppenname, den Sie in diesem Tutorial verwendet haben
  • <instance name>: der Name der Containerinstanz
  • <registry name>: der Name der Containerregistrierung
  • <image name>: der Name des Images
  • <password>: das Kennwort für die Containerregistrierung, das im Azure-Portal in der Ressource der Containerregistrierung über >Zugriffsschlüssel abgerufen werden kann.

Um eine Containerinstanz zu erstellen, müssen Sie im Azure-Portal ebenfalls eine neue Ressource erstellen.

  1. Wählen Sie dasselbe Abonnementund die entsprechende Ressourcengruppe wie im vorherigen Abschnitt aus.
  2. Geben Sie einen Containernamen (appcloudservice-container) ein.
  3. Wählen Sie eine Region aus, die der vorherigen Auswahl für Standort entspricht.
  4. Wählen Sie Azure Container Registry als Imagequelle aus.
  5. Wählen Sie die Registrierung anhand des im vorherigen Schritt angegebenen Namens aus.
  6. Wählen Sie das Image und das Imagetag aus.
  7. Klicken Sie auf Überprüfen + erstellen.
  8. Sofern die Überprüfung erfolgreich war, wählen Sie Erstellen aus.

Die Erstellung der Ressourcen kann einen Augenblick dauern. Nachdem die Ressource erstellt wurden, wählen Sie die Schaltfläche Zu Ressource wechseln aus.

Weitere Informationen finden Sie unter Schnellstart: Erstellen einer Azure-Containerinstanz.

Überprüfen der Dienstfunktionalität

Die Containerinstanz wird sofort nach ihrer Erstellung ausgeführt.

Um zu überprüfen, ob Ihr Workerdienst ordnungsgemäß funktioniert, navigieren Sie in der Containerinstanzressource zum Azure-Portal, und wählen Sie die Option Container aus.

Azure portal: Container instance running

Die Container und ihr aktueller Status werden angezeigt. In diesem Fall lautet dieser Wird ausgeführt. Wählen Sie Protokolle aus, um die Ausgabe des .NET-Workerdiensts anzuzeigen.

Um zu überprüfen, ob Ihr Workerdienst ordnungsgemäß funktioniert, können Sie die Protokolle aus Ihrer ausgeführten Anwendung anzeigen. Verwenden Sie den Befehl az container logs:

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

Geben Sie die entsprechenden Werte an:

  • <resource group>: der Ressourcengruppenname, den Sie in diesem Tutorial verwendet haben
  • <instance name>: der Name der Containerinstanz

Die Ausgabeprotokolle des .NET-Workerdiensts werden angezeigt. Dies bedeutet, dass Sie Ihre Container-App erfolgreich in ACI bereitgestellt haben.

Siehe auch