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 root felhasználó
- Debian 12
- Gondosan kialakított Ubuntu-képek
- Többplatformos tárolórendszerképek létrehozása
- ASP.NET összetett képek
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-root
szeretne 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 rendszerkép alapértelmezett
- Teljesítmény és kompatibilitás
- Hitelesítés
- Közzététel a tar.gz archívumba
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.