Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben a referenciacikkben megtudhatja, hogyan konfigurálhatja a .NET-alkalmazások tárolóként való közzétételekor létrehozott tárolórendszerképet. Ez a cikk a rendszerkép, a végrehajtási környezet és a tároló indításakor futtatott parancsok vezérléséhez beállítható különböző tulajdonságokat ismerteti.
Tárolótulajdonságok konfigurálása
A létrehozott tároló számos aspektusát vezérelheti az MSBuild tulajdonságokon keresztül. Általánosságban elmondható, hogy ha egy Dockerfile parancsával beállíthat néhány konfigurációt, ugyanezt megteheti az MSBuild használatával is.
Jegyzet
Ez alól csak RUN parancsok kivételek. A tárolók felépítése miatt ezek a parancsok nem emulálhatók. Ha szüksége van erre a funkcióra, fontolja meg egy Dockerfile használatát a tárolólemezképek létrehozásához.
A .NET SDK-val nem lehet RUN parancsokat végrehajtani. Ezeket a parancsokat gyakran használják operációsrendszer-csomagok telepítéséhez vagy új operációsrendszer-felhasználó létrehozásához, vagy tetszőleges számú dolog létrehozásához. Ha továbbra is a .NET SDK tárolóépítési funkcióját szeretné használni, ehelyett létrehozhat egy egyéni alaprendszerképet ezekkel a módosításokkal, majd használhatja ezt az alaprendszerképet. További információ: ContainerBaseImage.
Az alaprendszerképet vezérlő jelzők
A következő tulajdonságok szabályozzák, hogy melyik alaprendszerképet használja a tároló, és hogyan legyen kiválasztva:
ContainerBaseImage
A tároló alaprendszerkép tulajdonsága szabályozza a rendszerkép alapjául használt rendszerképet. Alapértelmezés szerint a projekt tulajdonságai alapján a következő értékek lesznek kikövetkeztetve:
- Ha a projekt önálló, akkor a
mcr.microsoft.com/dotnet/runtime-depsrendszerkép lesz az alaprendszerkép. - Ha a projekt egy ASP.NET Core-projekt, akkor a rendszer a
mcr.microsoft.com/dotnet/aspnetrendszerképet használja alaprendszerképként. - Ellenkező esetben a rendszer a
mcr.microsoft.com/dotnet/runtimerendszerképet használja alapképként.
A rendszer a kép címkéjét a kiválasztott TargetFrameworknumerikus összetevőjének jelöli. Egy net6.0 célzó projekt például a következtetett alaprendszerkép 6.0 címkéjét eredményezi, egy net7.0-linux projekt pedig a 7.0 címkét használja stb.
Ha itt állít be egy értéket, állítsa be a kép teljes nevét alapként, beleértve a kívánt címkét is:
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>
A .NET SDK 8.0.200-es verziójával a ContainerBaseImage következtetés javul a méret és a biztonság optimalizálása érdekében:
- A
linux-musl-x64vagylinux-musl-arm64futtatókörnyezet-azonosítók megcélzása automatikusan kiválasztja aalpinerendszerképvariánsokat a projekt futtatásának biztosítása érdekében:- Ha a projekt
PublishAot=truehasznál, akkor az alaprendszerképnightly/runtime-depsjammy-chiseled-aotváltozata a legjobb méret és biztonság érdekében. - Ha a projekt
InvariantGlobalization=falsehasznál, akkor a-extraváltozatokkal biztosíthatja, hogy a honosítás továbbra is működjön.
- Ha a projekt
A képvariánsok méretével és jellemzőivel kapcsolatos további információkért lásd a .NET 8.0 Tárolólemezkép méretjelentését.
ContainerFamily
A .NET 8-tól kezdve az ContainerFamily MSBuild tulajdonsággal választhatja ki a Microsoft által biztosított tárolólemezképek egy másik családját az alkalmazás alapképeként. Ha be van állítva, a rendszer hozzáfűzi ezt az értéket a kijelölt TFM-specifikus címke végéhez, módosítva a megadott címkét. A .NET-alaprendszerképek Alpine Linux-változatainak használatához például beállíthatja ContainerFamilyalpine:
<PropertyGroup>
<ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>
Az előző projektkonfiguráció eredménye egy .NET 8-célzási alkalmazás 8.0-alpine végleges címkéje.
Ez a mező szabad formátumú, és gyakran használható különböző operációsrendszer-disztribúciók, alapértelmezett csomagkonfigurációk vagy bármely más alaprendszerkép módosításainak kiválasztására. Ez a mező ContainerBaseImage beállításakor figyelmen kívül lesz hagyva. További információ: .NET-tárolórendszerképek.
ContainerRuntimeIdentifier(s)
A ContainerRuntimeIdentifier tulajdonság határozza meg a tároló operációs rendszerét és architektúráját, ha a ContainerBaseImage több platformot is támogat. A mcr.microsoft.com/dotnet/runtime kép például támogatja a linux-x64, linux-arm, linux-arm64és win10-x64. Alapértelmezés szerint ez a tároló közzétételekor használt RuntimeIdentifier van beállítva. Általában nem kell explicit módon beállítania ezt a tulajdonságot; ehelyett használja a -r lehetőséget a dotnet publish paranccsal. Ha a kiválasztott rendszerkép nem támogatja a megadott RuntimeIdentifier, hiba jelzi a támogatott azonosítókat.
A ContainerBaseImage tulajdonságot mindig beállíthatja teljes képnévre, beleértve a címkét is, hogy egyáltalán ne kelljen használnia ezt a tulajdonságot.
<PropertyGroup>
<ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>
Ha több tároló futásidejű azonosítót szeretne megadni több architektúrarendszerképhez, használjon pontosvesszővel tagolt futtatókörnyezet-azonosítókat a ContainerRuntimeIdentifiers tulajdonságban, hasonlóan a több TargetFrameworksbeállításához:
<PropertyGroup>
<ContainerRuntimeIdentifiers>linux-x64;linux-arm64</ContainerRuntimeIdentifiers>
</PropertyGroup>
Fontos
A ContainerRuntimeIdentifiers tulajdonságnak a RuntimeIdentifiers tulajdonság egy részhalmazának kell lennie. Ha ez a feltétel nem teljesül, előfordulhat, hogy a buildelési folyamat kritikus részei meghiúsulnak.
Több ContainerRuntimeIdentifiers találat beállítása egy többarchitektúra-rendszerkép létrehozására. További információ: Többarchitektúrás rendszerképek.
A .NET által támogatott futtatókörnyezet-azonosítókkal kapcsolatos további információkért tekintse meg a RID-katalógust.
Többarchitektúrás rendszerképek
A többarchitektúra-rendszerképek lehetővé teszik, hogy egyetlen tárolórendszerkép több architektúrát is támogatjon, leegyszerűsítve a platformfüggetlen fejlesztést és üzembe helyezést. A .NET SDK ezt a ContainerRuntimeIdentifiers tulajdonságon keresztül támogatja.
Az SDK 8.0.405-ös, 9.0.102-s és 9.0.2xx-s verzióitól kezdve a több RID-tároló közzététele támogatott. Közzétételkor a következővel /t:PublishContainer:
- Ha egyetlen
RuntimeIdentifiervagyContainerRuntimeIdentifiermeg van adva, a rendszer a korábbiakhoz hasonlóan létrehoz egy egyarchitektúra-tárolót. - Ha egyetlen nincs
RuntimeIdentifiermegadva, de többRuntimeIdentifiersvagyContainerRuntimeIdentifierstöbb van beállítva, az SDK közzéteszi az alkalmazást minden megadott RID-hez, és egyesíti az eredményül kapott képeket egy OCI rendszerképindexben. Ez az index lehetővé teszi, hogy több architektúraspecifikus rendszerkép egyetlen nevet osztson meg.
Jegyzet
A ContainerRuntimeIdentifiers tulajdonságnak a RuntimeIdentifiers tulajdonság egy részhalmazának kell lennie. További információ: ContainerRuntimeIdentifiers.
Ez a funkció leegyszerűsíti a tároló-munkafolyamatokat vegyes architektúrájú környezetekben. Egy gazdagép fejlesztője linux-x64 például közzétehet egy mindkettőt támogató linux-x64 tárolót, és linux-arm64lehetővé teszi az üzembe helyezést bármelyik architektúrában a képnevek vagy címkék módosítása nélkül.
A létrehozott OCI-rendszerkép-index széles körben támogatott a modern tárolóeszközökkel, ami növeli a kompatibilitást és a könnyű használatot.
A létrehozott képfüggetlen metaadatokat vezérlő jelzők
A következő tulajdonságok a létrehozott tárolórendszerképre vonatkozó metaadatokat és konfigurációt szabályozzák, függetlenül a cél futtatókörnyezet azonosítójától:
ContainerImageFormat
Az ContainerImageFormat MSBuild tulajdonság használatával megadhatja a képformátumot vagy DockerOCIa . A .NET-eszközkészlet alapértelmezés szerint az alaprendszerkép formátumára következtet. A .NET alaprendszerképek például Docker-specifikus formátumot használnak application/vnd.docker.distribution.manifest.v2+json. Azonban számos modern eszköz előnyben részesíti az OCI formátumot application/vnd.oci.image.manifest.v1+json. Egy adott formátum kényszerítéséhez állítsa be a tulajdonságot az alábbi módon:
<PropertyGroup>
<ContainerImageFormat>OCI</ContainerImageFormat>
</PropertyGroup>
Mindkét formátum nagyrészt felcserélhető információvesztés nélkül.
Jegyzet
Többarchitektúra-rendszerkép létrehozásakor az eredményként kapott képformátum mindig OCI.
ContainerImageTag
A tárolórendszerképcímke tulajdonság szabályozza a rendszerképhez létrehozott címkéket. Ha egyetlen címkét szeretne megadni, használja ContainerImageTag és több címke esetén használja a ContainerImageTags.
Fontos
A használat ContainerImageTagssorán több képpel fog végződni, egy egyedi címkével.
A címkék gyakran hivatkoznak az alkalmazások különböző verzióira, de különböző operációsrendszer-disztribúciókra vagy akár különböző konfigurációkra is hivatkozhatnak.
A .NET 8-tól kezdve, ha egy címke nincs megadva, az alapértelmezett latest.
Az alapértelmezett érték felülbírálásához adja meg az alábbi tulajdonságok egyikét:
<PropertyGroup>
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>
Több címke megadásához használjon pontosvesszővel tagolt címkéket a ContainerImageTags tulajdonságban, hasonlóan a több TargetFrameworksbeállításához:
<PropertyGroup>
<ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>
A címkék legfeljebb 127 alfanumerikus karaktert, pontot, aláhúzásjelet és kötőjelet tartalmazhatnak. A karaktereknek alfanumerikus karakterrel vagy aláhúzásjellel kell kezdődniük. Minden más űrlap hibát eredményez.
Jegyzet
Ha -tagolt értékeket igénylő ContainerImageTagsMSBuild tulajdonságot használ ; vagy használ, győződjön meg arról, hogy a parancssorból való híváskor dotnet publish megfelelő a menekülés, különösen CI/CD-környezetekben. A menekülési szabályok eltérnek a PowerShell és a Bash között. Például:
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=`"1.2.3-alpha2`;latest`"
A PowerShellben a ; és " karaktereket is meg kell szökni.
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags='"1.2.3-alpha2;latest"'
A Bashben csak a " karaktert kell megmenekíteni.
Ez két rendszerképet eredményez: my-app:1.2.3-alpha2 és my-app:latest.
Borravaló
Ha problémákat tapasztal a ContainerImageTags tulajdonsággal kapcsolatban, fontolja meg egy környezeti változó ContainerImageTags hatókörének hatókörét:
$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer
ContainerLabel
A tárolócímke metaadatcímkét ad hozzá a tárolóhoz. A címkéket gyakran használják a biztonsági szkennerek és más infrastruktúra-eszközök által használt verzió és metaadatok tárolására. Tetszőleges számú tárolócímkét megadhat.
A ContainerLabel csomópont két attribútummal rendelkezik:
-
Include: A címke kulcsa. -
Value: A címke értéke (ez üres lehet).
<ItemGroup>
<ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>
Az alapértelmezés szerint létrehozott címkék listáját az alapértelmezett tárolófeliratok között találja.
ContainerRepository
A tárolóadattár maga a rendszerkép neve, például dotnet/runtime vagy my-app. Alapértelmezés szerint a program a projekt AssemblyName használja.
<PropertyGroup>
<ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>
A képnevek egy vagy több perjellel tagolt szegmensből állnak, amelyek mindegyike csak kisbetűs alfanumerikus karaktereket, pontokat, aláhúzásjeleket és kötőjeleket tartalmazhat, és betűvel vagy számmal kell kezdődnie. Minden más karakter hibát eredményez.
Végrehajtási metaadatokat vezérlő jelzők
A következő tulajdonságok szabályozzák a futtatókörnyezet-specifikus végrehajtási viselkedést és a többarchitektúra-rendszerkép létrehozását:
ContainerAppCommandContainerAppCommandArgsContainerAppCommandInstructionContainerDefaultArgsContainerEnvironmentVariableContainerPortContainerPublishInParallelContainerUserContainerWorkingDirectory
ContainerAppCommand
Az alkalmazás parancskonfigurációs eleme az alkalmazás logikai belépési pontja. A legtöbb alkalmazás esetében ez az AppHost, az alkalmazáshoz létrehozott végrehajtható bináris fájl. Ha az alkalmazás nem hoz létre AppHost-ot, akkor ez a parancs általában dotnet <your project dll>. Ezek az értékek az alaptárolóban lévő ENTRYPOINT után, vagy közvetlenül akkor lesznek alkalmazva, ha nincs definiálva ENTRYPOINT.
A ContainerAppCommand konfiguráció egyetlen Include tulajdonságot tartalmaz, amely az entrypoint parancsban használandó parancsot, beállítást vagy argumentumot jelöli:
<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
Ez az alkalmazásparancs args konfigurációeleme az alkalmazáshoz logikailag szükséges argumentumokat jelöl, amelyeket a ContainerAppCommandkell alkalmazni. Alapértelmezés szerint egyik sem jön létre egy alkalmazáshoz. Ha jelen van, az argek a tárolóra lesznek alkalmazva a futtatáskor.
A ContainerAppCommandArgs konfiguráció egyetlen Include tulajdonságot tartalmaz, amely a ContainerAppCommand parancsra alkalmazandó beállítást vagy argumentumot jelöli.
<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
Az alkalmazásparancs utasításkonfigurációja segít szabályozni a ContainerEntrypoint, ContainerEntrypointArgs, ContainerAppCommand, ContainerAppCommandArgsés ContainerDefaultArgs együttes használatát a tárolóban futtatott utolsó parancs létrehozásához. Ez nagyban függ attól, hogy egy ENTRYPOINT szerepel-e az alaprendszerképben. Ez a tulajdonság a következő három érték egyikét veszi fel: "DefaultArgs", "Entrypoint"vagy "None".
-
Entrypoint:- Ebben a módban a belépési pontot
ContainerAppCommand,ContainerAppCommandArgsésContainerDefaultArgshatározza meg.
- Ebben a módban a belépési pontot
-
None:- Ebben a módban a belépési pontot
ContainerEntrypoint,ContainerEntrypointArgsésContainerDefaultArgshatározza meg.
- Ebben a módban a belépési pontot
-
DefaultArgs:- Ez a legösszetettebb mód – ha a
ContainerEntrypoint[Args]elemek egyike sem található meg, akkor aContainerAppCommand[Args]és aContainerDefaultArgshasználják a belépési pont és a parancs létrehozásához. A rendszer kihagyja a nehezen kódolt alapképek belépési pontjátdotnetvagy/usr/bin/dotnet, hogy teljes mértékben szabályozhassa a rendszer. - Ha
ContainerEntrypointésContainerAppCommandis jelen van, akkorContainerEntrypointlesz a belépési pont, ésContainerAppCommandlesz a parancs.
- Ez a legösszetettebb mód – ha a
Jegyzet
A ContainerEntrypoint és ContainerEntrypointArgs konfigurációelemek elavultak a .NET 8-as verziójától.
Fontos
Ez a haladó felhasználók számára készült– a legtöbb alkalmazásnak nem kell ilyen mértékben testre szabnia a belépési pontjukat. További információkért és ha használati eseteket szeretne megadni a forgatókönyvekhez, olvassa el a GitHub: .NET SDK-tárolók buildelésére vonatkozó vitafórumokat.
ContainerDefaultArgs
Ez az alapértelmezett args konfigurációelem az alkalmazás felhasználó által felülírható argumentumait jelöli. Ez egy jó módja annak, hogy olyan alapértelmezett beállításokat biztosítson, amelyeket az alkalmazásnak olyan módon kell futtatnia, amely megkönnyíti az indítást, de mégis könnyen testre szabható.
A ContainerDefaultArgs konfiguráció egyetlen Include tulajdonságot tartalmaz, amely a ContainerAppCommand parancsra alkalmazandó beállítást vagy argumentumot jelöli.
<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
A tároló környezeti változó csomópontja lehetővé teszi környezeti változók hozzáadását a tárolóhoz. A környezeti változók azonnal elérhetők a tárolóban futó alkalmazás számára, és gyakran használják a futó alkalmazás futtatókörnyezeti viselkedésének módosítására.
A ContainerEnvironmentVariable csomópont két attribútummal rendelkezik:
-
Include: A környezeti változó neve. -
Value: A környezeti változó értéke.
<ItemGroup>
<ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>
További információ: .NET környezeti változók.
Jegyzet
Tárolólemezkép közzétételekor jelenleg nem lehet környezeti változókat beállítani a .NET CLI-ből. További információ : GitHub: .NET SDK-tárolók buildjei.
ContainerPort
A tárolóport hozzáadja a Transmission Control Protocol (TCP) vagy a User Datagram Protocol (UDP) portokat a tároló ismert portjainak listájához. Ez lehetővé teszi, hogy a Dockerhez hasonló tároló-futtatókörnyezetek automatikusan megfeleltetik ezeket a portokat a gazdagépnek. Ezt gyakran használják a tároló dokumentációjaként, de az automatikus portleképezés engedélyezésére is használható.
A ContainerPort csomópont két attribútummal rendelkezik:
-
Include: A közzéteendő portszám. -
Type: Az alapértelmezett értéktcp, az érvényes értékektcpvagyudp.
<ItemGroup>
<ContainerPort Include="80" Type="tcp" />
</ItemGroup>
A .NET 8-tól kezdődően a ContainerPort akkor következtetünk, ha a rendszer több jól ismert ASP.NET környezeti változó alapján nem adja meg explicit módon:
ASPNETCORE_URLSASPNETCORE_HTTP_PORTSASPNETCORE_HTTPS_PORTS
Ha ezek a környezeti változók jelen vannak, az értékeiket a rendszer elemzi és TCP-portleképezésekké alakítja. Ezek a környezeti változók az alaprendszerképből, ha vannak, vagy a projektben definiált környezeti változókból olvasnak be ContainerEnvironmentVariable elemeken keresztül. További információ: ContainerEnvironmentVariable.
ContainerPublishInParallel
A több RID-tárolók esetében előfordulhat, hogy bizonyos projekttípusok (például a Blazor WebAssembly) buildelési versenyfeltételekkel szembesülnek. Ennek megoldásához a .NET SDK 8.0.408-tól, 9.0.300-tól és 10.0-s verziójától kezdve a tulajdonság használatával ContainerPublishInParallel szabályozhatja a közzétételi folyamat párhuzamosságát. Alapértelmezés szerint a közzététel párhuzamosan történik az egyes futtatókörnyezet-azonosítók (RID) esetében. Ha ezt a tulajdonságot úgy állítja be, hogy false biztosítsa a szekvenciális közzétételt, ami növeli a stabilitást, de hosszabb időt vehet igénybe.
<PropertyGroup>
<ContainerPublishInParallel>false</ContainerPublishInParallel>
</PropertyGroup>
A több RID-közzétételről további információt a ContainerRuntimeIdentifier(ek)ben talál.
ContainerUser
A felhasználó konfigurációs tulajdonsága vezérli azt az alapértelmezett felhasználót, akiként a tároló fut. Ezt gyakran használják a tároló nem gyökérfelhasználóként való futtatására, ami a biztonság szempontjából ajánlott eljárás. Ennek a konfigurációnak néhány korlátozást figyelembe kell vennie:
- Különböző űrlapokat vehet fel, például felhasználónevet, linuxos felhasználói azonosítókat, csoportnevet, linuxos csoportazonosítót,
username:groupnameés egyéb azonosítóvariánsokat. - Nincs ellenőrzés arról, hogy a megadott felhasználó vagy csoport létezik-e a képen.
- A felhasználó módosítása megváltoztathatja az alkalmazás viselkedését, különösen a fájlrendszer engedélyeit illetően.
A mező alapértelmezett értéke a projekt TFM-étől és a cél operációs rendszertől függően változik:
- Ha a .NET 8-at vagy újabb verziót célozza meg, és a Microsoft futtatókörnyezeti rendszerképeket használja, akkor:
- Linux rendszeren a rendszer a gyökér nélküli
apphasználja (bár a felhasználói azonosítója hivatkozik rá) - Windows rendszeren a rendszer a gyökér nélküli felhasználói
ContainerUserhasználja
- Linux rendszeren a rendszer a gyökér nélküli
- Ellenkező esetben a rendszer nem használ alapértelmezett
ContainerUser
<PropertyGroup>
<ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>
Borravaló
A APP_UID környezeti változó a tároló felhasználói adatainak beállítására szolgál. Ez az érték származhat az alaprendszerképben definiált környezeti változókból (ahogyan a Microsoft .NET-rendszerképek teszik), vagy beállíthatja saját maga is a ContainerEnvironmentVariable szintaxison keresztül.
Ha úgy szeretné konfigurálni az alkalmazást, hogy gyökérfelhasználóként fusson, állítsa a ContainerUser tulajdonságot root. A projektfájlban adja hozzá a következőket:
<PropertyGroup>
<ContainerUser>root</ContainerUser>
</PropertyGroup>
Ezt az értéket a parancssorból dotnet publish hívásakor is beállíthatja:
dotnet publish -p ContainerUser=root
ContainerWorkingDirectory
A tároló munkakönyvtár-csomópontja szabályozza a tároló munkakönyvtárát, azt a könyvtárat, amelyen belül a parancsok futnak, ha nem más parancsok futnak.
Alapértelmezés szerint a /app könyvtárértéket használja a rendszer munkakönyvtárként.
<PropertyGroup>
<ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>
A létrehozott rendszerkép célhelyét vezérlő jelzők
A következő tulajdonságok szabályozzák a létrehozott tárolólemezkép tárolását vagy közzétételét:
ContainerArchiveOutputPath
Ha tárolórendszerképet szeretne létrehozni egy tar.gz archívumban, használja a tulajdonságot ContainerArchiveOutputPath . 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 ContainerArchiveOutputPath tulajdonságot a dotnet 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. Ha megadja a mappa nevét, a képarchívumfájlhoz létrehozott fájlnév neve $(ContainerRepository).tar.gz. Ezek az archívumok több címkét is tartalmazhatnak bennük, csak akkor, ha az összes ContainerImageTagsegyetlen fájl jön létre.
ContainerRegistry
A tárolóregisztrációs adatbázis tulajdonsága szabályozza a célregisztrációs adatbázist, azt a helyet, ahová az újonnan létrehozott rendszerképet le kell küldeni. Alapértelmezés szerint a rendszer leküldi a helyi Docker-démonba, de megadhat egy távoli beállításjegyzéket is. Ha hitelesítést igénylő távoli beállításjegyzéket használ, a hitelesítést a jól ismert docker login mechanizmusok használatával végezheti el. További információt a tárolóregisztrációs adatbázisok hitelesítésével kapcsolatban talál. A tulajdonság használatának konkrét példájához tekintse meg az alábbi XML-példát:
<PropertyGroup>
<ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>
Ez az eszközkészlet támogatja a Docker Registry HTTP API V2-t támogató beállításjegyzékben való közzétételt. Ez explicit módon (és valószínűleg több implicit módon) tartalmazza a következő regisztrációs adatbázisokat:
- Azure Container Registry
- Amazon rugalmas tárolóregisztrációs adatbázis
- Google Műtermék-nyilvántartás
- Docker Hub
- GitHub csomagok
- GitLab által üzemeltetett tárolóregisztrációs adatbázis
- Quay.io
A jegyzékek használatával kapcsolatos jegyzetekért tekintse meg a beállításjegyzék-specifikus jegyzeteket.
LocalRegistry
Az LocalRegistry MSBuild tulajdonság megadja a helyi forrásokba való leküldéskor használni kívánt helyi tárolóeszközt. A támogatott értékek docker és podman. Ha nincs beállítva, az SDK a rendelkezésre állás alapján határozza meg az eszközt:
- Ha mindkettő
dockerpodmanlétezik és létezik, ésdockeraz aliasapodman, akkorpodmana rendszer használja. - Ha csak
dockerlétezik,dockerakkor a rendszer használja. - Ha csak
podmanlétezik,podmanakkor a rendszer használja. - Ha egyik sem létezik, hibaüzenet jelenik meg.
A helyi beállításjegyzék-eszköz explicit beállításához használja a következő konfigurációt:
<PropertyGroup>
<LocalRegistry>podman</LocalRegistry>
</PropertyGroup>
Tárolórendszerkép elnevezési konfigurációja
A tárolórendszerképek egy adott elnevezési konvenciót követnek. A rendszerkép neve több részből áll, a beállításjegyzékből, az opcionális portból, az adattárból, valamint az opcionális címkéből és családból.
REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]
Vegyük például a teljes mcr.microsoft.com/dotnet/runtime:8.0-alpine kép nevét:
-
mcr.microsoft.coma beállításjegyzék (ebben az esetben pedig a Microsoft tárolóregisztrációs adatbázisát jelöli). -
dotnet/runtimeaz adattár (de vannak, akik ezt auser/repository). -
8.0-alpinea címke és a család (a család egy opcionális kijelölő, amely segít az operációs rendszer csomagolásának egyértelműsítésében).
A következő szakaszokban ismertetett tulajdonságok némelyike megfelel a létrehozott képnév egyes részeinek kezelésének. Vegye figyelembe az alábbi táblázatot, amely a kép neve és a buildtulajdonságok közötti kapcsolatot képezi le:
| Képnév rész | MSBuild tulajdonság | Példaértékek |
|---|---|---|
REGISTRY[:PORT] |
ContainerRegistry |
mcr.microsoft.com:443 |
PORT |
ContainerPort |
:443 |
REPOSITORY |
ContainerRepository |
dotnet/runtime |
TAG |
ContainerImageTag |
8.0 |
FAMILY |
ContainerFamily |
-alpine |
Alapértelmezett tárolófeliratok
A címkék gyakran konzisztens metaadatokat biztosítanak a tárolólemezképeken. A beépített tárolóeszközök alapértelmezett címkéket biztosítanak a létrehozott rendszerképek minőségének növeléséhez. Az összes alapértelmezett címkelétrehozás letiltható a következő beállítással ContainerGenerateLabelsfalse: . Emellett minden alapértelmezett címke rendelkezik egy egyéni engedélyezési jelzővel, amely az adott címke letiltására állítható be false .
Ahol lehetséges, a meglévő MSBuild tulajdonságok adják meg ezeknek a címkéknek az értékeit. Más tulajdonságok lehetővé teszik az értékek explicit ellenőrzését.
| Jegyzetelés | Alapértelmezett érték | Dedikált tulajdonság neve | Tartalék tulajdonság neve | Engedélyezett tulajdonság neve | Jegyzetek |
|---|---|---|---|---|---|
org.opencontainers.image.created és org.opencontainers.artifact.created |
Az aktuális UTC DateTime RFC 3339 formátuma | ContainerGenerateLabelsImageCreated |
|||
org.opencontainers.artifact.description és 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 |
Ez a kiválasztott alaprendszerkép SHA-kivonata. A .NET SDK 9.0.100-tól érhető el. | |||
org.opencontainers.image.source |
PrivateRepositoryUrl |
ContainerGenerateLabelsImageSource |
Csak akkor íródott, ha PublishRepositoryUrl van true. Emellett arra is támaszkodik, hogy a Sourcelink-infrastruktúra a build része legyen. |
||
org.opencontainers.image.revision |
SourceRevisionId |
ContainerGenerateLabelsImageRevision |
Csak akkor íródott, ha PublishRepositoryUrl van true. Emellett arra is támaszkodik, hogy a Sourcelink-infrastruktúra a build része legyen. |
Lásd még:
- .NET-alkalmazás tárolóba helyezése dotnet-közzététellel
- .NET-tárolórendszerképek