Een .NET-app uitvoeren in Docker

0
181

Docker is een containerisatieservice, die wordt gebruikt voor het uitvoeren van applicaties in geïsoleerde omgevingen verpakt met alle afhankelijkheden en code die het nodig heeft om te functioneren. Het kan allerlei toepassingen uitvoeren, inclusief op .NET gebaseerde programma's met behulp van door Microsoft geleverde runtime-images.

Dockerizing .NET

Microsoft biedt vooraf gebouwde basisimages voor het uitvoeren van .NET-toepassingen. U hoeft de .NET-runtime of SDK niet in uw Docker-container te installeren, omdat u eenvoudig kunt uitbreiden vanuit de basisimage van Microsoft voor de versie van .NET die uw toepassing gebruikt.

< p>

Tenzij u van plan bent Windows-containers op een Windows-server te implementeren, moet u .NET Core of .NET 5 gebruiken. De oudere .NET Framework-runtime is niet platformonafhankelijk en werkt niet op Linux-gebaseerde containers.

Als Docker niet op uw ontwikkelmachine is geïnstalleerd, moet u Docker Desktop installeren om toegang te krijgen tot de CLI. Als je WSL op Windows gebruikt, moet je de op WSL 2 gebaseerde engine inschakelen, die betere prestaties levert.

Om dingen uit te testen, zullen we een nieuwe ASP.NET API-toepassing maken. Dezelfde algemene procedure is van toepassing op elk soort applicatie, aangezien Docker alleen een build uitvoert wanneer u de container bouwt en uw applicatie start met een entrypoint-opdracht.

Advertentie

Maak een nieuw bestand met de naam Dockerfile in de hoofdmap van uw project, waar uw oplossing bevindt zich. Plak in de volgende configuratie:

VAN mcr.microsoft.com/dotnet/core/sdk AS build-env WORKDIR /app # Kopieer csproj en herstel COPY *.csproj ./RUN dotnet restore # Kopieer al het andere en bouw COPY . ./RUN dotnet publish -o out # Bouw runtime-image van mcr.microsoft.com/dotnet/core/runtime WORKDIR /app COPY –from=build-env /app/out . ENTRYPOINT [“dotnet”, “DockerTest.dll”]

Dit Docker-bestand haalt de .NET Core SDK-image op om de build uit te voeren. Het kopieert de .csproj over en herstelt, kopieert vervolgens al het andere en voert een build uit. Vervolgens bouwt het een nieuwe image van de .NET Runtime-image en kopieert de build-artefacten.

Ten slotte wordt het toegangspunt hier gedefinieerd als dotnet DockerTest.dll. Hiermee wordt de ASP.NET-webserver gestart, hoewel u mogelijk de parameters voor uw toepassing moet wijzigen of een geheel ander ingangspuntcommando moet opgeven.

U kunt uw container testen met docker-containerrun en deze doorgeven in de ID van de buildcontainer:

docker container run containerid

Voor een ASP.NET-toepassing moet u poorten openen door een poort op de host toe te wijzen aan een poort op de container:

docker run -p 80:80 containerid

U kunt onze gids voor het werken met Docker en Dockerfiles voor meer informatie.