Tárolók testreszabása a Visual Studióban

A konténerképeket testre szabhatja a Visual Studio által létrehozott Dockerfile szerkesztésével, amikor a projektjéhez hozzáadja a konténer támogatást. Akár testre szabott tárolót hoz létre a Visual Studio IDE-ből, akár parancssori buildet állít be, tudnia kell, hogyan használja a Visual Studio a Dockerfile-t a projektek létrehozásához. Ezeket a részleteket ismernie kell, mert teljesítménybeli okokból a Visual Studio egy speciális folyamatot követ tárolóalapú alkalmazások létrehozására és futtatására, amelyek nem egyértelműek a Dockerfile-ból.

Tegyük fel, hogy módosítani szeretné a Dockerfile-t, és az eredményeket mind a hibakeresési környezetben, mind az éles környezetben látni szeretné. Ebben az esetben hozzáadhat parancsokat a Dockerfile-ban az első szakasz módosításához (általában base). Lásd: Konténerkép módosítása hibakereséshez és éles környezethez. Ha azonban csak hibakereséskor szeretne módosítást végezni, de éles környezetben nem, akkor létre kell hoznia egy másik szakaszt, és a ContainerFastModeStage összeállítási beállítással tudathatja a Visual Studióval, hogy használja ezt a szakaszt a buildek hibakereséséhez. Lásd A tároló képmódosítása csak hibakeresési célból.

Tegyük fel, hogy módosítani szeretné a Dockerfile-t, és az eredményeket mind a hibakeresési környezetben, mind az éles környezetben látni szeretné. Ebben az esetben hozzáadhat parancsokat a Dockerfile-ban az első szakasz módosításához (általában base). Lásd: Konténerkép módosítása hibakereséshez és éles környezethez. Ha azonban csak hibakereséskor szeretne módosítást végezni, de éles környezetben nem, akkor létre kell hoznia egy másik szakaszt, és a DockerfileFastModeStage összeállítási beállítással tudathatja a Visual Studióval, hogy használja ezt a szakaszt a buildek hibakereséséhez. Lásd A tároló képmódosítása csak hibakeresési célból.

Ez a cikk részletesen ismerteti a Tárolóalapú alkalmazások Visual Studio-buildelési folyamatát, majd információkat tartalmaz arról, hogyan módosíthatja a Dockerfile-t úgy, hogy az hatással legyen a hibakeresésre és az éles buildekre, vagy csak a hibakeresésre.

Előfeltételek

Előfeltételek

  • Docker Desktop.
  • A Visual Studio telepítve van a ASP.NET és webfejlesztéssel, az Azure fejlesztési számítási feladatával és/vagy a .NET asztali fejlesztési számítási feladatával.

Dockerfile építések a Visual Studióban

Jegyzet

Ez a szakasz azt a tárolóépítési folyamatot ismerteti, amelyet a Visual Studio a Dockerfile-tároló buildtípusának kiválasztásakor használ. Ha a .NET SDK buildtípust használja, a testreszabási beállítások eltérőek, és az ebben a szakaszban szereplő információk nem alkalmazhatók. Ehelyett tekintse meg a A .NET alkalmazás tárolóba helyezése a dotnet publish használatával című részt, és a tároló buildelési folyamatának konfigurálásához használja a Tároló testreszabása részben ismertetett tulajdonságokat.

Többlépcsős buildelés

Amikor a Visual Studio olyan projektet hoz létre, amely nem használ Docker-tárolókat, meghívja az MSBuild parancsot a helyi gépen, és létrehozza a kimeneti fájlokat egy mappában (általában bin) a helyi megoldásmappában. Tárolóalapú projektek esetében azonban a buildelési folyamat figyelembe veszi a Dockerfile a tárolóalapú alkalmazás készítésére vonatkozó utasításait. A Visual Studio által használt Dockerfile több szakaszra van osztva. Ez a folyamat a Docker többszintű buildelési funkciójára támaszkodik.

A többlépcsős buildelési funkció hatékonyabbá teszi a tárolók létrehozásának folyamatát, és kisebbé teszi a tárolókat azáltal, hogy lehetővé teszi számukra, hogy csak azokat a biteket tartalmazzák, amelyekre az alkalmazásnak szüksége van futásidőben.

A multistage build a .NET Core-projektekhez használatos, nem a .NET-keretrendszer-projektekhez.

A többlépcsős build lehetővé teszi, hogy a tárolóképek több szakaszban készüljenek el, amelyek köztes képeket hoznak létre. Vegyük például egy tipikus Dockerfile-t. Az első szakasz neve base a Visual Studio által létrehozott Dockerfile-ban, bár az eszközöknek nincs szükségük erre a névre.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

A Dockerfile sorai a Microsoft Container Registry (mcr.microsoft.com) ASP.NET image használatával kezdődnek, és létrehoznak egy köztes képet base, amely nyitja a 8080-as és 8081-es portokat, valamint beállítja a munkakönyvtárat /app.

A .NET 7-es és újabb verziójának megcélzásakor megjelenik a USER $APP_UID sor, amely emelt szintű jogosultságok nélkül futtatja a tárolót a környezeti változótól APP_UIDkapott felhasználónévvel. A portok 8080 és 8081, nem pedig 80 és 443, amelyek emelt szintű jogosultságokat igényelnek.

A következő szakasz a build, amely a következőképpen jelenik meg:

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["WebApplication43/WebApplication43.csproj", "WebApplication43/"]
RUN dotnet restore "WebApplication43/WebApplication43.csproj"
COPY . .
WORKDIR "/src/WebApplication43"
RUN dotnet build "WebApplication43.csproj" -c Release -o /app/build

