Sdílet prostřednictvím


Odkaz na kontejnerizaci aplikace .NET

V tomto referenčním článku se dozvíte, jak nakonfigurovat image kontejneru vygenerovanou při publikování aplikace .NET jako kontejneru. Tento článek popisuje různé vlastnosti, které můžete nastavit pro řízení image, spouštěcího prostředí a příkazů, které se spustí při spuštění kontejneru.

Konfigurace vlastností kontejneru

Pomocí vlastností NÁSTROJE MSBuild můžete řídit mnoho aspektů vygenerovaného kontejneru. Obecně platí, že pokud můžete pomocí příkazu v souboru Dockerfile nastavit určitou konfiguraci, můžete to udělat prostřednictvím nástroje MSBuild.

Poznámka

Jedinou výjimkou jsou příkazy RUN. Vzhledem ke způsobu, jakým jsou kontejnery vytvořeny, není možné tyto příkazy emulovat. Pokud tuto funkci potřebujete, zvažte použití souboru Dockerfile k sestavení imagí kontejneru.

V sadě .NET SDK neexistuje způsob, jak provádět příkazy RUN. Tyto příkazy se často používají k instalaci některých balíčků operačního systému nebo k vytvoření nového uživatele operačního systému nebo libovolného počtu věcí. Pokud chcete dál používat funkci vytváření kontejnerů sady .NET SDK, můžete místo toho vytvořit vlastní základní image s těmito změnami a pak použít tuto základní image. Další informace najdete v tématu ContainerBaseImage.

Příznaky, které řídí základní image

Následující vlastnosti určují, která základní image se používá pro váš kontejner a jak je vybraná:

ContainerBaseImage

Vlastnost základní image kontejneru řídí image použitou jako základ pro vaši image. Ve výchozím nastavení se na základě vlastností projektu odvozují následující hodnoty:

  • Pokud je projekt samostatný, použije se mcr.microsoft.com/dotnet/runtime-deps image jako základní image.
  • Pokud je váš projekt ASP.NET Core, použije se jako základní image image mcr.microsoft.com/dotnet/aspnet.
  • V opačném případě se jako základní image použije image mcr.microsoft.com/dotnet/runtime.

Značka obrázku je odvozena jako číselná součást zvoleného TargetFramework. Například projekt, který cílí na net6.0, má za následek značku 6.0 odvozené základní image a net7.0-linux projekt používá značku 7.0 atd.

Pokud tady nastavíte hodnotu, měli byste nastavit plně kvalifikovaný název image, který se má použít jako základ, včetně libovolné značky, kterou dáváte přednost:

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>

V sadě .NET SDK verze 8.0.200 je ContainerBaseImage odvození vylepšeno, aby se optimalizovala velikost a zabezpečení:

  • Cílení na identifikátory modulu runtime linux-musl-x64 nebo linux-musl-arm64, automaticky zvolí varianty alpine imagí, aby se zajistilo, že váš projekt běží:
    • Pokud projekt používá PublishAot=true pak nightly/runtime-depsjammy-chiseled-aot variantu základní image pro nejlepší velikost a zabezpečení.
    • Pokud projekt používá InvariantGlobalization=false, použije se -extra varianty k zajištění toho, aby lokalizace stále fungovala.

Další informace o velikostech a vlastnostech variant imagí najdete v tématu Sestava velikosti image kontejneru .NET 8.0.

ContainerFamily

Počínaje rozhraním .NET 8 můžete pomocí vlastnosti ContainerFamily MSBuild zvolit jinou řadu imagí kontejnerů poskytovaných Microsoftem jako základní image pro vaši aplikaci. Při nastavení se tato hodnota připojí na konec vybrané značky specifické pro TFM a změní zadanou značku. Pokud chcete například použít varianty Alpine Linux základních imagí .NET, můžete nastavit ContainerFamily na alpine:

<PropertyGroup>
    <ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>

Předchozí konfigurace projektu má za následek konečnou značku 8.0-alpine pro aplikaci zacílenou na .NET 8.

