Gyakorlat – Tárolórendszerkép létrehozása a .NET-mikroszolgáltatáshoz
Ebben a gyakorlatban létrehoz egy mikroszolgáltatás-végpontot, és tárolóba helyezi azt a .NET SDK és a Docker használatával.
Feljegyzés
Ezt a gyakorlatot a Dockert és a .NET SDK-t tartalmazó GitHub Codespaces egy példányában végezheti el. Ha ezeket az eszközöket és technikákat a saját fejlesztési környezetében használja, győződjön meg arról, hogy telepítve vannak ezek az előfeltételek.
A fejlesztői környezet megnyitása
Használhat egy GitHub-kódteret, amely a gyakorlatot üzemelteti, vagy elvégezheti a gyakorlatot helyileg a Visual Studio Code-ban.
Kódtér használatához hozzon létre egy előre konfigurált GitHub Codespace-et ezzel a kódtér-létrehozási hivatkozással.
A GitHub több percet vesz igénybe a kódtér létrehozásához és konfigurálásához. Amikor a folyamat befejeződött, megjelenik a gyakorlat kódfájljai. A modul hátralévő részében használt kód a /dotnet-docker könyvtárban található.
A Visual Studio Code használatához klónozza az https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative adattárat a helyi gépre. Ekkor:
- Telepítse a Dev Container Visual Studio Code-ban való futtatásához szükséges rendszerkövetelményeket .
- Győződjön meg arról, hogy a Docker fut.
- Egy új Visual Studio Code-ablakban nyissa meg a klónozott adattár mappáját
- Nyomja le a Ctrl Shift+P billentyűkombinációt +a parancskatalógus megnyitásához.
- Keresés: >Tárolók fejlesztése: Újraépítés és újranyitás a tárolóban
- Válassza az eShopLite - dotnet-docker lehetőséget a legördülő listából. A Visual Studio Code helyileg hozza létre a fejlesztési tárolót.
A termékek háttérrendszerképének létrehozása a .NET-közzététel használatával
A legújabb .NET 8 kiadás javítja a tárolók támogatását. A dotnet publish
parancs használatával Docker-rendszerképet hozhat létre a mikroszolgáltatásokhoz. A parancs létrehoz egy gyökér nélküli tárolórendszerképet, amely szolgáltatásokat futtat egy app
fiók alatt. A gyökér nélküli tárolók futtatása kiválóan alkalmas a biztonságra és a teljesítményre. A parancs tudja, hogyan választhatja ki a legjobb alaprendszerképet a projektfájl beállításainak ellenőrzésével.
Az összes szolgáltatás lemezképeinek eShopLite létrehozásához lépjen a TERMINÁL lapra, és futtassa a következő parancsot:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainer
A kimenet a következő üzenetekhez hasonlóan jelenik meg:
DataEntities -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/DataEntities/bin/Release/net8.0/publish/ Products -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Products/bin/Release/net8.0/Products.dll Products -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Products/bin/Release/net8.0/publish/ Store -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Store/bin/Release/net8.0/Store.dll Store -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Store/bin/Release/net8.0/publish/ Building image 'store' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'. Building image 'products' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'. Pushed image 'store:latest' to local registry via 'docker'. Pushed image 'products:latest' to local registry via 'docker'.
A parancs beolvassa a megoldásfájlt, megállapította, hogy három projektet tartalmaz, létrehozta őket, és képeket hozott létre az áruház- és termékprojektekhez. A rendszerképeket a projektekről nevezik el, és közzéteszik a helyi Docker-beállításjegyzékben.
Ellenőrizze, hogy a képek elérhetők-e a Dockerben:
docker images
A kimenet a következő üzenetekhez hasonlóan jelenik meg:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 About a minute ago 293MB store latest e9458c3abdb1 About a minute ago 218MB
Dockerfile használata a Termékek háttérrendszerkép létrehozásához
Ha jobban szeretné szabályozni a rendszerképek létrehozásának módját, a Dockerfile használatával létrehozhat egy képet a Termékek webszolgáltatáshoz.
Az EXPLORER panelen hozzon létre egy Dockerfile nevű fájlt a ./dotnet-docker/Products fájlban. A fájl üres.
Írja be a következő kódot:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /DataEntities COPY "DataEntities/DataEntities.csproj" . RUN dotnet restore COPY "DataEntities" . RUN dotnet publish -c release -o /app
A következő lépések elvégzése után ez a kód beállítja a DataEntities könyvtárat a Products docker rendszerképben:
- Húzza le a képet,
mcr.microsoft.com/dotnet/sdk:8.0
és nevezze el a képetbuild
. - Állítsa be a munkakönyvtárat a képen belül a következőre
/DataEntities
: . - Másolja a helyben talált DataEntities.csproj fájlt a
/DataEntities
létrehozott könyvtárba. - Hívja fel
dotnet restore
a projektet. - Másolja a helyi DataEntities könyvtár minden elemét a képre.
- Hívja fel
dotnet publish
a projektet.
- Húzza le a képet,
Közvetlenül az utolsó sor alatt adja meg ezt a kódot:
WORKDIR /src COPY Products/Products.csproj . RUN dotnet restore COPY Products . RUN dotnet publish -c release -o /app
Ez a kód egymás után hajtja végre a következő lépéseket a meghíváskor:
- Állítsa be a munkakönyvtárat a képen belül a következőre
/src
: . - Másolja a helyileg talált Products.csproj fájlt a
/src
létrehozott könyvtárba. - Hívja fel
dotnet restore
a projektet. - Másolja a helyi Termékek könyvtár minden elemét a képre.
- Hívja fel
dotnet publish
a projektet.
- Állítsa be a munkakönyvtárat a képen belül a következőre
Közvetlenül az utolsó sor alatt adja meg ezt a kódot:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app . ENTRYPOINT ["dotnet", "Products.dll"]
Ez a kód egymás után hajtja végre a következő lépéseket a meghíváskor:
- Húzza le a
mcr.microsoft.com/dotnet/aspnet:8.0
képet. - Állítsa be a munkakönyvtárat a képen belül a következőre
/app
: . - Tegye elérhetővé a 80-at és a 443-at.
- Másolja a létrehozott buildkép alkalmazáskönyvtárából a rendszerkép alkalmazáskönyvtárába.
- A kép
dotnet
Products.dll
belépési pontjának beállítása argumentumként.
- Húzza le a
A Docker-rendszerkép létrehozása
A Dockerfile befejezése után a következő lépés egy Docker-rendszerkép létrehozása:
A Termékek háttérszolgáltatás rendszerképének létrehozásához lépjen a TERMINÁL lapra, és futtassa a következő parancsot:
cd ./dotnet-docker docker build -t productsbackend:latest -f Products/Dockerfile .
Ez futtatja a parancsokat a Dockerfile-ban az aktuális könyvtárban, és alkalmazza a productsbackend:latest címkét az eredményül kapott lemezképre.
Sok kimenet után a rendszerkép létre lesz hozva. A beírás
docker images
megjeleníti a kódtérben lévő összes kép listáját, beleértve a productsbackendet is. A másik kép maga a kódtér.A kimenet a következő üzenetekhez hasonlóan jelenik meg:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 10 minutes ago 293MB store latest e9458c3abdb1 10 minutes ago 218MB productsbackend latest 190783f7e06f About a minute ago 293MB
Gondolja át, hogy mi a különbség az alkalmazásokban lévő egyes mikroszolgáltatások Dockerfile-jainak manuális létrehozása és használata dotnet publish
között.
A tároló futtatása és a szolgáltatás tesztelése
Most már a rendszerkép használatával futtathatja és üzemeltetheti a Products szolgáltatást.
Ha tárolót szeretne létrehozni és futtatni az új termékrendszerképből , és el szeretnéérhetővé tenni a szolgáltatást a 32001-s porton, futtassa a következő parancsot:
docker run -it --rm -p 32001:8080 products
Vagy ha a Dockerfile használatával létrehozott lemezképet szeretné futtatni, futtassa a következőt:
docker run -it --rm -p 32001:8080 productsbackend
A szolgáltatás teszteléséhez váltson a PORTS fülre, majd a Háttérport helyi címétől jobbra válassza a földgömb ikont. A böngésző megnyit egy új lapot ezen a címen.
Egyes termékek lekérdezéséhez fűzze hozzá a címet az /api/product fájlhoz, majd nyomja le az Enter billentyűt. Néhány termékinformációnak JSON formátumban kell megjelennie.
[ { "id": 1, "name": "Solar Powered Flashlight", "description": "A fantastic product for outdoor enthusiasts", "price": 19.99, "imageUrl": "product1.png" }, { "id": 2, "name": "Hiking Poles", "description": "Ideal for camping and hiking trips", "price": 24.99, "imageUrl": "product2.png" }, { "id": 3, "name": "Outdoor Rain Jacket", "description": "This product will keep you warm and dry in all weathers", "price": 49.99, "imageUrl": "product3.png" }, ... ]