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-rootgebruiker
- Debian 12
- Geoptimaliseerde Ubuntu-afbeeldingen
- Multi-platform containerafbeeldingen bouwen
- ASP.NET samengestelde afbeeldingen
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-root
uitvoeren.
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-root
zijn. 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
- prestaties en compatibiliteit
- verificatie
- Publiceren naar tar.gz archief
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.