Inleiding tot .NET en Docker
Containers zijn een van de populairste manieren voor het implementeren en hosten van cloudtoepassingen, met hulpprogramma's zoals Docker, Kubernetes en Podman. Veel ontwikkelaars kiezen voor containers omdat het eenvoudig is om een app met de bijbehorende afhankelijkheden te verpakken en die app op betrouwbare wijze te laten uitvoeren op elke containerhost. Er is uitgebreide ondersteuning voor het gebruik van .NET met containers.
Docker biedt een goed overzicht van containers. Docker Desktop: Community Edition is een goed hulpmiddel voor het gebruik van containers op desktopcomputers voor ontwikkelaars.
.NET-installatiekopieën
Officiële .NET-containerinstallatiekopieën worden gepubliceerd naar de Microsoft-artefactregister en kunnen worden gedetecteerd op de Docker Hub. Er zijn runtime-installatiekopieën voor productie en SDK-installatiekopieën voor het bouwen van uw code, voor Linux (Alpine, Debian, Ubuntu, Mariner) en Windows. Zie .NET-containerinstallatiekopieën voor meer informatie.
.NET-installatiekopieën worden regelmatig bijgewerkt wanneer een nieuwe .NET-patch wordt gepubliceerd of wanneer een basisinstallatiekopieën van een besturingssysteem worden bijgewerkt.
Ge chiseled containerinstallatiekopieën zijn Ubuntu-containerinstallatiekopieën met een minimale set onderdelen die vereist zijn voor de .NET-runtime. Deze installatiekopieën zijn ~100 MB kleiner dan de reguliere Ubuntu-installatiekopieën en hebben minder CV's omdat ze minder onderdelen hebben. Ze bevatten met name geen shell of pakketbeheerder, waardoor hun beveiligingsprofiel aanzienlijk wordt verbeterd. Ze bevatten ook een niet-hoofdgebruiker en worden geconfigureerd met die gebruiker ingeschakeld.
Containerinstallatiekopieën bouwen
U kunt een containerinstallatiekopieën bouwen met een Dockerfile of afhankelijk zijn van de .NET SDK om een installatiekopieën te produceren. Zie dotnet/dotnet-docker en dotnet/sdk-container-builds voor voorbeelden van het bouwen van installatiekopieën.
In het volgende voorbeeld ziet u hoe u een containerinstallatiekopieën bouwt en uitvoert in een paar snelle stappen (ondersteund met .NET 8 en .NET 7.0.300).
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init
is een nieuwe optie voor ontwikkelaars die Dockerfiles willen gebruiken.
Poorten
Poorttoewijzing is een belangrijk onderdeel van het gebruik van containers. Poorten moeten buiten de container worden gepubliceerd om te kunnen reageren op externe webaanvragen. ASP.NET Core-containerinstallatiekopieën zijn gewijzigd in .NET 8 om standaard op poort 8080
te luisteren. .NET 6 en 7 luisteren op poort 80
.
In het vorige voorbeeld met docker run
wordt de hostpoort 8000
toegewezen aan de containerpoort 8080
. Kubernetes werkt op een vergelijkbare manier.
De ASPNETCORE_HTTP_PORTS
, ASPNETCORE_HTTPS_PORTS
en ASPNETCORE_URLS
omgevingsvariabelen kunnen worden gebruikt om dit gedrag te configureren.
Gebruikers
Vanaf .NET 8 bevatten alle installatiekopieën een niet-hoofdgebruiker met de naam app
. Geitelde installatiekopieën worden standaard geconfigureerd met deze gebruiker ingeschakeld. De publicatie-app als .NET-containerfunctie (gedemonstreerd in de sectie Containerinstallatiekopieën bouwen) configureert ook installatiekopieën waarvoor deze gebruiker standaard is ingeschakeld. In alle andere scenario's kan de app
gebruiker handmatig worden ingesteld, bijvoorbeeld met de USER
Dockerfile-instructie . Als een installatiekopie is geconfigureerd met app
en opdrachten moeten worden uitgevoerd als root
, kan de instructie worden gebruikt om de USER
gebruiker root
in te stellen op .
Op de hoogte blijven
Nieuws over containers wordt gepost in dotnet-/dotnet-docker-discussies en in de categorie .NET Blog Containers.
Azure-services
Verschillende Azure-services ondersteunen containers. U maakt een Docker-installatiekopieën voor uw toepassing en implementeert deze in een van de volgende services:
Azure Kubernetes Service (AKS)
Windows - en Linux-containers schalen en organiseren met Behulp van Kubernetes.Azure App Service
Web-apps of API's implementeren met behulp van containers in een PaaS-omgeving.Azure Container Apps
Voer uw containerworkloads uit zonder servers, indeling of infrastructuur te beheren en maak gebruik van systeemeigen ondersteuning voor Dapr en KEDA voor waarneembaarheid en schalen naar nul.Azure Container Instances
Maak afzonderlijke containers in de cloud zonder beheerservices op een hoger niveau.Azure Batch
Terugkerende rekentaken uitvoeren met behulp van containers.Azure Service Fabric
Lift, shift en moderniseer .NET-toepassingen naar microservices met behulp van Windows & Linux-containers.Azure Container Registry
Opslag en beheer van containerinstallatiekopieën in alle typen Azure-implementaties.