Delen 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 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 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 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 USERDockerfile. Als een installatiekopie is geconfigureerd met app en opdrachten als rootmoeten worden uitgevoerd, kan de USER-instructie worden gebruikt om de gebruiker naar rootin 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.

Volgende stappen