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


Docker-tárolók testreszabása a Visual Studióban

A tárolólemezképek testreszabásához szerkessze a Visual Studio által a Docker-támogatás projekthez való hozzáadásakor létrehozott Docker-fájlt. 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 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.

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 .NET-alkalmazások tárolóba helyezése dotnet közzétételi és a tároló buildelési folyamatának konfigurálásához A tárolók testreszabása című cikkben 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öbblépcsős 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:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

A Dockerfile sorai a Microsoft Container Registry (mcr.microsoft.com) ASP.NET lemezképével kezdődnek, és létrehoznak egy köztes rendszerképet (base), amely megnyitja a 80-as és 443-as portokat, valamint beállítja a munkakönyvtárat /app-re.

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:3.1-buster-slim 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
alap 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ó).
épít 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 natív Ahead Of Time (AOT) üzembe helyezés engedélyezve van a projektben.

Projekt bemelegítése

Projekt bemelegítési olyan lépések sorozatára utal, amelyek akkor fordulnak elő, amikor a Docker-profilt kiválasztják egy projekthez (vagyis amikor betöltenek egy projektet, vagy hozzáadják a Docker-támogatást) a későbbi futtatások teljesítményének javítása érdekében (F5 vagy Ctrl+F5). Ez a viselkedés az Eszközök>Beállítások>Tárolóeszközökterü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 ez 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.