Toto pole je volné a často se dá použít k výběru různých distribucí operačního systému, výchozích konfigurací balíčků nebo jiných změn základní image. Toto pole se při nastavení ContainerBaseImage ignoruje. Další informace najdete v tématu Image kontejneru .NET.

ContainerRuntimeIdentifier(s)

Vlastnost ContainerRuntimeIdentifier určuje operační systém a architekturu kontejneru, pokud ContainerBaseImage podporuje více platforem. Image mcr.microsoft.com/dotnet/runtime například podporuje linux-x64, linux-arm, linux-arm64a win10-x64. Ve výchozím nastavení je tato možnost nastavená na RuntimeIdentifier, která se používá při publikování kontejneru. Obvykle nemusíte tuto vlastnost explicitně nastavovat; místo toho použijte možnost -r s příkazem dotnet publish. Pokud zvolený obrázek nepodporuje zadaný RuntimeIdentifier, zobrazí se chyba označující podporované identifikátory.

Vlastnost ContainerBaseImage můžete vždy nastavit na plně kvalifikovaný název image, včetně značky, abyste nemuseli tuto vlastnost vůbec používat.

<PropertyGroup>
    <ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>

Chcete-li zadat více identifikátorů modulu runtime kontejneru pro image s více architekturami, použijte v ContainerRuntimeIdentifiers vlastnosti sadu identifikátorů modulu runtime oddělených středníkem, podobně jako nastavení více TargetFrameworks:

<PropertyGroup>
    <ContainerRuntimeIdentifiers>linux-x64;linux-arm64</ContainerRuntimeIdentifiers>
</PropertyGroup>

Důležitý

Vlastnost ContainerRuntimeIdentifiers musí být podmnožinou RuntimeIdentifiers vlastnosti. Pokud tato podmínka není splněná, můžou kritické části kanálu buildu selhat.

Nastavení více ContainerRuntimeIdentifiers výsledků při vytváření image s více architekturami Další informace najdete v tématu Obrázky s více architekturami.

Další informace o identifikátorech modulu runtime podporovaných rozhraním .NET najdete v tématukatalogu identifikátorů RID .

Image s více architekturami

Image s více architekturami umožňují jedné imagi kontejneru podporovat více architektur, což zjednodušuje vývoj a nasazení napříč platformami. Sada .NET SDK to podporuje prostřednictvím ContainerRuntimeIdentifiers vlastnosti.

Počínaje sadou SDK verze 8.0.405, 9.0.102 a 9.0.2xx se podporuje publikování kontejnerů s více identifikátory RID. Při publikování s /t:PublishContainer:

  • Pokud je zadán jeden RuntimeIdentifier nebo ContainerRuntimeIdentifier je zadán, kontejner s jednou architekturou se vygeneruje jako předtím.
  • Pokud není zadán žádný jediný RuntimeIdentifier , ale je několik RuntimeIdentifiers nebo ContainerRuntimeIdentifiers jsou nastaveny, sada SDK publikuje aplikaci pro každý zadaný identifikátor RID a kombinuje výsledné image do indexu imagí OCI. Tento index umožňuje, aby několik imagí specifických pro architekturu sdílelo jeden název.

Poznámka

Vlastnost ContainerRuntimeIdentifiers musí být podmnožinou RuntimeIdentifiers vlastnosti. Další informace naleznete v tématu ContainerRuntimeIdentifiers.

Tato funkce zjednodušuje pracovní postupy kontejnerů v prostředích se smíšenými architekturami. Vývojář na linux-x64 hostiteli může například publikovat kontejner podporující obojí linux-x64 a linux-arm64umožnit nasazení do architektury beze změny názvů nebo popisků imagí.

Vygenerovaný index imagí OCI je široce podporovaný moderními nástroji pro kontejnery, což zvyšuje kompatibilitu a snadné použití.

Příznaky, které řídí generovaná metadata nezávislá na imagích

Následující vlastnosti řídí metadata a konfiguraci, které platí pro vygenerovanou image kontejneru bez ohledu na identifikátor cílového modulu runtime:

ContainerImageFormat

