.NET-alkalmazás konténerizálása a dotnet publish használatával
A tárolók számos funkcióval és előnnyel rendelkeznek, például nem módosítható infrastruktúra, hordozható architektúrát biztosítanak, és lehetővé teszik a méretezhetőséget. A rendszerkép segítségével tárolókat hozhat létre a helyi fejlesztési környezethez, a magánfelhőhöz vagy a nyilvános felhőhöz. Ebben az oktatóanyagban megtudhatja, hogyan tárolózhat egy .NET-alkalmazást a dotnet publish paranccsal Dockerfile használata nélkül. Emellett megtudhatja, hogyan konfigurálhatja a tárolórendszerképet és végrehajtást, és hogyan törölheti az erőforrásokat.
Borravaló
Ha egy Dockerfile- szeretne használni a .NET-alkalmazás tárolózásához, tekintse meg oktatóanyagot: .NET-alkalmazás tárolóba helyezése.
Előfeltételek
Telepítse a következő előfeltételeket:
-
.NET 8+ SDK
Ha telepítve van a .NET, adotnet --info
paranccsal állapítsa meg, hogy melyik SDK-t használja.
Ha helyileg tervezi futtatni a tárolót, szüksége van egy Open Container Initiative (OCI) kompatibilis tároló futtatókörnyezetre, például:
- Docker Desktop: A leggyakoribb konténer futtatókörnyezet.
- Podman: A Docker nyílt forráskódú démonmentes alternatíva.
Fontos
A .NET SDK Docker nélkül hoz létre tárolólemezképeket. A Dockerre vagy a Podmanre csak akkor van szükség, ha helyileg szeretné futtatni a képet. Alapértelmezés szerint, amikor a .NET-alkalmazást tárolórendszerképként közzéteszi, a rendszer egy helyi tároló futtatókörnyezetbe helyezi át. Másik lehetőségként mentheti a lemezképet tarballként, vagy közvetlenül egy konténer-regisztrációs adatbázisba anélkül, hogy bármilyen konténer-futtatókörnyezetet használna.
Ezen előfeltételek mellett javasoljuk, hogy a .NET-
.NET-alkalmazás létrehozása
A tárolók tárolásához .NET-alkalmazásra van szükség, ezért először hozzon létre egy új alkalmazást egy sablonból. Nyissa meg a terminált, hozzon létre egy munkamappát (mintakönyvtárat), ha még nem tette meg, és módosítsa a könyvtárakat, hogy benne legyen. A munkamappában futtassa a következő parancsot egy új projekt létrehozásához egy Feldolgozónevű alkönyvtárban:
dotnet new worker -o Worker -n DotNet.ContainerImage
A mappafa a következő könyvtárhoz hasonlóan néz ki:
📁 sample-directory
└──📂 Worker
├──appsettings.Development.json
├──appsettings.json
├──DotNet.ContainerImage.csproj
├──Program.cs
├──Worker.cs
├──📂 Properties
│ └─── launchSettings.json
└──📂 obj
├── DotNet.ContainerImage.csproj.nuget.dgspec.json
├── DotNet.ContainerImage.csproj.nuget.g.props
├── DotNet.ContainerImage.csproj.nuget.g.targets
├── project.assets.json
└── project.nuget.cache
A dotnet new
parancs létrehoz egy Feldolgozó nevű új mappát, és létrehoz egy feldolgozó szolgáltatást, amely futtatáskor másodpercenként naplóz egy üzenetet. A terminálmunkamenetben módosítsa a címtárakat, és lépjen a Feldolgozó mappába. Az alkalmazás elindításához használja a dotnet run
parancsot.
dotnet run
Using launch settings from ./Worker/Properties/launchSettings.json...
Building...
info: DotNet.ContainerImage.Worker[0]
Worker running at: 01/06/2025 13:37:28 -06:00
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: .\Worker
info: DotNet.ContainerImage.Worker[0]
Worker running at: 01/06/2025 13:37:29 -06:00
info: DotNet.ContainerImage.Worker[0]
Worker running at: 01/06/2025 13:37:30 -06:00
info: Microsoft.Hosting.Lifetime[0]
Application is shutting down...
A feldolgozósablon korlátlanul hurkol. Használja a mégse parancsot Ctrl+C a leállításhoz.
A tárolórendszerkép nevének beállítása
Az alkalmazások tárolóként való közzétételekor különböző konfigurációs lehetőségek állnak rendelkezésre. Alapértelmezés szerint a konténerkép neve a projekt AssemblyName
. Ha ez a név konténerkép névként érvénytelen, felülírhatja egy ContainerRepository
megadásával, ahogyan az a következő projekt fájlban látható.
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-DotNet.ContainerImage-2e40c179-a00b-4cc9-9785-54266210b7eb</UserSecretsId>
<ContainerRepository>dotnet-worker-image</ContainerRepository>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.3" />
</ItemGroup>
</Project>
További információért lásd: ContainerRepository
.
.NET-alkalmazás közzététele
A .NET-alkalmazás tárolóként való közzétételéhez használja a következő dotnet publish parancsot:
dotnet publish --os linux --arch x64 /t:PublishContainer
Az előző .NET CLI-parancs tárolóként teszi közzé az alkalmazást:
- Linux operációs rendszerként való célzás (
--os linux
). - X64-architektúra (
--arch x64
) megadása.
Fontos
A tároló helyi közzétételéhez aktív OCI-kompatibilis démonnak kell futnia. Ha nem fut az alkalmazás tárolóként való közzétételekor, az alábbihoz hasonló hibaüzenet jelenik meg:
..\build\Microsoft.NET.Build.Containers.targets(66,9): error MSB4018:
The "CreateNewImage" task failed unexpectedly. [..\Worker\DotNet.ContainerImage.csproj]
A dotnet publish
parancs a példakimenethez hasonló kimenetet hoz létre:
Restore complete (0.2s)
DotNet.ContainerImage succeeded (2.6s) → bin\Release\net9.0\linux-x64\publish\
Ez a parancs lefordítja a feldolgozó alkalmazást a mappa közzétételére, és alapértelmezés szerint leküldi a tárolólemezképet a helyi Docker-démonba. Ha Podmant használ, aliast
.NET-alkalmazás közzététele tarball-formátumba
A tarball (vagy tar file) olyan fájl, amely más fájlokat tartalmaz. Általában egy *.tar.gz összetett fájlkiterjesztéssel végződik, amely jelzi, hogy tömörített archívumról van szó. Ezek a fájltípusok szoftverek terjesztésére vagy biztonsági másolatok létrehozására szolgálnak. Ebben az esetben a létrehozott tarball egy tárolórendszerkép terjesztésére szolgál.
Ha tárolóként szeretne közzétenni egy .NET-alkalmazást egy tarballban, használja a következő parancsot:
dotnet publish --os linux --arch x64 \
/t:PublishContainer \
-p ContainerArchiveOutputPath=./images/container-image.tar.gz
Az előző parancs tárolóként teszi közzé az alkalmazást egy tarballon:
- A Linux operációs rendszert célként kitűzni (
--os linux
). - X64-architektúra (
--arch x64
) megadása. - A
ContainerArchiveOutputPath
tulajdonság beállítása./images/container-image.tar.gz
.
A parancshoz nem szükséges futó OCI-kompatibilis démon. További információ: ContainerArchiveOutputPath
.
A tarball betöltése
A tarballba való exportálás gyakori használati esete a biztonságra összpontosító szervezetek számára. Tárolókat hoznak létre, tarballként exportálják őket, majd biztonsági ellenőrző eszközöket futtatnak a tarballokon. Ez a megközelítés leegyszerűsíti a megfelelőséget, mivel elkerüli az élő rendszerek vizsgálatának összetettségét.
A tarball a teljes konténert tartalmazza, amely ezután a megfelelő eszközzel be lehet tölteni.
-
Docker-:
docker load -i ./images/container-image.tar.gz
-
Podman:
podman load -i ./images/container-image.tar.gz
.NET-alkalmazás közzététele a tárolóregisztrációs adatbázisban
A tárolóregisztrációs adatbázisok olyan szolgáltatások, amelyek tárolólemezképeket tárolnak és kezelnek. Konténerképek tárolására és terjesztésére szolgálnak különféle környezetekben. A .NET-alkalmazásokat tárolóként az alábbi paranccsal teheti közzé egy tárolóregisztrációs adatbázisban:
dotnet publish --os linux --arch x64 \
/t:PublishContainer \
-p ContainerRegistry=ghcr.io
Az előző kód tárolóként teszi közzé az alkalmazást egy tárolóregisztrációs adatbázisban:
- Linux operációs rendszerként való célzás (
--os linux
). - X64-architektúra (
--arch x64
) megadása. - A
ContainerRegistry
tulajdonság beállításaghcr.io
.
További információkért lásd: ContainerRegistry.
Erőforrások törlése
Ebben a cikkben egy .NET alkalmazást tett közzé konténerképként. Ha szeretné, törölje ezt az erőforrást. A telepített rendszerképek listájának megtekintéséhez használja a docker images
parancsot.
docker images
Vegye figyelembe a következő példakimenetet:
REPOSITORY TAG IMAGE ID CREATED SIZE
dotnet-worker-image 1.0.0 25aeb97a2e21 12 seconds ago 191MB
Borravaló
A képfájlok nagy méretűek lehetnek. Általában eltávolítaná az alkalmazás tesztelése és fejlesztése során létrehozott ideiglenes tárolókat. Az alaprendszerképeket általában a futtatókörnyezettel együtt kell tárolnia, ha az adott futtatókörnyezet alapján más rendszerképeket szeretne készíteni.
A kép törléséhez másolja ki a képazonosítót, és futtassa a docker image rm
parancsot:
docker image rm 25aeb97a2e21
Következő lépések
- A .NET SDK beépített tárolótámogatásának bejelentése
- oktatóanyag: .NET-alkalmazás tárolóba helyezése
- .NET-tárolórendszerképek
- A tárolókat támogató Azure-szolgáltatások áttekintése
- Tudnivalók a Dockerfile-parancsokról
- A Visual Studio tárolóeszközeinek megismerése