Láthatja, hogy a build szakasz az adatbázis egy másik eredeti képéből indul ki (sdk ahelyett, hogy aspnet-ből), és nem a bázisból folytatódik. A sdk rendszerkép tartalmazza az összes buildelési eszközt, ezért sokkal nagyobb, mint az aspnet rendszerkép, amely csak futtatókörnyezeti összetevőket tartalmaz. A különálló rendszerkép használatának oka a Dockerfile többi részének megtekintésekor egyértelművé válik:

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication43.csproj" -c Release -o /app/publish

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication43.dll"]

Az utolsó szakasz base-tól kezdődik újra, és magában foglalja a COPY --from=publish-t, hogy a közzétett kimenetet a végső képre másolja. Ez a folyamat lehetővé teszi, hogy a végső rendszerkép sokkal kisebb legyen, mivel nem kell minden olyan buildelési eszközt tartalmaznia, amely a sdk lemezképben volt.

Az alábbi táblázat a Visual Studio által létrehozott tipikus Dockerfile-ban használt szakaszokat foglalja össze:

Színpad Leírás
alapkép Létrehozza az alap futtatókörnyezeti rendszerképet, ahol a beépített alkalmazás közzé van téve. A futtatókörnyezetben elérhető beállítások, például a portok és a környezeti változók itt érhetők el. Ezt a szakaszt akkor használja a rendszer, ha gyors módban fut a VS-ből (alapértelmezett hibakeresési konfiguráció).
build A projekt ebben a szakaszban készült el. A rendszer a .NET SDK alaprendszerképét használja, amely tartalmazza a projekt létrehozásához szükséges összetevőket.
közzétesz Ez a szakasz a buildelési fázisból származik, és közzéteszi a projektet, amelyet a rendszer az utolsó fázisba másol.
utolsó Ez a szakasz konfigurálja az alkalmazás indításának módját, és termelési környezetben vagy a VS-ből normál módban történő futtatásakor használatos (alapértelmezett, ha nem használja a hibakeresési konfigurációt).
aotdebug Ez a szakasz szolgál az utolsó szakasz alapjául a VS-ből való indításkor, hogy támogassa a hibakeresést normál módban (alapértelmezett, ha nem használja a hibakeresési konfigurációt).

Jegyzet

A aotdebug szakasz csak Linux-tárolók esetén támogatott. A Visual Studio 2022 17.11-ben és újabb verzióiban használatos, ha a natív Idő előtt (AOT) üzembe helyezés engedélyezve van a projekten.

Projekt bemelegítése

A projektbemelegítés olyan lépések sorozatára utal, amelyek akkor fordulnak elő, amikor a tárolóprofilt kiválasztják egy projekthez (azaz amikor betöltenek egy projektet, vagy tárolótámogatást adnak hozzá) a későbbi futtatások teljesítményének javítása érdekében (F5 vagy Ctrl+F5).

Ez a viselkedés konfigurálható az Eszközök>beállításaipanelen, a Minden beállítás>tárolóeszközök területén. A háttérben futó feladatok a következők:

  • Ellenőrizze, hogy a tároló futtatókörnyezete (Docker Desktop vagy Podman) telepítve van-e és fut-e.
  • Győződjön meg arról, hogy a Docker Desktop ugyanarra az operációs rendszerre van állítva, mint a projekt. (Ez az ellenőrzés nem vonatkozik a Podmanre, amely csak a Linux-tárolókat támogatja.)
  • Töltse le a képeket a Dockerfile első szakaszában (a legtöbb Dockerfile base szakaszában).
  • Hozza létre a Dockerfile-t, és indítsa el a tárolót.

Ez a viselkedés az Eszközök>beállításai>tárolóeszközök területen konfigurálható. A háttérben futó feladatok a következők:

  • Ellenőrizze, hogy a Docker Desktop telepítve van-e és fut-e.
  • Győződjön meg arról, hogy a Docker Desktop ugyanarra az operációs rendszerre van állítva, mint a projekt.
  • Töltse le a képeket a Dockerfile első szakaszában (a legtöbb Dockerfile base szakaszában).
  • Hozza létre a Dockerfile-t, és indítsa el a tárolót.

A bemelegítés csak Gyors módban történik, így a futó tárolóban a alkalmazás mappa kötetként van csatolva. Ez azt jelenti, hogy az alkalmazás minden módosítása nem érvényteleníti a tárolót. Ez a viselkedés jelentősen javítja a hibakeresési teljesítményt, és csökkenti a hosszú ideig futó feladatok, például a nagy képek lekérése várakozási idejét.

Konténer eszközök részletes naplóinak engedélyezése

Diagnosztikai célokra engedélyezheti bizonyos Container Tools-naplókat. Ezeket a naplókat bizonyos környezeti változók beállításával engedélyezheti. Egyetlen tárolóprojekt esetén a környezeti változó MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLED, amely ezután bejelentkezik %tmp%\Microsoft.VisualStudio.Containers.Tools. Docker Compose-projektek esetén a változó az MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, amely ezután bejelentkezik %tmp%\Microsoft.VisualStudio.DockerCompose.Tools.

Figyelmeztetés

Ha a naplózás engedélyezve van, és tokenproxyt használ az Azure-hitelesítéshez, a hitelesítési hitelesítő adatok egyszerű szövegként naplózhatók. Lásd: Azure-hitelesítés konfigurálása.

Következő lépések

Tanulja meg, hogyan használhatja a Dockerfile szakaszait a hibakereséshez és az éles környezethez használt képek testreszabására, például hogyan telepíthet eszközt a képre csak hibakereséskor. Lásd: Tárolólemezképek konfigurálása hibakereséshez.