Vlastnost MSBuild můžete použít ContainerImageFormat k určení formátu obrázku buď nebo DockerOCI. Ve výchozím nastavení nástroje .NET odvodí formát ze základní image. Například základní image .NET používají formát application/vnd.docker.distribution.manifest.v2+jsonspecifický pro Docker . Mnoho moderních nástrojů však preferuje formát application/vnd.oci.image.manifest.v1+jsonOCI . Pokud chcete vynutit konkrétní formát, nastavte vlastnost, jak je znázorněno:

<PropertyGroup>
  <ContainerImageFormat>OCI</ContainerImageFormat>
</PropertyGroup>

Oba formáty jsou z velké části zaměnitelné bez ztráty informací.

Poznámka

Při vytváření image s více architekturami je výsledný formát image vždy OCI.

ContainerImageTag

Vlastnost značky image kontejneru řídí značky, které jsou pro image generovány. Pokud chcete zadat jednu značku, použijte ContainerImageTag a pro více značek použijte ContainerImageTags.

Důležitý

Když použijete ContainerImageTags, skončíte s více obrázky, jednou za jedinečnou značku.

Značky se často používají k odkazování na různé verze aplikace, ale mohou také odkazovat na různé distribuce operačního systému nebo dokonce různé konfigurace.

Počínaje rozhraním .NET 8 platí, že pokud není zadána výchozí značka, latest.

Chcete-li přepsat výchozí hodnotu, zadejte jednu z následujících vlastností:

<PropertyGroup>
    <ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>

Pokud chcete zadat více značek, použijte ve vlastnosti ContainerImageTags sadu značek oddělených středníkem, podobně jako nastavení více TargetFrameworks:

<PropertyGroup>
    <ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>

Značky můžou obsahovat maximálně 127 alfanumerických znaků, tečk, podtržítka a pomlčky. Musí začínat alfanumerickým znakem nebo podtržítkem. Výsledkem jakéhokoli jiného formuláře je vyvolána chyba.

Poznámka

Při použití ContainerImageTags nebo jakékoli vlastnosti MSBuild vyžadující ;hodnoty s oddělovači zajistěte správné escaping při volání dotnet publish z příkazového řádku, zejména v prostředí CI/CD. Pravidla pro escaping se liší mezi PowerShellem a Bashem. Například:

dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=`"1.2.3-alpha2`;latest`"

V PowerShellu musí být řídicí znaky ; i ".

dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags='"1.2.3-alpha2;latest"'

V Bashu musí být řídicí znak pouze ".

Výsledkem je generování dvou obrázků: my-app:1.2.3-alpha2 a my-app:latest.

Spropitné

Pokud dochází k problémům s vlastností ContainerImageTags, zvažte místo toho nastavení rozsahu proměnné prostředí ContainerImageTags:

$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer

ContainerLabel

Popisek kontejneru přidá do kontejneru popisek metadat. Popisky se často používají k ukládání verzí a metadat vytváření pro použití skenery zabezpečení a dalšími nástroji infrastruktury. Můžete zadat libovolný počet popisků kontejnerů.

Uzel ContainerLabel má dva atributy:

  • Include: Klíč popisku.
  • Value: Hodnota popisku (může být prázdná).
<ItemGroup>
    <ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>

Seznam popisků vytvořených ve výchozím nastavení najdete v tématu Výchozí popisky kontejneru.

ContainerRepository

Úložiště kontejneru je název samotné image, například dotnet/runtime nebo my-app. Ve výchozím nastavení se používá AssemblyName projektu.

<PropertyGroup>
    <ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>

Názvy obrázků se skládají z jednoho nebo více segmentů oddělených lomítkem, z nichž každý může obsahovat jenom malá písmena alfanumerických znaků, tečky, podtržítka a pomlčky a musí začínat písmenem nebo číslicí. Všechny ostatní znaky způsobí vyvolání chyby.

Příznaky, které řídí metadata spouštění

Následující vlastnosti řídí chování spouštění specifické pro modul runtime a generování imagí s více architekturami:

ContainerAppCommand

Položka konfigurace příkazu aplikace je logický vstupní bod vaší aplikace. U většiny aplikací se jedná o AppHost, vygenerovaný spustitelný binární soubor pro vaši aplikaci. Pokud vaše aplikace negeneruje AppHost, je tento příkaz obvykle dotnet <your project dll>. Tyto hodnoty se použijí po jakémkoli ENTRYPOINT v základním kontejneru nebo přímo v případě, že není definován žádný ENTRYPOINT.

Konfigurace ContainerAppCommand má jednu vlastnost Include, která představuje příkaz, možnost nebo argument pro použití v příkazu vstupního bodu:

<ItemGroup Label="ContainerAppCommand Assignment">
  <!-- This is how you would start the dotnet ef tool in your container -->
  <ContainerAppCommand Include="dotnet" />
  <ContainerAppCommand Include="ef" />

  <!-- This shorthand syntax means the same thing, note the semicolon separating the tokens. -->
  <ContainerAppCommand Include="dotnet;ef" />
</ItemGroup>

ContainerAppCommandArgs

Tato položka konfigurace příkazu aplikace představuje všechny logicky požadované argumenty pro vaši aplikaci, které by se měly použít na ContainerAppCommand. Ve výchozím nastavení se pro aplikaci negenerují žádné. Když jsou k dispozici, použijí se při spuštění kontejneru skupiny.

Konfigurace ContainerAppCommandArgs má jednu vlastnost Include, která představuje možnost nebo argument, který se má použít pro příkaz ContainerAppCommand.

<ItemGroup>
  <!-- Assuming the ContainerAppCommand defined above,
       this would be the way to force the database to update.
  -->
  <ContainerAppCommandArgs Include="database" />
  <ContainerAppCommandArgs Include="update" />

  <!-- This is the shorthand syntax for the same idea -->
  <ContainerAppCommandArgs Include="database;update" />
</ItemGroup>

ContainerAppCommandInstruction

Konfigurace instrukcí příkazů aplikace pomáhá řídit způsob, jakým se ContainerEntrypoint, ContainerEntrypointArgs, ContainerAppCommand, ContainerAppCommandArgsa ContainerDefaultArgs zkombinují, aby se vytvořil konečný příkaz, který se spustí v kontejneru. To velmi závisí na tom, jestli je v základní imagi ENTRYPOINT. Tato vlastnost má jednu ze tří hodnot: "DefaultArgs", "Entrypoint"nebo "None".

  • Entrypoint:
    • V tomto režimu je vstupní bod definován pomocí ContainerAppCommand, ContainerAppCommandArgsa ContainerDefaultArgs.
  • None:
    • V tomto režimu je vstupní bod definován pomocí ContainerEntrypoint, ContainerEntrypointArgsa ContainerDefaultArgs.
  • DefaultArgs:
    • Jedná se o nejsložitější režim – pokud nejsou k dispozici žádné položky ContainerEntrypoint[Args], ContainerAppCommand[Args] a ContainerDefaultArgs slouží k vytvoření vstupního bodu a příkazu. Vstupní bod základní image pro základní image, které mají pevně zakódované dotnet nebo /usr/bin/dotnet, se přeskočí, abyste měli úplnou kontrolu.
    • Pokud jsou k dispozici ContainerEntrypoint i ContainerAppCommand, ContainerEntrypoint se stane vstupním bodem a ContainerAppCommand se stane příkazem.

Poznámka

Položky konfigurace ContainerEntrypoint a ContainerEntrypointArgs jsou zastaralé jako .NET 8.

Důležitý

To je pro pokročilé uživatele, které většina aplikací nemusí přizpůsobovat jejich vstupní bod do tohoto stupně. Další informace a pokud chcete poskytnout případy použití pro vaše scénáře, najdete v tématu GitHub: Diskuze o sestavení kontejneru .NET SDK.

ContainerDefaultArgs

Tato výchozí položka konfigurace args představuje všechny argumenty přepisovatelné uživatelem pro vaši aplikaci. To je dobrý způsob, jak poskytnout výchozí hodnoty, které může vaše aplikace potřebovat spustit způsobem, který usnadňuje spuštění, ale i tak snadné přizpůsobení.

Konfigurace ContainerDefaultArgs má jednu vlastnost Include, která představuje možnost nebo argument, který se má použít pro příkaz ContainerAppCommand.

<ItemGroup>
  <!-- Assuming the ContainerAppCommand defined above,
       this would be the way to force the database to update.
  -->
  <ContainerDefaultArgs Include="database" />
  <ContainerDefaultArgs Include="update" />

  <!-- This is the shorthand syntax for the same idea -->
  <ContainerDefaultArgs Include="database;update" />
</ItemGroup>

ContainerEnvironmentVariable

Uzel proměnné prostředí kontejneru umožňuje přidat do kontejneru proměnné prostředí. Proměnné prostředí jsou přístupné pro aplikaci spuštěnou v kontejneru okamžitě a často se používají ke změně chování modulu runtime spuštěné aplikace.

Uzel ContainerEnvironmentVariable má dva atributy:

  • Include: Název proměnné prostředí.
  • Value: Hodnota proměnné prostředí.
<ItemGroup>
  <ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>

Další informace najdete v tématu Proměnné prostředí .NET.

Poznámka

Při publikování image kontejneru v současné době není možné nastavit proměnné prostředí z rozhraní příkazového řádku .NET CLI. Další informace najdete v tématu GitHub: Sestavení kontejnerů .NET SDK.

ContainerPort

Port kontejneru přidá porty TCP (Transmission Control Protocol) nebo UDP (User Datagram Protocol) do seznamu známých portů pro kontejner. To umožňuje, aby moduly runtime kontejnerů, jako je Docker, automaticky mapují tyto porty na hostitelský počítač. Často se používá jako dokumentace pro kontejner, ale dá se použít také k povolení automatického mapování portů.

Uzel ContainerPort má dva atributy:

  • Include: Číslo portu, které se má zveřejnit.
  • Type: Výchozí hodnota tcp, platné hodnoty jsou tcp nebo udp.
<ItemGroup>
    <ContainerPort Include="80" Type="tcp" />
</ItemGroup>

Počínaje rozhraním .NET 8 se ContainerPort odvodí, pokud nejsou explicitně poskytovány na základě několika dobře známých ASP.NET proměnných prostředí:

  • ASPNETCORE_URLS
  • ASPNETCORE_HTTP_PORTS
  • ASPNETCORE_HTTPS_PORTS

Pokud jsou tyto proměnné prostředí přítomny, jejich hodnoty se analyzují a převedou na mapování portů TCP. Tyto proměnné prostředí se čtou z vaší základní image, pokud existují, nebo z proměnných prostředí definovaných v projektu prostřednictvím ContainerEnvironmentVariable položek. Další informace naleznete v tématu ContainerEnvironmentVariable.

ContainerPublishInParallel

U kontejnerů s více identifikátory RID můžou určité typy projektů (například Blazor WebAssembly) narazit na podmínky časování sestavení. Pokud chcete tento postup vyřešit, počínaje sadou .NET SDK verze 8.0.408, 9.0.300 a 10.0, můžete řídit paralelismus procesu publikování pomocí ContainerPublishInParallel vlastnosti. Ve výchozím nastavení probíhá publikování paralelně pro každý identifikátor modulu runtime (RID). Nastavením této vlastnosti zajistíte false sekvenční publikování, což zvyšuje stabilitu, ale může trvat déle.

<PropertyGroup>
  <ContainerPublishInParallel>false</ContainerPublishInParallel>
</PropertyGroup>

Další informace o publikování s více identifikátory RID najdete v tématu ContainerRuntimeIdentifier(s).

ContainerUser

Vlastnost konfigurace uživatele řídí výchozího uživatele, který kontejner spouští jako. Často se používá ke spuštění kontejneru jako uživatele, který není root, což je osvědčený postup zabezpečení. Pro tuto konfiguraci existuje několik omezení, o které je potřeba vědět:

  • Může to mít různé formy – uživatelské jméno, ID uživatelů linuxu, název skupiny, ID skupiny linuxu, username:groupnamea další varianty ID.
  • Neexistuje žádné ověření, že zadaný uživatel nebo skupina na obrázku existuje.
  • Změna uživatele může změnit chování aplikace, zejména pokud jde o věci, jako jsou oprávnění systému souborů .

Výchozí hodnota tohoto pole se liší podle projektu TFM a cílového operačního systému:

  • Pokud cílíte na .NET 8 nebo novější a používáte image modulu runtime Microsoftu, postupujte takhle:
    • v Linuxu se používá app uživatele bez rootu (i když na něj odkazuje jeho ID uživatele).
    • v systému Windows se používá ContainerUser uživatele bez rootu.
  • Jinak se nepoužívá výchozí ContainerUser.
<PropertyGroup>
  <ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>

Spropitné

Proměnná prostředí APP_UID slouží k nastavení informací o uživatelích v kontejneru. Tato hodnota může pocházet z proměnných prostředí definovaných v základní imagi (například z imagí Microsoft .NET), nebo ji můžete nastavit sami pomocí syntaxe ContainerEnvironmentVariable.

Pokud chcete nakonfigurovat aplikaci tak, aby běžela jako uživatel root, nastavte vlastnost ContainerUser na root. Do souboru projektu přidejte následující:

<PropertyGroup>
  <ContainerUser>root</ContainerUser>
</PropertyGroup>

Alternativně můžete tuto hodnotu nastavit při volání dotnet publish z příkazového řádku:

dotnet publish -p ContainerUser=root

ContainerWorkingDirectory

Uzel pracovního adresáře kontejneru řídí pracovní adresář kontejneru, adresář, v rámci kterého se spouští příkazy, pokud není spuštěn jiný příkaz.

Ve výchozím nastavení se jako pracovní adresář používá hodnota adresáře /app.

<PropertyGroup>
    <ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>

Příznaky, které řídí cíl vygenerované image

Následující vlastnosti určují, kde je uložená nebo publikovaná image vygenerovaného kontejneru:

ContainerArchiveOutputPath

Pokud chcete vytvořit image kontejneru v tar.gz archivu, použijte ContainerArchiveOutputPath tuto vlastnost. 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 ContainerArchiveOutputPath 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. Pokud zadáte název složky, název souboru vygenerovaný pro soubor archivu obrázku má název $(ContainerRepository).tar.gz. Tyto archivy mohou obsahovat více značek uvnitř, pouze když je vytvořen jeden soubor pro všechny ContainerImageTags.

ContainerRegistry

Vlastnost registru kontejneru řídí cílový registr, místo, do kterého se má nově vytvořená image odeslat. Ve výchozím nastavení se nasdílí do místního démona Dockeru, ale můžete také zadat vzdálený registr. Při použití vzdáleného registru, který vyžaduje ověřování, se ověřuje pomocí známých mechanismů docker login. Další informace najdete v tématu ověřování v registrech kontejnerů , kde najdete další podrobnosti. Pro konkrétní příklad použití této vlastnosti zvažte následující příklad XML:

<PropertyGroup>
    <ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>

Tento nástroj podporuje publikování do libovolného registru, který podporuje rozhraní HTTP API registru Dockeru V2. To zahrnuje následující registry explicitně (a pravděpodobně mnohem implicitněji):

Poznámky k práci s těmito registry najdete v poznámkách specifických pro registr.

LocalRegistry

Vlastnost LocalRegistry MSBuild určuje místní nástroje kontejneru, které se mají použít při odesílání do místních zdrojů. Podporované hodnoty jsou docker a podman. Pokud není nastavená sada SDK, určuje nástroj na základě dostupnosti:

  • Pokud existují a dockerpodman existují, a docker je alias pro podman, pak podman se použije.
  • Pokud existujedocker, docker použije se.
  • Pokud existujepodman, podman použije se.
  • Pokud žádná neexistuje, vyvolá se chyba.

Pokud chcete explicitně nastavit nástroj místního registru, použijte následující konfiguraci:

<PropertyGroup>
  <LocalRegistry>podman</LocalRegistry>
</PropertyGroup>

Konfigurace pojmenování imagí kontejneru

Image kontejnerů se řídí konkrétní konvencí vytváření názvů. Název image se skládá z několika částí, registru, volitelného portu, úložiště a volitelné značky a rodiny.

REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]

Představte si například plně kvalifikovaný název mcr.microsoft.com/dotnet/runtime:8.0-alpine image:

  • mcr.microsoft.com je registr (a v tomto případě představuje registr kontejneru Microsoftu).
  • dotnet/runtime je úložiště (některé to ale považují za user/repository).
  • 8.0-alpine je značka a rodina (rodina je volitelný specifikátor, který pomáhá nejednoznačný obal operačního systému).

Některé vlastnosti popsané v následujících částech odpovídají správě částí vygenerovaného názvu image. Představte si následující tabulku, která mapuje vztah mezi názvem image a vlastnostmi sestavení:

Část název obrázku Vlastnost MSBuild Ukázkové hodnoty
REGISTRY[:PORT] ContainerRegistry mcr.microsoft.com:443
PORT ContainerPort :443
REPOSITORY ContainerRepository dotnet/runtime
TAG ContainerImageTag 8.0
FAMILY ContainerFamily -alpine

Výchozí popisky kontejnerů

Popisky se často používají k poskytování konzistentních metadat u imagí kontejnerů. Integrované nástroje kontejneru poskytují některé výchozí popisky pro zvýšení kvality vygenerovaných imagí. Všechna výchozí generování popisků lze zakázat nastavením na ContainerGenerateLabelshodnotu false . Kromě toho má každý výchozí popisek individuální příznak povolení, který lze nastavit tak, aby false tento konkrétní popisek zakázal.

Pokud je to možné, existující vlastnosti NÁSTROJE MSBuild poskytují hodnoty pro tyto popisky. Jiné vlastnosti umožňují explicitní kontrolu nad jejich hodnotami.

Poznámka Výchozí hodnota Název vyhrazené vlastnosti Název náhradní vlastnosti Název povolené vlastnosti Poznámky
org.opencontainers.image.created a org.opencontainers.artifact.created Formát RFC 3339 aktuálního data a času UTC ContainerGenerateLabelsImageCreated
org.opencontainers.artifact.description a org.opencontainers.image.description ContainerDescription Description ContainerGenerateLabelsImageDescription
org.opencontainers.image.authors ContainerAuthors Authors ContainerGenerateLabelsImageAuthors
org.opencontainers.image.url ContainerInformationUrl PackageProjectUrl ContainerGenerateLabelsImageUrl
org.opencontainers.image.documentation ContainerDocumentationUrl PackageProjectUrl ContainerGenerateLabelsImageDocumentation
org.opencontainers.image.version ContainerVersion PackageVersion ContainerGenerateLabelsImageVersion
org.opencontainers.image.vendor ContainerVendor ContainerGenerateLabelsImageVendor
org.opencontainers.image.licenses ContainerLicenseExpression PackageLicenseExpression ContainerGenerateLabelsImageLicenses
org.opencontainers.image.title ContainerTitle Title ContainerGenerateLabelsImageTitle
org.opencontainers.image.base.name ContainerBaseImage ContainerGenerateLabelsImageBaseName
org.opencontainers.image.base.digest ContainerGenerateLabelsImageBaseDigest Toto je algoritmus SHA zvolené základní image. K dispozici od sady .NET SDK 9.0.100 dále.
org.opencontainers.image.source PrivateRepositoryUrl ContainerGenerateLabelsImageSource Napsané pouze v případě, že PublishRepositoryUrl je true. Spoléhá také na infrastrukturu sourcelink, která je součástí sestavení.
org.opencontainers.image.revision SourceRevisionId ContainerGenerateLabelsImageRevision Napsané pouze v případě, že PublishRepositoryUrl je true. Spoléhá také na infrastrukturu sourcelink, která je součástí sestavení.

Viz také