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.
Kapcsolódó tartalom
- MSBuild tulajdonságok tárolóprojektekhez.
- Dockerfile a Windows
- Linux-tárolók Windows