Dela via


Nyheter i containrar för .NET 8

Den här artikeln beskriver nya funktioner i containrar för .NET 8.

Containeravbildningar

Följande ändringar har gjorts i .NET-containeravbildningar för .NET 8:

Icke-rotanvändare

Bilder innehåller en non-root-användare. Den här användaren gör bilderna non-root kompatibla. Om du vill köra som non-rootlägger du till följande rad i slutet av Dockerfile (eller en liknande instruktion i Kubernetes-manifestet):

USER app

.NET 8 lägger till en miljövariabel för UID för den non-root användaren, som är 1654. Den här miljövariabeln är användbar för Kubernetes runAsNonRoot-testet, vilket kräver att containeranvändaren anges via UID och inte efter namn. Den här dockerfile- visar ett exempel på användning.

Standardporten ändrades också från port 80 till 8080. För att stödja den här ändringen är en ny miljövariabel ASPNETCORE_HTTP_PORTS tillgänglig för att göra det enklare att ändra portar. Variabeln accepterar en lista med portar, vilket är enklare än det format som krävs av ASPNETCORE_URLS. Om du ändrar porten tillbaka till port 80 med någon av dessa variabler kan du inte köra som non-root.

För mer information, se Standardporten för ASP.NET Core har ändrats från 80 till 8080 och Ny icke-root 'app'-användare i Linux-avbildningar.

Debian 12

Containeravbildningarna använder nu Debian 12 (Bookworm). Debian är standarddistributionen av Linux i .NET-containeravbildningarna.

Mer information finns i Debian containerbilder uppgraderade till Debian 12.

Mejslade Ubuntu-bilder

Skulpterade Ubuntu-avbildningar finns tillgängliga för .NET 8. Mejslade bilder har en minskad attackyta eftersom de är extremt små, saknar både pakethanterare och skal, och är non-root. Den här typen av bild är till för utvecklare som vill ha nytta av apparatliknande datorkapacitet.

Mejslade bilder stöder inte globalisering som standard. extra bilder tillhandahålls, vilka inkluderar icu- och tzdata-paketen.

Mer information om globalisering och containrar finns i Globaliseringstestapp.

Skapa containeravbildningar för flera plattformar

Docker har stöd för att använda och skapa avbildningar med flera plattformar som fungerar i flera miljöer. .NET 8 introducerar ett nytt mönster som gör att du kan blanda och matcha arkitekturer med de .NET-avbildningar som du skapar. Om du till exempel använder macOS och vill rikta in dig på en x64-molntjänst i Azure kan du skapa avbildningen med hjälp av växeln --platform på följande sätt:

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

.NET SDK stöder nu $TARGETARCH värden och argumentet -a vid återställning. Följande kodfragment visar ett exempel:

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

Mer information finns i blogginlägget Förbättringar av stöd för container över flera plattformar.

ASP.NET sammansatta bilder

Som en del av arbetet med att förbättra prestanda för containerisering, är nya ASP.NET Docker-avbildningar tillgängliga som har en sammansatt version av körmiljön. Den här kompositen skapas genom att flera CIL-sammansättningar kompileras till en enda R2R-utdatabinär (ready-to-run). Eftersom dessa assembly-komponenter är inbäddade i en enda avbild tar kompileringsprocessen mindre tid och apparnas startprestanda förbättras. Den andra stora fördelen med kompositen jämfört med den vanliga ASP.NET bilden är att de sammansatta bilderna har en mindre storlek på disken.

Det finns en varning att vara medveten om. Eftersom kompositer har flera sammanställningar inbäddade i en, har de snävare versionskoppling. Appar kan inte använda anpassade versioner av ramverk eller ASP.NET binärfiler.

Kompositbilder finns tillgängliga för plattformarna Alpine Linux, Ubuntu ("jammy") Mejslade och Mariner Distroless från mcr.microsoft.com/dotnet/aspnet-förrådet. Taggarna visas med suffixet -compositeASP.NET Docker-sidan.

Containerpublicering

Standardvärden för genererad avbildning

dotnet publish kan skapa containeravbildningar. Den producerar som standard non-root bilder, vilket hjälper dina appar att hålla sig säkra som standard. Ändra den här standardinställningen när som helst genom att ange egenskapen ContainerUser, till exempel med root.

Standardtaggen för utdatacontainer är nu latest. Den här standardinställningen är i linje med andra verktyg i containrarnas utrymme och gör containrar enklare att använda i inre utvecklingsslingor.

Prestanda och kompatibilitet

.NET 8 har bättre prestanda för att skicka containrar till fjärrregister, särskilt Azure-register. Hastighetsökning kommer från att skikt pressas i en åtgärd och, för register som inte stöder atomiala uppladdningar, en mer tillförlitlig uppdelningsmekanism.

Dessa förbättringar innebär också att fler register stöds: Harbor, Artifactory, Quay.io och Podman.

Autentisering

.NET 8 lägger till stöd för OAuth-tokenutbytesautentisering (Azure Managed Identity) när containrar skickas till register. Det här stödet innebär att du nu kan skicka till register som Azure Container Registry utan autentiseringsfel. Följande kommandon visar ett exempel på ett publiceringsflöde:

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

Mer information om hur du containeriserar .NET-appar finns i Containerize a .NET app with dotnet publish.

Exportera till ett tar.gz-arkiv

Från och med .NET 8 kan du skapa en container direkt som ett tar.gz arkiv. Den här funktionen är användbar om arbetsflödet inte är enkelt och kräver att du till exempel kör ett genomsökningsverktyg över dina bilder innan du push-överför dem. När arkivet har skapats kan du flytta det, skanna det eller läsa in det i en lokal Docker-verktygskedja.

Om du vill publicera i ett arkiv lägger du till egenskapen ContainerArchiveOutputPath i kommandot dotnet publish, till exempel:

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

Du kan ange antingen ett mappnamn eller en sökväg med ett specifikt filnamn.

Se även