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 inkluderar 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 non-root användaren, som är 64198. Den här miljövariabeln är användbar för Kubernetes-testet runAsNonRoot , 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 porten 80 med någon av dessa variabler kan du inte köra som non-root.

Mer information finns i Standard-ASP.NET Core-porten har ändrats från 80 till 8080 och Ny icke-rotbaserad appanvä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 Debians containeravbildningar uppgraderade till Debian 12.

Mejslade Ubuntu-bilder

Mejslade Ubuntu-avbildningar är tillgängliga för .NET 8. Mejslade bilder har en reducerad attackerad yta eftersom de är extremt små, inte har någon pakethanterare eller gränssnitt och är non-root. Den här typen av avbildning är till för utvecklare som vill ha nytta av datoranvändning i installationsstil.

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

Mer information om globalisering och containrar finns i Globaliseringstestapp.

Skapa containeravbildningar för flera plattformar

Docker stöder användning och skapande av avbildningar på 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 $TARGETARCH nu värden och -a argumentet 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ättra stöd för flerplattformscontainer.

ASP.NET sammansatta bilder

Som en del av arbetet med att förbättra prestandan för containerinkapslade objekt är nya ASP.NET Docker-avbildningar tillgängliga som har en sammansatt version av körningen. Den här kompositen skapas genom att flera MSIL-sammansättningar kompileras till en enda R2R-utdatabinär (ready-to-run). Eftersom dessa sammansättningar är inbäddade i en enda bild tar jitting 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 kompositmaterial har flera sammansättningar inbäddade i en, har de en snävare versionskoppling. Appar kan inte använda anpassade versioner av ramverk eller ASP.NET binärfiler.

Sammansatta avbildningar är tillgängliga för plattformarna Alpine Linux, Ubuntu ("jammy") Mejslade och Mariner Distroless från mcr.microsoft.com/dotnet/aspnet lagringsplatsen. Taggarna visas med suffixet -composite på sidan ASP.NET Docker.

Containerpublicering

Standardvärden för genererad avbildning

dotnet publish kan skapa containeravbildningar. Det är standard att producera non-root bilder, vilket hjälper dina appar att vara säkra som standard. Ändra den här standardinställningen ContainerUser när som helst genom att ange korrekt, 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. Speedup kommer från push-skikt i en åtgärd och, för register som inte stöder atomiska uppladdningar, en mer tillförlitlig segmenteringsmekanism.

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 Containerisera en .NET-app med dotnet publish.

Publicera till 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 i ContainerArchiveOutputPath 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