Distribuera en arbetstjänst till Azure
I den här artikeln får du lära dig hur du distribuerar en .NET Worker-tjänst till Azure. När din worker körs som en Azure Container Instance (ACI) från Azure Container Registry (ACR) kan den fungera som en mikrotjänst i molnet. Det finns många användningsfall för långvariga tjänster och arbetartjänsten finns av den anledningen.
I den här självstudien lär du dig att:
- Skapa en arbetstjänst.
- Skapa en containerregisterresurs.
- Skicka en avbildning till containerregistret.
- Distribuera som containerinstans.
- Kontrollera arbetstjänstens funktioner.
Dricks
Alla exempelkällkoden "Arbetare i .NET" finns i exempelwebbläsaren för nedladdning. Mer information finns i Bläddra bland kodexempel: Arbetare i .NET.
Förutsättningar
- .NET 5.0 SDK eller senare.
- Docker Desktop (Windows eller Mac).
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Beroende på vilken utvecklingsmiljö du väljer:
Skapa ett nytt projekt
Om du vill skapa ett nytt Worker Service-projekt med Visual Studio väljer du Nytt>>filprojekt....I dialogrutan Skapa ett nytt projekt söker du efter "Arbetstjänst" och väljer Mall för Arbetstjänst. Ange önskat projektnamn, välj en lämplig plats och välj Nästa. På sidan Ytterligare information för Target Framework väljer du .NET 5.0
och markerar alternativet Aktivera Docker för att aktivera Docker-stöd. Välj önskat Docker-operativsystem.
Om du vill skapa ett nytt Worker Service-projekt med Visual Studio Code kan du köra .NET CLI-kommandon från den integrerade terminalen. Mer information finns i Visual Studio Code: Integrerad terminal.
Öppna den integrerade terminalen dotnet new
och kör kommandot och ersätt <Project.Name>
med önskat projektnamn.
dotnet new worker --name <Project.Name>
Mer information om kommandot .NET CLI new worker service project finns i dotnet new worker( dotnet new worker).
Om du vill skapa ett nytt Worker Service-projekt med .NET CLI öppnar du din favoritterminal i en arbetskatalog. dotnet new
Kör kommandot och ersätt <Project.Name>
med önskat projektnamn.
dotnet new worker --name <Project.Name>
Mer information om kommandot .NET CLI new worker service project finns i dotnet new worker( dotnet new worker).
Skapa programmet för att säkerställa att det återställer de beroende paketen och kompileras utan fel.
Om du vill skapa programmet från Visual Studio väljer du F6 eller väljer menyalternativet Skapa>lösning.
Om du vill skapa programmet från Visual Studio Code öppnar du det integrerade terminalfönstret och kör dotnet build
kommandot från arbetskatalogen.
dotnet build
Mer information om kompileringskommandot för .NET CLI finns i dotnet build
.
Om du vill skapa programmet från .NET CLI kör dotnet build
du kommandot från arbetskatalogen.
dotnet build <path/to/project.csproj>
Ange ditt <path/to/project.csproj>
värde, vilket är sökvägen till projektfilen som ska skapas. Mer information om kompileringskommandot för .NET CLI finns i dotnet build
.
Lägga till Docker-stöd
Om du har markerat kryssrutan Aktivera Docker när du skapar ett nytt Worker-projekt går du vidare till steget Skapa Docker-avbildningen .
Om du inte valde det här alternativet behöver du inte oroa dig – du kan fortfarande lägga till det nu. Högerklicka på projektnoden i Solution Explorer i Visual Studio och välj Lägg till>Docker-support. Du uppmanas att välja ett måloperativsystem. Välj OK med standardvalet för operativsystemet.
I Visual Studio Code behöver du Docker-tillägget och Azure-kontotilläggetinstallerat. Öppna kommandopaletten och välj alternativet Docker: Lägg till Docker-filer i arbetsytan . Om du uppmanas att välja Programplattform väljer du .NET: Core Console. Om du uppmanas att välja projekt väljer du det Arbetstjänstprojekt som du skapade. När du uppmanas att välja operativsystem väljer du det första operativsystem som visas. När du tillfrågas om du vill inkludera valfria Docker Compose-filer eller inte väljer du Nej.
Docker-stöd kräver en Dockerfile. Den här filen är en uppsättning omfattande instruktioner för att skapa .NET Worker Service som en Docker-avbildning. Dockerfile är en fil utan filnamnstillägg. Följande kod är ett exempel på Dockerfile och bör finnas i rotkatalogen för projektfilen.
Med CLI skapas inte Dockerfile åt dig. Kopiera innehållet till en ny fil med namnet Dockerfile i projektets rotkatalog.
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"]
Kommentar
Du måste uppdatera de olika raderna i Dockerfile som refererar till *App.CloudService – ersätt detta med namnet på projektet.
Mer information om de officiella .NET-avbildningarna finns i Docker Hub: .NET Runtime och Docker Hub: .NET SDK.
Skapa Docker-avbildningen
Om du vill skapa Docker-avbildningen måste Docker-motorn köras.
Viktigt!
När du använder Docker Desktop och Visual Studio bör du undvika fel som rör volymdelning – se till att den är aktiverad.
- På skärmen Inställningar i Docker Desktop väljer du Delade enheter.
- Välj de enheter som innehåller dina projektfiler.
Mer information finns i Felsöka Visual Studio-utveckling med Docker.
Högerklicka på Dockerfile i Solution Explorer och välj Skapa Docker-avbildning. Fönstret Utdata visar och rapporterar kommandots docker build
förlopp.
Högerklicka på Dockerfile i Utforskaren och välj Skapa avbildning. När du uppmanas att tagga avbildningen som anger du appcloudservice:latest
. Docker-aktivitetsutdataterminalen visas och rapporterar docker build-kommandots förlopp.
Kommentar
Om du inte uppmanas att tagga avbildningen är det möjligt att Visual Studio Code förlitar sig på en befintlig tasks.json. Om taggen som används är oönskad kan du ändra den docker-build
genom att uppdatera konfigurationsobjektets dockerBuild/tag
värde i matrisen tasks
. Överväg följande exempelkonfigurationsavsnitt:
{
"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"
}
}
Öppna ett terminalfönster i rotkatalogen för Dockerfile och kör följande docker-kommando:
docker build -t appcloudservice:latest -f Dockerfile .
docker build
När kommandot körs bearbetas varje rad i Dockerfile som ett instruktionssteg. Det här kommandot skapar avbildningen och skapar en lokal lagringsplats med namnet appcloudservice som pekar på avbildningen.
Dricks
Den genererade Dockerfile skiljer sig mellan utvecklingsmiljöer. Om du till exempel lägger till Docker-stöd från Visual Studio kan det uppstå problem om du försöker skapa Docker-avbildningen från Visual Studio Code, eftersom Dockerfile-stegen varierar. Det är bäst att välja en enda utvecklingsmiljö och använda den i den här självstudien.
Skapa containerregister
Med en Azure Container Registry-resurs (ACR) kan du skapa, lagra och hantera containeravbildningar och artefakter i ett privat register. Om du vill skapa ett containerregister måste du skapa en ny resurs i Azure-portalen.
- Välj prenumerationen och motsvarande resursgrupp (eller skapa en ny).
- Ange ett registernamn.
- Välj en plats.
- Välj en lämplig SKU, till exempel Basic.
- Välj Granska + skapa.
- När valideringen har godkänts väljer du Skapa.
Viktigt!
För att kunna använda det här containerregistret när du skapar en containerinstans måste du aktivera administratörsanvändare. Välj Åtkomstnycklar och aktivera Administratörsanvändare.
Med en Azure Container Registry-resurs (ACR) kan du skapa, lagra och hantera containeravbildningar och artefakter i ett privat register. Öppna ett terminalfönster i rotkatalogen för Dockerfile och kör följande Azure CLI-kommando:
Viktigt!
Om du vill interagera med Azure-resurser från Azure CLI måste du autentiseras för terminalsessionen. Använd kommandot för att autentisera az login
:
az login
När du har loggat in använder az account set
du kommandot för att ange din prenumeration när du har fler än en och ingen standardprenumeration har angetts.
az account set --subscription <subscription name or id>
När du har loggat in på Azure CLI kan sessionen interagera med resurser i enlighet med detta.
Om du inte redan har en resursgrupp som du vill associera arbetstjänsten med skapar du en med az group create
kommandot :
az group create -n <resource group> -l <location>
<resource group>
Ange namnet och <location>
. Om du vill skapa ett containerregister anropar du az acr create
kommandot.
az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true
Ersätt platshållarna med dina egna lämpliga värden:
<registry name>
: registrets namn.<resource group>
: resursgruppens namn som du använde.<sku>
: accepterade värden, Basic, Classic, Premium eller Standard.
Kommandot ovan:
- Skapar ett Azure Container Registry, givet ett registernamn, i den angivna resursgruppen.
- Aktiverade en administratörsanvändare – detta krävs för Azure Container Instances.
Mer information finns i Snabbstart: Skapa ett Azure-containerregister.
Skicka avbildningen till containerregistret
När .NET Docker-avbildningen har skapats och containerregisterresursen har skapats kan du nu skicka avbildningen till containerregistret.
Högerklicka på projektet i Solution Explorer och välj Publicera. Dialogrutan Publicera visas. Som Mål väljer du Azure och sedan Nästa.
Som Specifikt mål väljer du Azure Container Registry och sedan Nästa.
Välj sedan det prenumerationsnamn som du använde för att skapa ACR-resursen för Container Registry. I urvalsområdet Containerregister väljer du det containerregister som du skapade och väljer sedan Slutför.
Då skapas en publiceringsprofil som kan användas för att publicera avbildningen till containerregistret. Välj knappen Publicera för att skicka avbildningen till containerregistret, utdatafönstret rapporterar publiceringsförloppet. När den har slutförts visas meddelandet "Har publicerats".
Välj Docker i aktivitetsfälteti Visual Studio Code. Expandera panelen BILDER trädvy, expandera sedan bildnoden appcloudservice
och högerklicka på taggenlatest
.
Det integrerade terminalfönstret rapporterar förloppet för docker push
kommandot till containerregistret.
Om du vill skicka en avbildning till containerregistret måste du logga in på registret först:
az acr login -n <registry name>
Kommandot az acr login
loggar in i ett containerregister via Docker CLI. Om du vill skicka avbildningen till containerregistret använder du kommandot az acr build med containerregistrets namn som <registry name>
:
az acr build -r <registry name> -t appcloudservice .
Kommandot ovan:
- Packar in källan i en tar-fil .
- Laddar upp den till containerregistret.
- Containerregistret packar upp tar-filen .
docker build
Kör kommandot i containerregisterresursen mot Dockerfile.- Lägger till avbildningen i containerregistret.
Om du vill kontrollera att avbildningen har överförts till containerregistret går du till Azure-portalen. Öppna containerregisterresursen under Tjänster och välj Lagringsplatser. Du bör se bilden.
Distribuera som containerinstans
I Visual Studio Code väljer du Docker i aktivitetsfältet. Expandera noden REGISTRIES och välj Anslut Registry. Välj Azure när du uppmanas att göra det och logga in om det behövs.
Viktigt!
Distribution som en containerinstans från Visual Studio Code fungerar inte längre på Mac. Mer information finns i GitHub: Om Docker-tillägget för Visual Studio Code.
Expandera noden REGISTRIES, välj Azure, din prenumeration > containerregistret > avbildningen och högerklicka sedan på taggen. Välj Distribuera avbildning till Azure Container Instances.
Skapa en containerinstans genom att först skapa en containergrupp med kommandot az container create
.
az container create -g <resource group> \
--name <instance name> \
--image <registry name>.azurecr.io/<image name>:latest \
--registry-password <password>
Ange lämpliga värden:
<resource group>
: resursgruppens namn som du har använt i den här självstudien.<instance name>
: namnet på containerinstansen.<registry name>
: namnet på containerregistret.<image name>
: namnet på avbildningen.<password>
: lösenordet till containerregistret – du kan hämta det från Azure-portalen, åtkomstnycklar för containerregisterresurser>.
Om du vill skapa en containerinstans måste du också skapa en ny resurs i Azure-portalen.
- Välj samma prenumeration och motsvarande resursgrupp i föregående avsnitt.
- Ange ett containernamn –
appcloudservice-container
. - Välj en region som motsvarar föregående platsval .
- Som Avbildningskälla väljer du Azure Container Registry.
- Välj registret efter det namn som angavs i föregående steg.
- Välj taggen Bild och Bild.
- Välj Granska + skapa.
- Om verifieringen har godkänts väljer du Skapa.
Det kan ta en stund innan resurserna skapas. När de har skapats väljer du knappen Gå till resurs .
Mer information finns i Snabbstart: Skapa en Azure-containerinstans.
Verifiera tjänstfunktioner
Omedelbart efter att containerinstansen har skapats börjar den köras.
Om du vill kontrollera att arbetstjänsten fungerar korrekt går du till Azure-portalen i containerinstansresursen och väljer alternativet Containrar .
Du ser containrarna och deras aktuella tillstånd. I det här fallet körs den. Välj Loggar för att se .NET-arbetstjänstens utdata.
Om du vill kontrollera att arbetstjänsten fungerar korrekt kan du visa loggarna från ditt program som körs. az container logs
Använd kommandot:
az container logs -g <resource group> --name <instance name>
Ange lämpliga värden:
<resource group>
: resursgruppens namn som du har använt i den här självstudien.<instance name>
: namnet på containerinstansen.
Du ser utdataloggarna för .NET-arbetstjänsten, vilket innebär att du har distribuerat din containerbaserade app till ACI.