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
- Debian 12
- Štípané obrázky Ubuntu
- Vytváření imagí kontejnerů pro více platforem
- ASP.NET složených obrázků
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
- Výkon a kompatibilita
- Authentication
- Publikování do archivu tar.gz
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.