Share via


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 8080te luisteren. .NET 6 en 7 luisteren op poort 80.

In het vorige voorbeeld met docker runwordt de hostpoort 8000 toegewezen aan de containerpoort 8080. Kubernetes werkt op een vergelijkbare manier.

De ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTSen 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 USERDockerfile-instructie . Als een installatiekopie is geconfigureerd met app en opdrachten moeten worden uitgevoerd als root, kan de instructie worden gebruikt om de USER gebruiker rootin 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.

Volgende stappen