Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe u een .NET Worker-service implementeert in Azure. Als uw Worker wordt uitgevoerd als een Azure Container Instance (ACI) van de 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 handleiding leer je hoe je:
- Maak een worker service.
- Maak een resource voor het containerregister.
- Push een image naar de container registry.
- Uitrollen als containerinstantie.
- Controleer de functionaliteit van de worker service.
Aanbeveling
Alle voorbeeldbroncode 'Workers in .NET' is beschikbaar in de voorbeeldenbrowser om te downloaden. Zie Codevoorbeelden bekijken: Workers in .NET voor meer informatie.
Vereiste voorwaarden
- 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.0Docker 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 <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.
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 buildvoor 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 buildvoor 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 selecteerDocker-ondersteuning>. 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 set van uitgebreide instructies voor het bouwen van uw .NET Worker Service als een Docker-afbeelding. 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 Dockerfileniet 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@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"]
Opmerking
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-afbeeldingen.
De Docker-image bouwen
Als u de Docker-image wilt bouwen, moet de Docker Engine actief zijn.
Belangrijk
Wanneer u Docker Desktop en Visual Studio gebruikt, moet u ervoor zorgen dat volumedeling is ingeschakeld om fouten met betrekking tot volumedeling te voorkomen.
- Op het Instellingen scherm in Docker Desktop, selecteer Gedeelde stations.
- Selecteer de schijven die uw projectbestanden bevatten.
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 Image bouwen. Wanneer u wordt gevraagd om de afbeelding te taggen als, voert u het volgende in appcloudservice:latest. De uitvoerterminal van de Docker-taak wordt weergegeven en rapporteert de voortgang van de Docker-buildopdracht.
Opmerking
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 het dockerBuild/tag configuratie-item in de tasks array bij te 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.
Aanbeveling
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.
- Kies Beoordelen + creëren.
- Nadat validatie geslaagd is, selecteer Maken.
Belangrijk
Als u het containerregister wilt gebruiken bij het aanmaken van een containerinstantie, moet u de beheerder inschakelen. Selecteer Toegangssleutels en schakel Beheerder 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 worker-service wilt koppelen, maak er dan 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 gebruiker met beheerdersrechten is ingeschakeld. Dit is vereist voor Azure Container Instances.
Zie Quickstart: Een Azure-containerregister maken voor meer informatie.
Image naar containerregister uploaden
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 afbeelding 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.
Om een image naar het containerregister te 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 image naar het containerregister wilt pushen, gebruikt u de opdracht az acr build met de naam van het containerregister als <registry name>.
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 buildopdracht uit in de container registry resource tegen het Dockerfile. - Voegt de image toe aan het containerregister.
Om te verifiëren dat de afbeelding succesvol naar het containerregister is geüpload, navigeert u naar de Azure-portal. Open de containerregisterresource onder Services en selecteer Opslagplaatsen. U zou de afbeelding moeten zien.
Uitrollen als containerinstantie
Selecteer Docker in Visual Studio Code op de activiteitenbalk. Vouw het knooppunt REGISTERS uit en selecteer Register verbinden. 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 de REGISTRIES knoop uit, selecteer Azure, uw abonnement, het containerregister, de afbeelding en klik vervolgens met de rechtermuisknop op de tag. Selecteer Afbeelding implementeren naar 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 handleiding gebruikt hebt. -
<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, >.
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 als Image source.
- Selecteer het register op basis van de naam die u in de vorige stap hebt opgegeven.
- Selecteer de tag Afbeelding en Afbeelding.
- Kies Beoordelen + creëren.
- Als de validatie is geslaagd, selecteert u Maken.
Het kan even duren voordat de resources zijn aangemaakt. Zodra ze zijn aangemaakt, selecteert u de knop Ga naar resource.
Zie Quickstart: Een Azure-containerinstantie maken voor meer informatie.
Servicefunctionaliteit controleren
Meteen nadat de containerinstantie is gemaakt, wordt deze gestart.
Als u wilt controleren of uw worker service correct werkt, gaat u naar Azure Portal in de containerinstantie-resource 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 werkerservice correct werkt, kunt u de logboeken van uw draaiende toepassing bekijken. Gebruik de opdracht az container logs:
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 handleiding gebruikt hebt. -
<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.