Een werkrolservice implementeren in Azure
In dit artikel leert u hoe u een .NET Worker-service implementeert in Azure. Als uw werkrol wordt uitgevoerd als een Azure Container Instance (ACI) vanuit azure Container Registry (ACR), kan deze fungeren als een microservice in de cloud. Er zijn veel gebruiksvoorbeelden voor langlopende services en de Worker-service bestaat om deze reden.
In deze zelfstudie leert u het volgende:
- Maak een werkrolservice.
- Maak een containerregisterresource.
- Push een installatiekopieën naar het containerregister.
- Implementeren als containerinstantie.
- Controleer de functionaliteit van de werkrolservice.
Tip
Alle voorbeeldbroncode 'Workers in .NET' is beschikbaar in de voorbeeldenbrowser om te downloaden. Zie Codevoorbeelden bekijken: Workers in .NET voor meer informatie.
Vereisten
- De .NET 5.0 SDK of hoger.
- Docker Desktop (Windows of Mac).
- Een Azure-account met een actief abonnement. Gratis een account maken
- Afhankelijk van de gewenste ontwikkelomgeving:
Een nieuw project maken
Als u een nieuw Worker Service-project wilt maken met Visual Studio, selecteert u Bestand>nieuw>project.... Zoek in het dialoogvenster Een nieuw project maken naar 'Worker Service' en selecteer de sjabloon Worker Service. Voer de gewenste projectnaam in, selecteer een geschikte locatie en selecteer Volgende. Schakel op de pagina Aanvullende informatie voor het doelframework de optie .NET 5.0
Docker inschakelen in om docker-ondersteuning in te schakelen. Selecteer het gewenste Docker-besturingssysteem.
Als u een nieuw Worker Service-project wilt maken met Visual Studio Code, kunt u .NET CLI-opdrachten uitvoeren vanuit de geïntegreerde terminal. Zie Visual Studio Code: Integrated Terminal voor meer informatie.
Open de geïntegreerde terminal en voer de dotnet new
opdracht uit en vervang de <Project.Name>
door de gewenste projectnaam.
dotnet new worker --name <Project.Name>
Zie dotnet new worker voor meer informatie over de opdracht .NET CLI new worker service project.
Als u een nieuw Worker Service-project wilt maken met de .NET CLI, opent u uw favoriete terminal in een werkmap. Voer de dotnet new
opdracht uit en vervang de door de <Project.Name>
gewenste projectnaam.
dotnet new worker --name <Project.Name>
Zie dotnet new worker voor meer informatie over de opdracht .NET CLI new worker service project.
Bouw de toepassing om ervoor te zorgen dat de afhankelijke pakketten worden hersteld en zonder fouten worden gecompileerd.
Als u de toepassing wilt bouwen vanuit Visual Studio, selecteert u F6 of selecteert u de menuoptie Build Build>Solution.
Als u de toepassing wilt bouwen vanuit Visual Studio Code, opent u het geïntegreerde terminalvenster en voert u de dotnet build
opdracht uit vanuit de werkmap.
dotnet build
Zie dotnet build
voor meer informatie over de .NET CLI-buildopdracht.
Als u de toepassing wilt bouwen vanuit de .NET CLI, voert u de dotnet build
opdracht uit vanuit de werkmap.
dotnet build <path/to/project.csproj>
Geef uw <path/to/project.csproj>
waarde op. Dit is het pad naar het projectbestand dat u wilt bouwen. Zie dotnet build
voor meer informatie over de .NET CLI-buildopdracht.
Docker-ondersteuning toevoegen
Als u het selectievakje Docker inschakelen juist hebt ingeschakeld bij het maken van een nieuw worker-project, gaat u verder met de stap Docker-installatiekopieën bouwen.
Als u deze optie niet hebt geselecteerd, hoeft u zich geen zorgen te maken. U kunt deze nu nog steeds toevoegen. Klik in Visual Studio met de rechtermuisknop op het projectknooppunt in Solution Explorer en selecteer Docker-ondersteuning toevoegen>. U wordt gevraagd een doel-besturingssysteem te selecteren. Selecteer OK met de standaardselectie van het besturingssysteem.
In Visual Studio Code hebt u de Docker-extensie en de Azure-accountextensie geïnstalleerd. Open het opdrachtpalet en selecteer docker : Docker-bestanden toevoegen aan de werkruimteoptie . Als u wordt gevraagd om Application Platform te selecteren, kiest u .NET: Core Console. Als u wordt gevraagd Project te selecteren, kiest u het werkserviceproject dat u hebt gemaakt. Wanneer u wordt gevraagd het besturingssysteem te selecteren, kiest u het eerste vermelde besturingssysteem. Wanneer u wordt gevraagd of u optionele Docker Compose-bestanden wilt opnemen, selecteert u Nee.
Docker-ondersteuning vereist een Dockerfile. Dit bestand is een reeks uitgebreide instructies voor het bouwen van uw .NET Worker-service als docker-installatiekopieën. Het Dockerfile is een bestand zonder bestandsextensie. De volgende code is een voorbeeld van Dockerfile en moet bestaan in de hoofdmap van het projectbestand.
Met de CLI wordt het Dockerfile niet voor u gemaakt. Kopieer de inhoud ervan naar een nieuw bestand met de naam Dockerfile in de hoofdmap van het project.
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"]
Notitie
U moet de verschillende regels in het Dockerfile bijwerken die verwijzen naar *App.CloudService. Vervang dit door de naam van uw project.
Zie Docker Hub: .NET Runtime en Docker Hub: .NET SDK voor meer informatie over de officiële .NET-installatiekopieën.
De Docker-installatiekopie bouwen
Als u de Docker-installatiekopieën wilt bouwen, moet de Docker Engine worden uitgevoerd.
Belangrijk
Wanneer u Docker Desktop en Visual Studio gebruikt, om fouten met betrekking tot het delen van volumes te voorkomen, moet u ervoor zorgen dat dit is ingeschakeld.
- Selecteer gedeelde stations in het scherm Instellingen in Docker Desktop.
- Selecteer de stations met uw projectbestanden.
Zie Problemen met Visual Studio-ontwikkeling oplossen met Docker voor meer informatie.
Klik met de rechtermuisknop op het Dockerfile in Solution Explorer en selecteer Docker-installatiekopieën bouwen. In het venster Uitvoer wordt de voortgang van de docker build
opdracht gerapporteerd.
Klik met de rechtermuisknop op het Dockerfile in de Verkenner en selecteer Build-installatiekopieën. Wanneer u wordt gevraagd om de afbeelding te taggen als, voert u het volgende in appcloudservice:latest
. De uitvoerterminal voor Docker-taken wordt weergegeven en rapporteert de voortgang van de Docker-buildopdracht.
Notitie
Als u niet wordt gevraagd om de afbeelding te taggen, is het mogelijk dat Visual Studio Code afhankelijk is van een bestaande tasks.json. Als de gebruikte tag ongewenst is, kunt u deze wijzigen door de waarde van dockerBuild/tag
het docker-build
configuratie-item in de matrix bij te tasks
werken. Bekijk de volgende voorbeeldconfiguratiesectie:
{
"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"
}
}
Open een terminalvenster in de hoofdmap van het Dockerfile en voer de volgende Docker-opdracht uit:
docker build -t appcloudservice:latest -f Dockerfile .
Terwijl de docker build
opdracht wordt uitgevoerd, wordt elke regel in het Dockerfile verwerkt als instructiestap. Met deze opdracht bouwt u de installatiekopieën en maakt u een lokale opslagplaats met de naam appcloudservice die verwijst naar de installatiekopieën.
Tip
Het gegenereerde Dockerfile verschilt tussen ontwikkelomgevingen. Als u bijvoorbeeld Docker-ondersteuning van Visual Studio toevoegt, kunnen er problemen optreden als u probeert de Docker-installatiekopieën te bouwen vanuit Visual Studio Code, omdat de Dockerfile-stappen variëren. U kunt het beste één ontwikkelomgeving kiezen en deze in deze zelfstudie gebruiken.
Containerregister maken
Met een ACR-resource (Azure Container Registry) kunt u containerinstallatiekopieën en artefacten bouwen, opslaan en beheren in een privéregister. Als u een containerregister wilt maken, moet u een nieuwe resource maken in Azure Portal.
- Selecteer het abonnement en de bijbehorende resourcegroep (of maak een nieuwe).
- Voer een registernaam in.
- Selecteer een Locatie.
- Selecteer een geschikte SKU, bijvoorbeeld Basic.
- Selecteer Controleren + maken.
- Nadat validatie is geslaagd, selecteert u Maken.
Belangrijk
Als u dit containerregister wilt gebruiken bij het maken van een containerinstantie, moet u Beheer gebruiker inschakelen. Selecteer Toegangssleutels en schakel Beheer gebruiker in.
Met een ACR-resource (Azure Container Registry) kunt u containerinstallatiekopieën en artefacten bouwen, opslaan en beheren in een privéregister. Open een terminalvenster in de hoofdmap van het Dockerfile en voer de volgende Azure CLI-opdracht uit:
Belangrijk
Als u wilt communiceren met Azure-resources vanuit de Azure CLI, moet u worden geverifieerd voor uw terminalsessie. Gebruik de az login
volgende opdracht om te verifiëren:
az login
Nadat u bent aangemeld, gebruikt u de az account set
opdracht om uw abonnement op te geven wanneer u meer dan één abonnement hebt ingesteld en er geen standaardabonnement is ingesteld.
az account set --subscription <subscription name or id>
Zodra u zich hebt aangemeld bij de Azure CLI, kan uw sessie dienovereenkomstig communiceren met resources.
Als u nog geen resourcegroep hebt waarmee u uw werkrolservice wilt koppelen, maakt u er een met behulp van de az group create
opdracht:
az group create -n <resource group> -l <location>
Geef de <resource group>
naam en de <location>
. Als u een containerregister wilt maken, roept u de az acr create
opdracht aan.
az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true
Vervang tijdelijke aanduidingen door uw eigen juiste waarden:
<registry name>
: de naam van het register.<resource group>
: de naam van de resourcegroep die u hebt gebruikt.<sku>
: geaccepteerde waarden, Basic, Classic, Premium of Standard.
De bovenstaande opdracht:
- Hiermee maakt u een Azure Container Registry, op basis van een registernaam, in de opgegeven resourcegroep.
- Een Beheer gebruiker is ingeschakeld. Dit is vereist voor Azure Container Instances.
Zie Quickstart: Een Azure-containerregister maken voor meer informatie.
Installatiekopie pushen naar containerregister
Nu de .NET Docker-installatiekopie is gebouwd en de containerregisterresource is gemaakt, kunt u de installatiekopie nu naar het containerregister pushen.
Klik met de rechtermuisknop op het project in Solution Explorer en selecteer Publiceren. Het dialoogvenster Publiceren wordt weergegeven. Voor het doel selecteert u Azure en vervolgens Volgende.
Voor het specifieke doel selecteert u Azure Container Registry en vervolgens volgende.
Selecteer vervolgens voor containerregister de abonnementsnaam die u hebt gebruikt om de ACR-resource te maken. Selecteer in het selectiegebied Containerregisters het containerregister dat u hebt gemaakt en selecteer vervolgens Voltooien.
Hiermee maakt u een publicatieprofiel dat kan worden gebruikt om de installatiekopieën naar het containerregister te publiceren. Selecteer de knop Publiceren om de installatiekopie naar het containerregister te pushen, het uitvoervenster rapporteert de voortgang van de publicatie. Wanneer de installatiekopie is voltooid, wordt het bericht 'Gepubliceerd' weergegeven.
Selecteer Docker op de activiteitenbalk in Visual Studio Code. Vouw het deelvenster AFBEELDINGEN-structuurweergave uit en vouw vervolgens het appcloudservice
afbeeldingsknooppunt uit en klik met de rechtermuisknop op de latest
tag.
Het geïntegreerde terminalvenster rapporteert de voortgang van de docker push
opdracht aan het containerregister.
Als u een installatiekopieën naar het containerregister wilt pushen, moet u zich eerst aanmelden bij het register:
az acr login -n <registry name>
De az acr login
opdracht meldt zich aan bij een containerregister via de Docker CLI. Als u de installatiekopieën naar het containerregister wilt pushen, gebruikt u de opdracht az acr build met de naam van het containerregister als het <registry name>
volgende:
az acr build -r <registry name> -t appcloudservice .
De bovenstaande opdracht:
- Hiermee wordt de bron in een tar-bestand verpakt.
- Uploadt het naar het containerregister.
- Het containerregister pakt het tar-bestand uit.
- Voert de
docker build
opdracht uit in de containerregisterresource op basis van het Dockerfile. - Voegt de installatiekopieën toe aan het containerregister.
Als u wilt controleren of de installatiekopieën naar het containerregister zijn gepusht, gaat u naar Azure Portal. Open de containerregisterresource onder Services en selecteer Opslagplaatsen. U ziet de afbeelding.
Implementeren als containerinstantie
Selecteer Docker in Visual Studio Code op de activiteitenbalk. Vouw het knooppunt REGISTERS uit en selecteer Verbinding maken Register. Selecteer Azure wanneer u hierom wordt gevraagd en meld u indien nodig aan.
Belangrijk
Implementeren als een containerinstantie vanuit Visual Studio Code werkt niet meer op Mac. Zie GitHub: Over Docker-extensie voor Visual Studio Code voor meer informatie.
Vouw het knooppunt REGISTERS uit , selecteer Azure, uw abonnement > op het containerregister > van de installatiekopieën en klik vervolgens met de rechtermuisknop op de tag. Selecteer Installatiekopieën implementeren in Azure Container Instances.
Als u een containerinstantie wilt maken, maakt u eerst een containergroep met behulp van de az container create
opdracht.
az container create -g <resource group> \
--name <instance name> \
--image <registry name>.azurecr.io/<image name>:latest \
--registry-password <password>
Geef de juiste waarden op:
<resource group>
: de naam van de resourcegroep die u in deze zelfstudie hebt gebruikt.<instance name>
: de naam van de containerinstantie.<registry name>
: de naam van het containerregister.<image name>
: de naam van de afbeelding.<password>
: het wachtwoord voor het containerregister: u kunt dit ophalen via De Azure-portal, toegangssleutels voor containerregisterresources>.
Als u een containerinstantie wilt maken, moet u ook een nieuwe resource maken in Azure Portal.
- Selecteer hetzelfde abonnement en de bijbehorende resourcegroep uit de vorige sectie.
- Voer een containernaam in
appcloudservice-container
. - Selecteer een regio die overeenkomt met de vorige locatieselectie .
- Selecteer Azure Container Registry voor de bron van de installatiekopieën.
- Selecteer het register op basis van de naam die u in de vorige stap hebt opgegeven.
- Selecteer de tag Afbeelding en Afbeelding.
- Selecteer Controleren + maken.
- Als de validatie is geslaagd, selecteert u Maken.
Het kan even duren voordat de resources zijn gemaakt, nadat u de knop Ga naar resource hebt gemaakt.
Zie Quickstart: Een Azure-containerinstantie maken voor meer informatie.
Servicefunctionaliteit controleren
Direct nadat de containerinstantie is gemaakt, wordt deze uitgevoerd.
Als u wilt controleren of uw werkrolservice correct werkt, gaat u naar Azure Portal in de resource van het containerexemplaren en selecteert u de optie Containers .
U ziet de containers en hun huidige status. In dit geval wordt het uitgevoerd. Selecteer Logboeken om de uitvoer van de .NET-werkservice weer te geven.
Als u wilt controleren of uw werkrolservice correct werkt, kunt u de logboeken van uw actieve toepassing bekijken. Gebruik de az container logs
opdracht:
az container logs -g <resource group> --name <instance name>
Geef de juiste waarden op:
<resource group>
: de naam van de resourcegroep die u in deze zelfstudie hebt gebruikt.<instance name>
: de naam van de containerinstantie.
U ziet de uitvoerlogboeken van de .NET-werkservice. Dit betekent dat u uw container-app hebt geïmplementeerd in ACI.