Sdílet prostřednictvím


Novinky v kontejnerech pro .NET 8

Tento článek popisuje nové funkce v kontejnerech pro .NET 8.

Image kontejnerů

V imagích kontejneru .NET pro .NET 8 byly provedeny následující změny:

Ne-root uživatel

Obrázky zahrnují uživatele non-root. Tento uživatel umožňuje obrázky s funkcí non-root. Pokud chcete spustit jako non-root, přidejte na konec souboru Dockerfile následující řádek (nebo podobnou instrukci v manifestech Kubernetes):

USER app

.NET 8 přidává proměnnou prostředí pro UID uživatele non-root, jehož UID je 1654. Tato proměnná prostředí je užitečná pro test Kubernetes runAsNonRoot, který vyžaduje, aby byl uživatel kontejneru nastaven pomocí UID a ne podle jména. Tento souboru Dockerfile ukazuje příklad použití.

Výchozí port se také změnil z portu 80 na 8080. Pro podporu této změny je k dispozici nová proměnná prostředí ASPNETCORE_HTTP_PORTS, která usnadňuje změnu portů. Proměnná přijímá seznam portů, což je jednodušší než formát vyžadovaný ASPNETCORE_URLS. Pokud port změníte zpět na port 80 pomocí jedné z těchto proměnných, nemůžete spustit jako non-root.

Další informace najdete v tématu Změna výchozího portu ASP.NET Core z 80 na 8080 a Nový nezávislý uživatel 'app' v Linuxových imagích.

Debian 12

Image kontejnerů nyní používají Debian 12 (Bookworm). Debian je výchozí distribuce Linuxu v imagích kontejneru .NET.

Další informace naleznete v tématu kontejnery image Debian upgradovaných na Debian 12.

Štípané obrázky Ubuntu

Vylepšené snímky Ubuntu jsou k dispozici pro .NET 8. Vytvářené obrazy mají menší plochu pro útoky, protože jsou ultra-malé, nemají žádného správce balíčků ani shell a jsou non-root. Tento typ obrazu je určený pro vývojáře, kteří chtějí využívat výhod výpočetní techniky ve stylu spotřebičů.

Tvarované obrázky ve výchozím nastavení nepodporují globalizaci. K dispozici jsou obrázky extra, které zahrnují balíčky icu a tzdata.

Další informace o globalizaci a kontejnerech najdete v aplikaci Globalization Test.

Vytváření imagí kontejnerů pro více platforem

Docker podporuje použití a vytváření víceplatformových obrazů, které fungují v různých prostředích. .NET 8 představuje nový vzor, který umožňuje kombinovat a shodovat architektury s imagemi .NET, které vytváříte. Pokud například používáte macOS a chcete cílit na cloudovou službu x64 v Azure, můžete image sestavit pomocí přepínače --platform následujícím způsobem:

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

Sada .NET SDK teď podporuje hodnoty $TARGETARCH a argument -a při obnovení. Následující fragment kódu ukazuje příklad:

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

Další informace najdete v blogovém příspěvku Vylepšení podpory více platforem kontejnerů.

ASP.NET složené obrázky

V rámci úsilí o zlepšení výkonu kontejnerizace jsou k dispozici nové ASP.NET obrazy pro Docker, které mají kombinovanou verzi modulu runtime. Tento složený soubor je sestaven kompilací více sestavení CIL do jednoho výstupního binárního souboru R2R (Ready-to-Run). Protože jsou tato sestavení vložena do jednoho obrazu, proces JIT kompilace trvá méně času a výkon při spouštění aplikací se zlepšuje. Další velkou výhodou složeného oproti běžnému ASP.NET obrázku je, že složené obrázky mají na disku menší velikost.

Je tu upozornění, o které byste měli vědět. Vzhledem k tomu, že kompozity mají více sestavení vložených do jednoho, mají těsnější propojení verzí. Aplikace nemůžou používat vlastní verze rozhraní ani binární soubory ASP.NET.

Složené obrazy jsou k dispozici pro platformy jako jsou Alpine Linux, Ubuntu ("jammy") Chiseled a Mariner Distroless z úložiště mcr.microsoft.com/dotnet/aspnet. Značky jsou uvedeny s příponou -composite na stránce ASP.NET Dockeru.

Publikování kontejnerů

Výchozí hodnoty vygenerovaného obrázku

dotnet publish může vytvářet image kontejnerů. Ve výchozím nastavení vytváří image non-root, což pomáhá vašim aplikacím zůstat ve výchozím nastavení zabezpečené. Tuto výchozí hodnotu můžete kdykoli změnit nastavením vlastnosti ContainerUser, například pomocí root.

Výchozí značka výstupního kontejneru je teď latest. Toto výchozí nastavení je v souladu s jinými nástroji v prostoru kontejnerů a usnadňuje používání kontejnerů ve vnitřních vývojových smyčkách.

Výkon a kompatibilita

.NET 8 má vylepšený výkon pro odesílání kontejnerů do vzdálených registrů, zejména registrů Azure. Zrychlení pochází z tlačení vrstev v jedné operaci a pro registry, které nepodporují atomické nahrávání, spolehlivější mechanismus dělení dat na bloky.

Tato vylepšení také znamenají, že se podporuje více registrů: Harbor, Artifactory, Quay.io a Podman.

Autentizace

.NET 8 přidává podporu ověřování výměny tokenů OAuth (Spravovaná identita Azure) při odesílání kontejnerů do registrů. Tato podpora znamená, že teď můžete odesílat do registrů, jako je Azure Container Registry, bez chyb ověřování. Následující příkazy ukazují příklad toku publikování:

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

Další informace o kontejnerizaci aplikací .NET najdete v tématu Kontejnerizace aplikace .NET pomocí příkazu dotnet publish.

Publikování do archivu tar.gz

Počínaje rozhraním .NET 8 můžete vytvořit kontejner přímo jako tar.gz archiv. Tato funkce je užitečná, pokud pracovní postup není jednoduchý a vyžaduje, abyste například před nasdílením obrázků spustili nástroj pro skenování. Po vytvoření archivu ho můžete přesunout, zkontrolovat nebo načíst do místní sady nástrojů Dockeru.

Pokud chcete publikovat do archivu, přidejte do příkazu dotnet publish vlastnost ContainerArchiveOutputPath, například:

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

Můžete zadat název složky nebo cestu s určitým názvem souboru.

Viz také