Delen via


Wat is er nieuw in containers voor .NET 8

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

Containerinstallatiekopieën

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 non-root geschikt. 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 64198. Deze omgevingsvariabele is handig voor de Kubernetes-test runAsNonRoot . Hiervoor moet de containergebruiker worden ingesteld via UID en niet op naam. Dit dockerfile toont een voorbeeldgebruik.

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 te vereenvoudigen. De variabele accepteert een lijst met poorten, wat eenvoudiger is dan de indeling die vereist is voor ASPNETCORE_URLS. Als u de poort weer wijzigt in de poort 80 met behulp van een van deze variabelen, kunt u niet als non-rootuitvoeren.

Zie De standaardpoort ASP.NET Core is gewijzigd van 80 tot 8080 en nieuwe niet-hoofdgebruiker voor app in Linux-installatiekopieën voor meer informatie.

Debian 12

De containerinstallatiekopieën gebruiken nu Debian 12 (Bookworm). Debian is de standaard linux-distributie in de .NET-containerinstallatiekopieën.

Zie Debian-containerinstallatiekopieën die zijn bijgewerkt naar Debian 12 voor meer informatie.

Ge chiseled Ubuntu-installatiekopieën

Ge chiseled Ubuntu-installatiekopieën zijn beschikbaar voor .NET 8. Beitelde afbeeldingen hebben een verminderd aangevallen oppervlak omdat ze ultrakleijn zijn, geen pakketbeheerder of shell hebben en dat zijn non-root. Dit type installatiekopie is bedoeld voor ontwikkelaars die het voordeel willen hebben van computing in apparaatstijl.

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

Zie Globalization Test App voor meer informatie over globalisatie en containers.

Containerinstallatiekopieën met meerdere platforms bouwen

Docker ondersteunt het gebruik en bouwen van installatiekopieën met meerdere platforms die in meerdere omgevingen werken. .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 u zich wilt richten op een x64-cloudservice in Azure, kunt u de installatiekopieën als volgt bouwen met behulp van de --platform switch:

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

De .NET SDK ondersteunt $TARGETARCH nu waarden en het -a argument 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 het blogbericht Over het verbeteren van containerondersteuning voor meerdere platforms 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. Dit samengestelde is gebouwd door meerdere MSIL-assembly's te compileren in één kant-en-klaar uitvoerbestand (R2R). Omdat deze assembly's zijn ingesloten in één installatiekopieën, neemt het jitting minder tijd in beslag en worden de opstartprestaties 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. Omdat composites meerdere assembly's hebben ingesloten in één, hebben ze een strakkere versiekoppeling. Apps kunnen geen aangepaste versies van framework of ASP.NET binaire bestanden gebruiken.

Samengestelde installatiekopieën zijn beschikbaar voor de Alpine Linux-, Ubuntu-,chiseled- en Mariner Distroless-platformen vanuit de mcr.microsoft.com/dotnet/aspnet opslagplaats. De tags worden weergegeven met het -composite achtervoegsel op de ASP.NET Docker-pagina.

Containerpublicatie

Standaardinstellingen voor gegenereerde installatiekopieën

dotnet publish kan containerinstallatiekopieën produceren. Het is standaard ingesteld op het produceren van non-root installatiekopieën, waardoor uw apps standaard veilig blijven. Wijzig deze standaardinstelling op elk gewenst moment door bijvoorbeeld de ContainerUser juiste instelling rootin te stellen.

De standaarduitvoercontainertag is nu latest. Deze standaardwaarde is in overeenstemming met andere hulpprogramma's in de containersruimte en maakt containers eenvoudiger te gebruiken in interne ontwikkelingslussen.

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.

Verificatie

.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 pushen naar registers zoals Azure Container Registry zonder verificatiefouten. In de volgende opdrachten ziet u een voorbeeld van een publicatiestroom:

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

Zie Een .NET-app containeriseren met dotnet publish voor meer informatie over het containeriseren van .NET-apps.

Publiceren naar tar.gz archief

Vanaf .NET 8 kunt u rechtstreeks als een tar.gz archief een container maken. 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 ContainerArchiveOutputPath eigenschap toe aan uw dotnet publish opdracht, 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