Megosztás a következőn keresztül:


A .NET 8 tárolóinak újdonságai

Ez a cikk a .NET 8 tárolóinak új funkcióit ismerteti.

Konténerképek

A .NET 8.NET-tárolórendszerképek esetében a következő módosítások történtek:

Nem rendszergazda felhasználó

A képeken egy non-root felhasználó is szerepel. Ez a felhasználó képessé teszi a képeket non-root. Ha non-rootszeretne futni, adja hozzá a következő sort a Dockerfile végéhez (vagy egy hasonló utasítást a Kubernetes-jegyzékekben):

USER app

A .NET 8 hozzáad egy környezeti változót a non-root felhasználó UID-éhez, amely 1654. Ez a környezeti változó a Kubernetes runAsNonRoot teszthez hasznos, amelyhez a tárolófelhasználót nem név, hanem UID használatával kell beállítani. Ez a dockerfile egy példahasználatot jelenít meg.

Az alapértelmezett port 80 portról 8080-ra is módosult. A változás támogatásához elérhető egy új környezeti változó ASPNETCORE_HTTP_PORTS, amely megkönnyíti a portok módosítását. A változó elfogadja a portok listáját, amely egyszerűbb, mint a ASPNETCORE_URLSáltal megkövetelt formátum. Ha ezen változók egyikével visszaállítja a portot 80 portra, akkor nem tud non-root-ként futni.

További információ: Alapértelmezett ASP.NET Core-port 80-ról 8080-ra módosult és Új, nem gyökérszintű "alkalmazás" felhasználó linuxos lemezképekben.

Debian 12

A konténerképek mostantól Debian 12 (Bookworm)használnak. A Debian az alapértelmezett Linux-disztribúció a .NET-tárolólemezképekben.

További információért lásd: Debian tárolórendszer képei, Debian 12-re frissítve.

Finoman megmunkált Ubuntu-képek

vésett Ubuntu-képek érhetők el a .NET 8-hoz. A chiseled képek támadási felülete csökkent, mert rendkívül kicsik, nincsen csomagkezelőjük vagy shelljük, és non-root. Ez a képtípus olyan fejlesztők számára készült, akik a berendezés-stílusú számítástechnika előnyeit szeretnék kihasználni.

A vésett képek alapértelmezés szerint nem támogatják a globalizációt. extra képek állnak rendelkezésre, amelyek icu és tzdata csomagokat tartalmaznak.

További információ a globalizációról és a tárolókról: Globalization Test App.

Többplatformos tárolórendszerképek létrehozása

A Docker támogatja többplatformos rendszerképek használatát és készítését, amelyek több környezetben is működnek. A .NET 8 egy új mintát vezet be, amely lehetővé teszi az architektúrák és a buildelt .NET-rendszerképek kombinációját és egyezését. Ha például macOS-t használ, és egy x64-alapú felhőszolgáltatást szeretne megcélzni az Azure-ban, a rendszerképet az alábbi --platform kapcsolóval hozhatja létre:

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

A .NET SDK mostantól támogatja $TARGETARCH értékeket és a visszaállítás -a argumentumát. A következő kódrészlet egy példát mutat be:

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

További információt a A többplatformos tárolók támogatásának javítása blogbejegyzésben talál.

ASP.NET összetett képek

A tárolók teljesítményének javítása érdekében új ASP.NET Docker-rendszerképek érhetők el, amelyek a futtatókörnyezet összetett verziójával rendelkeznek. Ez a kompozit fájl több CIL-fájlból jön létre, amelyeket egyetlen futtatásra kész (R2R) kimeneti binárissá állít össze. Mivel ezek az összeállítások egyetlen állományba vannak ágyazva, a jitting kevesebb időt vesz igénybe, és az alkalmazások indítási teljesítménye javul. Az összetett kép másik nagy előnye a normál ASP.NET képpel szemben, hogy az összetett lemezképek mérete kisebb a lemezen.

Van egy figyelmeztetés, amivel tisztában kell lennie. Mivel a kompozitok több modul egyesítésével jönnek létre, szorosabb verziókapcsolattal rendelkeznek. Az alkalmazások nem használhatják a keretrendszer vagy ASP.NET bináris fájlok egyéni verzióit.

Kompozit rendszerképek elérhetők az Alpine Linux, az Ubuntu ("jammy") Chiseled és a Mariner Distroless platformokra a mcr.microsoft.com/dotnet/aspnet adattárból. A címkék a ASP.NET Docker-lapon-composite utótaggal vannak felsorolva.

Tároló közzététele

Generált kép alapértelmezései

dotnet publish tárolólemezképeket hozhat létre. Alapértelmezés szerint non-root képeketkészít, így az alkalmazások alapértelmezés szerint biztonságban maradhatnak. Ezt az alapértelmezett beállítást bármikor módosíthatja a ContainerUser tulajdonság beállításával, például root.

Az alapértelmezett kimeneti tárolócímke most latest. Ez az alapértelmezett beállítás összhangban van a tárolók területén található egyéb eszközökkel, és megkönnyíti a tárolók használatát a belső fejlesztési ciklusokban.

Teljesítmény és kompatibilitás

A .NET 8 jobb teljesítményt nyújt a tárolók távoli regisztrációs adatbázisokba, különösen az Azure-regisztrációs adatbázisokba való leküldéséhez. A gyorsítás a rétegek egyetlen műveletben való leküldéséből ered, és az atomi feltöltéseket nem támogató regisztrációs adatbázisok esetében egy megbízhatóbb adattömbelési mechanizmus.

Ezek a fejlesztések azt is jelentik, hogy több adatbázis támogatott: Harbor, Artifactory, Quay.io és Podman.

Hitelesítés

A .NET 8 támogatja az OAuth-jogkivonatok exchange-hitelesítését (Azure Managed Identity), amikor tárolókat küld a regisztrációs adatbázisokba. Ez a támogatás azt jelenti, hogy mostantól hitelesítési hibák nélkül küldhet le olyan adatbázisokat, mint az Azure Container Registry. Az alábbi parancsok egy példa közzétételi folyamatot mutatnak be:

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

A .NET-alkalmazások tárolózásával kapcsolatos további információkért lásd: .NET-alkalmazások tárolóba helyezése a dotnet közzététellel.

Közzététel tar.gz archívumban

A .NET 8-tól kezdve közvetlenül tar.gz archívumként hozhat létre tárolót. Ez a funkció akkor hasznos, ha a munkafolyamat nem egyszerű, és például a képek feltöltése előtt le kell futtatnia egy ellenőrző eszközt. Az archívum létrehozása után áthelyezheti, átvizsgálhatja vagy betöltheti egy helyi Docker-eszközláncba.

Az archívumban való közzétételhez adja hozzá a ContainerArchiveOutputPath tulajdonságot a dotnet publish parancshoz, például:

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

Megadhat egy mappanevet vagy egy adott fájlnévvel rendelkező elérési utat.

Lásd még: