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 containersen
Docker biedt een geweldig overzicht van containers. Docker Desktop: Community Edition is een goed hulpmiddel voor het gebruik van containers op desktopcomputers voor ontwikkelaars.
.NET-afbeeldingen
Officiële .NET-containerinstallatiekopieën worden gepubliceerd naar het Microsoft Artifact Registry 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. Voor meer informatie, zie .NET-container-afbeeldingen.
.NET-installatiekopieën worden regelmatig bijgewerkt wanneer een nieuwe .NET-patch wordt gepubliceerd of wanneer een basisinstallatiekopieën van een besturingssysteem worden bijgewerkt.
Chiseled-containerafbeeldingen zijn Ubuntu-containerafbeeldingen met een minimale set onderdelen die vereist zijn voor de .NET-runtime. Deze installatiekopieën zijn ongeveer 100 MB kleiner dan de reguliere Ubuntu-installatiekopieën en hebben minder CVE'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-rootgebruiker en zijn geconfigureerd met die gebruiker ingeschakeld.
Containerafbeeldingen bouwen
U kunt een containerimage maken met een Dockerfile of vertrouwen op de .NET SDK om een imagete produceren. Zie dotnet/dotnet-docker en dotnet/sdk-container-buildsvoor voorbeelden van het bouwen van beelden.
In het volgende voorbeeld wordt gedemonstreerd hoe je een container-image kunt bouwen en uitvoeren in een paar snelle stappen (ondersteund door .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.
Havens
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 standaard gewijzigd in .NET 8 om te luisteren op poort 8080
. .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 afbeeldingen 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 instructie USER
Dockerfile. Als een installatiekopie is geconfigureerd met app
en opdrachten als root
moeten worden uitgevoerd, kan de USER
-instructie worden gebruikt om de gebruiker naar root
in te stellen.
Op de hoogte blijven
Containergerelateerd nieuws wordt gepost op dotnet-/dotnet-docker-discussies en in de categorie .NET-blog 'containers'.
Azure-diensten
Verschillende Azure-services ondersteunen containers. U maakt een Docker-image voor uw toepassing en implementeert deze in een van de volgende diensten:
Azure Kubernetes Service (AKS)
Windows & 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
Sla containerinstallatiekopieën op en beheer deze voor alle typen Azure-implementaties.