Sdílet prostřednictvím


Novinky v kontejnerech pro .NET 8

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

Image kontejneru

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

Uživatel bez kořenového adresáře

Obrázky zahrnují non-root uživatele. Tento uživatel zvládá obrázky 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á proměnnou prostředí pro UID uživatele non-root , což je 64198. Tato proměnná prostředí je užitečná pro test Kubernetes runAsNonRoot , který vyžaduje, aby byl uživatel kontejneru nastavený prostřednictvím UID, a ne podle názvu. Tento soubor dockerfile ukazuje ukázkové 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á ASPNETCORE_HTTP_PORTS prostředí, 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 Výchozí port ASP.NET Core změněný z 80 na 8080 a nový uživatel aplikace bez kořenového adresáře v imagích Linuxu.

Debian 12

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

Další informace naleznete v části Image kontejneru Debian upgradované na Debian 12.

Štípané obrázky Ubuntu

Pro .NET 8 jsou k dispozici bitové kopie Ubuntu. Chycené obrázky mají omezený napadený povrch, protože jsou ultra-malé, nemají žádný správce balíčků ani prostředí a jsou non-root. Tento typ image je určený pro vývojáře, kteří chtějí využívat výhod výpočetního prostředí ve stylu zařízení.

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

Další informace o globalizaci a kontejnerech najdete v tématu Globalization Test App.

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

Docker podporuje použití a vytváření imagí pro více platforem, 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í --platform přepínače následujícím způsobem:

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

Sada .NET SDK teď podporuje $TARGETARCH hodnoty a -a argument 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 o vylepšení podpory více platforem kontejnerů.

ASP.NET složených obrázků

V rámci úsilí o zlepšení výkonu kontejnerizace jsou k dispozici nové ASP.NET image Dockeru, které mají složenou verzi modulu runtime. Tento složený soubor je sestaven kompilací více sestavení MSIL do jednoho výstupního binárního souboru R2R (Ready-to-Run). Vzhledem k tomu, že tato sestavení jsou vložena do jedné image, trvá jit méně času a výkon 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 složené sestavy mají více sestavení vložených do jednoho, mají užší párování verzí. Aplikace nemůžou používat vlastní verze rozhraní ani binární soubory ASP.NET.

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

Publikování kontejnerů

Výchozí hodnoty vygenerované image

dotnet publish může vytvářet image kontejnerů. Ve výchozím nastavení vytváří non-root image, 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 správného nastavení 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 nasdílení vrstev v jedné operaci a pro registry, které nepodporují atomické nahrávání, spolehlivější mechanismus vytváření bloků dat.

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

Ověřování

.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 s publikováním dotnet.

Publikování do archivu tar.gz

Počínaje rozhraním .NET 8 můžete vytvořit kontejner přímo jako archiv tar.gz . 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 ContainerArchiveOutputPath , přidejte do příkazu vlastnost dotnet publish , 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é