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.

Tárolólemezképek

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

Nem gyökérfelhasználó

A képek között egy non-root felhasználó is szerepel. Ez a felhasználó képessé teszi a képeket non-root . A futtatáshoz non-rootadja hozzá a következő sort a Dockerfile végén (vagy egy hasonló utasítást a Kubernetes-jegyzékekben):

USER app

A .NET 8 hozzáad egy környezeti változót a felhasználó UID-éhez non-root , amely 64198. Ez a környezeti változó a Kubernetes-teszthez runAsNonRoot 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 mutat be.

Az alapértelmezett port is portról portra 808080változott. A módosítás támogatásához egy új környezeti változó ASPNETCORE_HTTP_PORTS érhető el, 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 szükséges ASPNETCORE_URLSformátum. Ha ezen változók egyikével visszaállítja a portot portra 80 , nem futtatható a következőként non-root: .

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ó Linux-rendszerképekben.

Debian 12

A tárolórendszerképek most a Debian 12 -t (Bookworm) használják. A Debian az alapértelmezett Linux-disztribúció a .NET-tárolólemezképekben.

További információkért lásd a Debian 12-re frissített Debian tárolórendszerképeket.

Vésett Ubuntu-képek

A vésett Ubuntu-képek a .NET 8-hoz érhetők el. A vésett képek felülete csökkent, mert rendkívül kicsik, nincs csomagkezelőjük vagy rendszerhéjuk, és azok 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. extraképeket is biztosítanak, amelyek tartalmazzák a csomagokat és tzdata a csomagokaticu.

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 a több környezetben működő többplatformos rendszerképek használatát és készítését. 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 következő kapcsolóval hozhatja létre a --platform rendszerképet:

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

A .NET SDK mostantól támogatja $TARGETARCH az értékeket és a -a visszaállítás 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ó: A többplatformos tárolók támogatásának javítása blogbejegyzés.

összetett képek ASP.NET

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 az összetettség úgy készült, hogy több MSIL-szerelvényt egyetlen használatra kész (R2R) kimeneti bináris fájlba állít össze. Mivel ezek a szerelvények egyetlen képbe 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, hogy tisztában kell lennie. Mivel az összetettek több szerelvényt is beágyaznak egybe, szorosabb verziókapcsolóval rendelkeznek. Az alkalmazások nem használhatják a keretrendszer vagy ASP.NET bináris fájlok egyéni verzióit.

Összetett képek érhetők el az Alpine Linux, az Ubuntu ("jammy") vésett és a Mariner Distroless platformokhoz az mcr.microsoft.com/dotnet/aspnet adattárból. A címkék az -composite ASP.NET Docker-oldalon lévő utótaggal együtt jelennek meg.

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 képeket non-rootké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 megfelelő beállítással, például a következővel 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 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ókat. Ez a funkció akkor hasznos, ha a munkafolyamat nem egyszerű, és például leküldés előtt le kell futtatnia egy ellenőrzőeszközt a képeken. 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 tulajdonságot a ContainerArchiveOutputPathdotnet 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