Megosztás a következőn keresztül:


.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, a dotnet --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- feldolgozói szolgáltatásait is ismerje, mivel a mintaprojekt feldolgozó.

.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ása ghcr.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