Delen via


Wat is er nieuw in containers voor .NET 8

In dit artikel worden nieuwe functies in containers voor .NET 8 beschreven.

Containerafbeeldingen

De volgende wijzigingen zijn aangebracht in .NET-containerinstallatiekopieën voor .NET 8:

Niet-hoofdgebruiker

Afbeeldingen bevatten een non-root gebruiker. Deze gebruiker maakt de afbeeldingen compatibel met non-root. Als u wilt uitvoeren als non-root, voegt u de volgende regel toe aan het einde van uw Dockerfile (of een vergelijkbare instructie in uw Kubernetes-manifesten):

USER app

.NET 8 voegt een omgevingsvariabele toe voor de UID voor de non-root gebruiker, namelijk 1654. Deze omgevingsvariabele is handig voor de Kubernetes-runAsNonRoot-test. Hiervoor moet de containergebruiker worden ingesteld via UID en niet op naam. In dit dockerfile wordt een voorbeeldgebruik weergegeven.

De standaardpoort is ook gewijzigd van poort 80 in 8080. Ter ondersteuning van deze wijziging is er een nieuwe omgevingsvariabele ASPNETCORE_HTTP_PORTS beschikbaar om het wijzigen van poorten gemakkelijker te maken. De variabele accepteert een lijst met poorten, wat eenvoudiger is dan de indeling die is vereist voor ASPNETCORE_URLS. Als u de poort weer wijzigt in poort 80 met behulp van een van deze variabelen, kunt u niet als non-rootuitvoeren.

Zie voor meer informatie Standaardpoort voor ASP.NET Core is gewijzigd van 80 naar 8080 en Nieuwe niet-hoofdgebruiker 'app' in Linux-afbeeldingen.

Debian 12

De containerafbeeldingen gebruiken nu Debian 12 (Boekworm). Debian is de standaard Linux-distributie in de .NET-containerafbeeldingen.

Voor meer informatie, zie Debian container images bijgewerkt naar Debian 12.

Beveiligde Ubuntu-images

Chiseled Ubuntu-afbeeldingen zijn beschikbaar voor .NET 8. Beitelde afbeeldingen hebben een verminderd aanvaloppervlak omdat ze ultraklein zijn, geen pakketbeheerder of shell hebben en non-rootzijn. Dit type installatiekopie is bedoeld voor ontwikkelaars die het voordeel willen hebben van computing in apparaatstijl.

Ge chiseled afbeeldingen ondersteunen standaard geen globalisering. extra afbeeldingen worden geleverd, waaronder icu- en tzdata-pakketten.

Zie Globalization Test Appvoor meer informatie over globalisatie en containers.

Containerinstallatiekopieën met meerdere platforms bouwen

Docker ondersteunt het gebruik en bouwen van afbeeldingen met meerdere platforms die in meerdere omgevingen functioneren. .NET 8 introduceert een nieuw patroon waarmee u architecturen kunt combineren en vergelijken met de .NET-installatiekopieën die u bouwt. Als u bijvoorbeeld macOS gebruikt en een x64-cloudservice in Azure wilt targeten, kunt u het image als volgt bouwen door de --platform-switch te gebruiken:

docker build --pull -t app --platform linux/amd64

De .NET SDK ondersteunt nu $TARGETARCH waarden en het argument -a voor herstellen. In het volgende codefragment ziet u een voorbeeld:

RUN dotnet restore -a $TARGETARCH

# Copy everything else and build app.
COPY aspnetapp/. .
RUN dotnet publish -a $TARGETARCH --self-contained false --no-restore -o /app

Zie de blogpost Het verbeteren van ondersteuning voor meerdere platformcontainers voor meer informatie.

samengestelde afbeeldingen ASP.NET

Als onderdeel van een poging om de containerisatieprestaties te verbeteren, zijn er nieuwe ASP.NET Docker-installatiekopieën beschikbaar die een samengestelde versie van de runtime hebben. Deze samenstelling is gebouwd door meerdere CIL-assemblages te compileren in één klaar-voor-gebruik output-binary (R2R). Omdat deze assembly's zijn ingesloten in één imagebestand, neemt de jitting minder tijd in beslag en worden de startprestaties van apps verbeterd. Het andere grote voordeel van het samengestelde ten opzichte van de normale ASP.NET-installatiekopieën is dat de samengestelde installatiekopieën een kleinere grootte op schijf hebben.

Er is een kanttekening om rekening mee te houden. Aangezien composieten meerdere samenstellingen in één hebben geïntegreerd, hebben ze een nauwere versiekoppeling. Apps kunnen geen aangepaste versies van framework of ASP.NET binaire bestanden gebruiken.

Samengestelde installatiekopieën zijn beschikbaar voor de platforms Alpine Linux, Ubuntu ("jammy") Chiseled, en Mariner Distroless vanuit de mcr.microsoft.com/dotnet/aspnet repository. De tags worden weergegeven met het achtervoegsel -composite op de ASP.NET Docker-pagina.

Containerpublicatie

Standaardinstellingen voor gegenereerde afbeeldingen

dotnet publish kan containerafbeeldingen produceren. Standaard worden non-root afbeeldingengeproduceerd, zodat uw apps bij standaardinstelling veilig blijven. U kunt deze standaardinstelling op elk gewenst moment wijzigen door de eigenschap ContainerUser in te stellen, bijvoorbeeld met root.

De standaardtag voor uitvoercontainers is nu latest. Deze standaardwaarde is in overeenstemming met andere hulpprogramma's in de containeromgeving en maakt containers eenvoudiger te gebruiken in interne ontwikkelingscycli.

Prestaties en compatibiliteit

.NET 8 heeft de prestaties voor het pushen van containers naar externe registers verbeterd, met name Azure-registers. Snelheid komt van het pushen van lagen in één bewerking en, voor registers die geen ondersteuning bieden voor atomische uploads, een betrouwbaarder segmenteringsmechanisme.

Deze verbeteringen betekenen ook dat er meer registers worden ondersteund: Harbor, Artifactory, Quay.io en Podman.

Authenticatie

.NET 8 voegt ondersteuning toe voor OAuth-tokenuitwisselingsverificatie (Azure Managed Identity) bij het pushen van containers naar registers. Deze ondersteuning betekent dat u nu kunt uploaden naar registraties zoals Azure Container Registry zonder verificatiefouten. In de volgende commando's ziet u een voorbeeld van een publicatiestroom.

> az acr login -n <your registry name>
> dotnet publish -r linux-x64 -p PublishProfile=DefaultContainer

Zie voor meer informatie over het containeriseren van .NET-apps de beschrijving Containeriseer een .NET-app met dotnet publish.

Publiceren naar tar.gz archief

Vanaf .NET 8 kunt u rechtstreeks een container maken als een tar.gz archief. Deze functie is handig als uw werkstroom niet eenvoudig is en u bijvoorbeeld een scanprogramma voor uw afbeeldingen moet uitvoeren voordat u ze pusht. Zodra het archief is gemaakt, kunt u het verplaatsen, scannen of laden in een lokale Docker-hulpprogrammaketen.

Als u naar een archief wilt publiceren, voegt u de eigenschap ContainerArchiveOutputPath toe aan de opdracht dotnet publish, bijvoorbeeld:

dotnet publish \
  -p PublishProfile=DefaultContainer \
  -p ContainerArchiveOutputPath=./images/sdk-container-demo.tar.gz

U kunt een mapnaam of een pad met een specifieke bestandsnaam opgeven.

Zie ook