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
- Debian 12
- Ge chiseled Ubuntu-installatiekopieën
- Containerinstallatiekopieën met meerdere platforms bouwen
- samengestelde afbeeldingen ASP.NET
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-root
uitvoeren.
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
- Prestaties en compatibiliteit
- Verificatie
- Publiceren naar tar.gz archief
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 root
in 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.