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.
Bár lehet a .NET-alkalmazásokat
Projektekkel kapcsolatos szempontok közzététele
Most, hogy rendelkezik .NET-alkalmazással, közzéteheti tárolóként. Mielőtt ezt megtenénk, több fontos szempontot is szem előtt kell tartani. A .NET SDK 8.0.200-es verziója előtt szüksége volt a 📦 Microsoft.NET.Build.Containers NuGet-csomagra. Ez a csomag nem szükséges a .NET SDK 8.0.200-as és újabb verziójához, mivel alapértelmezés szerint a tárolótámogatás is elérhető.
A .NET-alkalmazások tárolóként való közzétételének engedélyezéséhez a következő buildtulajdonságokra van szükség:
-
IsPublishable: Beállítva:true. Ez a tulajdonság implicit módon van beállítvatrue-ra a végrehajtható projekttípusokhoz, példáulconsole,webappésworker. -
EnableSdkContainerSupport: Állítsatrue, ha a projekttípus konzolalkalmazás.
Az SDK-tároló támogatásának explicit engedélyezéséhez vegye figyelembe a következő projektfájl-kódrészletet:
<PropertyGroup>
<IsPublishable>true</IsPublishable>
<EnableSdkContainerSupport>true</EnableSdkContainerSupport>
</PropertyGroup>
Kapcsolók közzététele és tulajdonságok létrehozása
Az összes .NET CLI-parancshoz hasonlóan az MSBuild tulajdonságokat is megadhatja a parancssorban. Számos érvényes szintaxisűrlap érhető el a tulajdonságok megadásához, például:
/p:PropertyName=Value-p:PropertyName=Value-p PropertyName=Value--property PropertyName=Value
Tetszőleges szintaxist használhat, de a dokumentáció példákat mutat be az -p űrlap használatával.
Borravaló
A hibaelhárításhoz fontolja meg az MSBuid-naplók használatát. Bináris naplófájl (binlog) létrehozásához adja hozzá a -bl kapcsolót a dotnet publish parancshoz. A binlogfájlok hasznosak a buildelési problémák diagnosztizálásához, és az MSBuild Structured Log Viewer
Profilok és célok közzététele
A dotnet publishhasználatakor egy profil -p PublishProfile=DefaultContainer megadásával olyan tulajdonságot állíthat be, amely miatt az SDK egy másik célt aktivál a közzétételi folyamat után. Ez a kívánt eredmény elérésének közvetett módja. Másrészt a dotnet publish /t:PublishContainer használata közvetlenül meghívja a PublishContainer célt, és ugyanazt az eredményt éri el, de egyszerűbben.
Más szóval a következő .NET CLI-parancs:
dotnet publish -p PublishProfile=DefaultContainer
A PublishProfile tulajdonságot DefaultContainerértékre állítja, egyenértékű a következő paranccsal:
dotnet publish /t:PublishContainer
A két módszer közötti különbség az, hogy az előbbi profillal állítja be a tulajdonságot, míg az utóbbi közvetlenül meghívja a célt. Ennek az az oka, hogy a profilok az MSBuild egyik funkciója, és a tulajdonságok összetettebb beállítására használhatók, mint a közvetlen beállításuk.
Az egyik fő probléma az, hogy nem minden projekttípus támogatja a profilokat, vagy ugyanazzal a profilkészlettel rendelkezik. Emellett a különböző eszközök, például a Visual Studio és a .NET parancssori felület közötti profilok támogatásának szintje is eltérő. Ezért a célok használata általában egyértelműbb és szélesebb körben támogatott módszer ugyanazon eredmény eléréséhez.
Hitelesítés tárolóregisztrációs adatbázisokban
A privát tárolóregisztrációs adatbázisokkal való interakcióhoz hitelesítésre van szükség ezekkel a regisztrációs adatbázisokkal.
A Docker a docker login paranccsal rendelkezik egy létrehozott mintával, amely egy Docker-konfigurációs fájllal való interakció egyik módja, amely szabályokat tartalmaz az adott adatbázisokkal való hitelesítéshez. Ezt a fájlt és a kódolt hitelesítési típusokat a Microsoft.Net.Build.Containers támogatja a beállításjegyzék-hitelesítéshez. Ennek biztosítania kell, hogy ez a csomag zökkenőmentesen működjön bármilyen nyilvántartással, amelyből docker pull és docker push. Ezt a fájlt általában a ~/.docker/config.jsontárolja, de a változón keresztül DOCKER_CONFIG is megadható, amely egy config.json fájlt tartalmazó könyvtárra mutat.
A hitelesítés típusai
A config.json fájl háromféle hitelesítést tartalmaz:
Explicit felhasználónév/jelszó
A authsconfig.json fájl szakasza egy kulcs/érték térkép a rendszerleíró adatbázis nevei és a Base64-kódolt felhasználónév:jelszó karakterláncok között. Egy gyakori Docker-forgatókönyvben a docker login <registry> -u <username> -p <password> futtatása új elemeket hoz létre ebben a térképben. Ezek a hitelesítő adatok népszerűek a folyamatos integrációs (CI) rendszerekben, ahol a bejelentkezés tokenekkel történik a futtatás elején. A végfelhasználói fejlesztőgépek esetében azonban kevésbé népszerűek, mivel biztonsági kockázatot jelentenek, ha a fájlokban nem található hitelesítő adatok.
Hitelesítő segítők
A credHelpers fájl config.json szakasza kulcs/érték párok térképe, amely összekapcsolja a bejegyzések neveit és azon programok nevét, amelyek használhatók a bejegyzés hitelesítő adatainak létrehozására és lekérésére. Ezt gyakran akkor használják, ha bizonyos regisztrációs adatbázisok összetett hitelesítési követelményekkel rendelkeznek. Ahhoz, hogy ez a fajta hitelesítés működjön, rendelkeznie kell a rendszerének egy docker-credential-{name} nevű alkalmazással a PATH-on. Az ilyen típusú hitelesítő adatok általában biztonságosak, de a fejlesztési vagy CI-gépeken nehéz lehet beállítani őket.
Rendszerkulcsláncok
A credsStore szakasz egyetlen sztringtulajdonság, amelynek értéke egy docker hitelesítőadat-kezelő program neve, amely tudja, hogyan kell csatlakozni a rendszer jelszókezelőjével. Windows esetén ez lehet például wincred. Ezek népszerűek a Docker macOS- és Windows-telepítőiben.
Hitelesítés környezeti változókon keresztül
Bizonyos esetekben a fent leírt standard Docker-hitelesítési mechanizmus egyszerűen nem elég. Ez az eszközkészlet egy további mechanizmussal rendelkezik a regisztrációs adatbázisok hitelesítő adatainak biztosítására: környezeti változók. Környezeti változók használata esetén a hitelesítő adatok megadására szolgáló mechanizmus egyáltalán nem lesz használatban. A következő környezeti változók támogatottak:
-
DOTNET_CONTAINER_REGISTRY_UNAME: Ennek a regisztrációnak ez kell legyen a felhasználóneve. Ha a beállításjegyzék jelszava jogkivonat, akkor a felhasználónévnek"<token>"kell lennie. -
DOTNET_CONTAINER_REGISTRY_PWORD: Ennek kell lennie a regisztráció jelszavának vagy tokenjének.
Jegyzet
A .NET SDK 8.0.400-as verziójától a tárolóműveletek környezeti változói frissültek. A SDK_CONTAINER_* változók mostantól DOTNET_CONTAINER_*előtaggal vannak elnevezettek.
Ez a mechanizmus potenciálisan sebezhető a hitelesítő adatok szivárgásával szemben, ezért csak olyan helyzetekben szabad használni, ahol a másik mechanizmus nem érhető el. Ha például az SDK eszközkészletet egy Docker-tárolón belül használja. Emellett ez a mechanizmus nem névtérrel van elosztva – ugyanazt a hitelesítő adatokat próbálja használni a forrásregisztrációs adatbázishoz (ahol az alaprendszerkép található) és a célregisztrációs adatbázishoz (ahol a végső rendszerképet küldi).
Nem biztonságos nyilvántartások használata
A legtöbb beállításjegyzék-hozzáférés biztonságosnak minősül, ami azt jelenti, hogy a HTTPS a beállításjegyzékkel való interakcióra szolgál. Azonban nem minden regisztrációs adatbázis van TLS-tanúsítványokkal konfigurálva – különösen olyan helyzetekben, mint a VPN mögötti privát vállalati regisztrációs adatbázis. Ezeknek a használati eseteknek a támogatásához a tárolóeszközök lehetővé teszik annak deklarálását, hogy egy adott beállításjegyzék nem biztonságos kommunikációt használ.
A .NET 8.0.400-tól kezdve az SDK megérti ezeket a konfigurációs fájlokat és formátumokat, és automatikusan ezt a konfigurációt használja annak meghatározására, hogy HTTP vagy HTTPS protokollt kell-e használni. A beállításjegyzék nem biztonságos kommunikációra való konfigurálása a tárolóeszköztől függően változik.
Kikötőmunkás
A Docker a beállításjegyzék konfigurációját a démonkonfigurációban tárolja. Új nem biztonságos regisztrációs adatbázisok hozzáadásához a rendszer új gazdagépeket ad hozzá a "insecure-registries" tömbtulajdonsághoz:
{
"insecure-registries": [
"registry.mycorp.net"
]
}
Jegyzet
A fájl módosításainak alkalmazásához újra kell indítania a Docker-démont.
Podman
A Podman egy registries.conf TOML-fájlt használ a beállításjegyzék kapcsolati adatainak tárolására. Ez a fájl általában a /etc/containers/registries.conf-nál található. Új nem biztonságos regisztrációs adatbázisok hozzáadásához a rendszer hozzáad egy TOML-szakaszt a beállításjegyzék beállításainak tárolásához, majd a insecure beállítást trueértékre kell állítani.
[[registry]]
location = "registry.mycorp.net"
insecure = true
Jegyzet
A registries.conf fájl módosításainak alkalmazásához újra kell indítania a Podmant.
Környezeti változók
A 9.0.100-tól kezdődően a .NET SDK felismeri a DOTNET_CONTAINER_INSECURE_REGISTRIES környezeti változón áthaladó nem biztonságos adatbázisokat. Ez a változó a tartományok vesszővel tagolt listáját úgy kezeli, hogy nem biztonságos, ugyanúgy, mint a Docker és a Podman fenti példái.
$Env:DOTNET_CONTAINER_INSECURE_REGISTRIES=localhost:5000,registry.mycorp.com; dotnet publish -t:PublishContainer -p:ContainerRegistry=registry.mycorp.com -p:ContainerBaseImage=localhost:5000/dotnet/runtime:9.0
Telemetria
Amikor tárolóként tesz közzé egy .NET-alkalmazást, a .NET SDK tárolóeszközei használati telemetriát gyűjtenek és küldenek az eszközök használatáról. Az összegyűjtött adatok a .NET CLIáltal küldött
Az összegyűjtött telemetriai adatok általános jellegűek, és nem szivárognak ki személyes adatok – a cél a mérés elősegítése:
- A .NET SDK tárolóizációs funkciójának általános használata.
- Sikerességi és hibaarányok, valamint általános információk arról, hogy milyen típusú hibák történnek leggyakrabban.
- A technológia bizonyos funkcióinak használata, mint például a különböző beállításjegyzék-típusok közzététele, vagy a közzététel végrehajtásának módja.
A telemetria kikapcsolásához állítsa a DOTNET_CLI_TELEMETRY_OPTOUT környezeti változót trueértékre. További információ: .NET CLI-telemetria.
Következtetési telemetria
A rendszer a következő információkat naplózza az alaprendszerkép következtetési folyamatáról:
| Időpont | Magyarázat | Mintaérték |
|---|---|---|
InferencePerformed |
Ha a felhasználók manuálisan adják meg az alaprendszerképeket, és nem a következtetést használják. | true |
TargetFramework |
Az alapkép inferencia során kiválasztott TargetFramework. |
net8.0 |
BaseImage |
A kiválasztott alaprendszerkép értéke, de csak akkor, ha az alaprendszerkép a Microsoft által készített rendszerképek egyike. Ha egy felhasználó a mcr.microsoft.com-ra bármilyen más képet ad meg, mint a Microsoft által készített képek, ez az érték null. | mcr.microsoft.com/dotnet/aspnet |
BaseImageTag |
A kiválasztott címke értéke, de csak akkor, ha ez a címke a Microsoft által létrehozott képek egyikére vonatkozik. Ha egy felhasználó a mcr.microsoft.com-ra bármilyen más képet ad meg, mint a Microsoft által készített képek, ez az érték null. | 8.0 |
ContainerFamily |
A ContainerFamily tulajdonság értéke, ha egy felhasználó a ContainerFamily funkcióval választotta ki az egyik alaprendszerkép "ízét". Ez csak akkor van beállítva, ha a felhasználó kiválasztott vagy következtetett egy Microsoft által készített .NET képet az mcr.microsoft.com webhelyről. |
jammy-chiseled |
ProjectType |
A konténerizált projekt típusa. |
AspNetCore vagy Console |
PublishMode |
Az alkalmazás csomagolásának menete. |
Aot, Trimmed, SelfContainedvagy FrameworkDependent |
IsInvariant |
Ha a kiválasztott rendszerkép invariáns globalizációt igényel, vagy a felhasználó manuálisan választotta. | true |
TargetRuntime |
Az a RID, amelyhez az alkalmazást publikálták. | linux-x64 |
Képlétrehozás telemetriai adatai
A tárolólétrehozási és -közzétételi folyamat folyamatának naplózása a következő információkat tartalmazza:
| Időpont | Magyarázat | Mintaérték |
|---|---|---|
RemotePullType |
Ha az alaprendszerkép egy távoli beállításjegyzékből származik, milyen típusú beállításjegyzék volt? | Azure, AWS, Google, GitHub, DockerHub, MRC vagy egyéb |
LocalPullType |
Ha az alapkép helyi forrásból származik, például egy konténer démonról vagy tarballról. | Docker, Podman, Tarball |
RemotePushType |
Ha az image-et feltöltötték egy távoli regisztrárba, milyen típusú regisztrár volt? | Azure, AWS, Google, GitHub, DockerHub, MRC vagy egyéb |
LocalPushType |
Ha a képet egy helyi célpontba helyezték, mi lett az? | Docker, Podman, Tarball |
Ezenkívül, ha a folyamat során különböző típusú hibák lépnek fel, adatokat gyűjtenek arról, hogy pontosan milyen hiba történt.
| Időpont | Magyarázat | Mintaérték |
|---|---|---|
Error |
A bekövetkezett hiba típusa |
unknown_repository, credential_failure, rid_mismatch. local_load |
Direction |
Ha a hiba egy credential_failure, akkor a leküldéses vagy lekéréses beállításjegyzékben történt? |
push |
| Cél RID | Ha a hiba rid_mismatchvolt, melyik RID-et kérték? |
linux-x64 |
| Elérhető RID-k | Ha a hiba egy rid_mismatchvolt, mely RID-eket támogatott az alapértelmezett képfájl? |
linux-x64,linux-arm64 |