Övning – Skapa en containeravbildning för .NET-mikrotjänsten
I den här övningen skapar du en mikrotjänstslutpunkt och containeriserar den med hjälp av .NET SDK och Docker.
Notera
Du kan slutföra den här övningen i en instans av GitHub Codespaces som har Docker- och .NET SDK förinstallerad. När du använder de här verktygen och teknikerna i din egen utvecklingsmiljö ska du se till att du har dessa förutsättningar installerade.
Öppna utvecklingsmiljön
Du kan välja att använda ett GitHub-kodområde som är värd för övningen eller slutföra övningen lokalt i Visual Studio Code.
Om du vill använda ett kodområdeskapar du ett förkonfigurerat GitHub Codespace med denna Codespace-skapningslänk.
GitHub tar flera minuter att skapa och konfigurera kodområdet. När processen är klar visas kodfilerna för övningen. Koden som används för resten av den här modulen finns i katalogen /dotnet-docker.
Om du vill använda Visual Studio Code, klonar du https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative arkivet till din lokala dator. Då:
- Installera alla systemkrav för att köra Dev Container i Visual Studio Code.
- Kontrollera att Docker körs.
- Öppna mappen för den klonade lagringsplatsen i ett nytt Visual Studio Code-fönster
- Tryck på Ctrl+Skift+P för att öppna kommandopaletten.
- Sök: >Dev Containers: Bygg om och öppna igen i container
- Välj eShopLite – dotnet-docker i listrutan. Visual Studio Code skapar din utvecklingscontainer lokalt.
Använd .NET publish för att skapa back-end-avbildningen för Produkter
Den senaste .NET 8-versionen förbättrar stödet för containerisering. Du kan använda kommandot dotnet publish
för att skapa en Docker-avbildning för dina mikrotjänster. Kommandot skapar en rotlös containeravbildning som kör tjänster under ett app
konto. Att köra rotlösa containrar är bra för säkerhet och prestanda. Kommandot vet hur du väljer den bästa basavbildningen genom att kontrollera inställningarna i projektfilen.
Om du vill skapa avbildningar för alla eShopLite tjänster går du till fliken TERMINAL och kör följande kommando:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainer
Du ser utdata som följande meddelanden:
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'.
Kommandot läser lösningsfilen, fastslog att den innehåller tre projekt, skapade dem och skapade avbildningar för butiks- och produktprojekten. Avbildningarna namnges efter projekten och publiceras i det lokala Docker-registret.
Kontrollera att avbildningarna är tillgängliga i docker:
docker images
Du ser utdata som följande meddelanden:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 About a minute ago 293MB store latest e9458c3abdb1 About a minute ago 218MB
Använd en Dockerfile för att skapa avbildningen för Produkters back-end
Om du vill ha mer kontroll över hur avbildningarna skapas kan du använda en Dockerfile för att skapa en avbildning för webbtjänsten Produkter.
I fönstret EXPLORER skapar du en fil med namnet Dockerfile i ./dotnet-docker/Products. Filen är tom.
Ange följande kod:
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
När du har slutfört följande steg konfigurerar den här koden dataentitetsbiblioteket i docker-avbildningen Products:
- Hämta
mcr.microsoft.com/dotnet/sdk:8.0
-avbildningen och ge bilden namnetbuild
. - Ange arbetskatalogen i avbildningen till
/DataEntities
. - Kopiera filen med namnet DataEntities.csproj som hittas lokalt till den katalog
/DataEntities
som du skapade. - Anropa
dotnet restore
i projektet. - Kopiera allt i den lokala DataEntiteter mapp till avbildningen.
- Anropa
dotnet publish
i projektet.
- Hämta
Ange följande kod direkt under den sista raden:
WORKDIR /src COPY Products/Products.csproj . RUN dotnet restore COPY Products . RUN dotnet publish -c release -o /app
Den här koden utför följande steg sekventiellt när den anropas:
- Ange arbetskatalogen i avbildningen till
/src
. - Kopiera filen med namnet Products.csproj hittad lokalt till den katalogen
/src
som du skapade. - Kontakta
dotnet restore
i projektet. - Kopiera allt i den lokala katalogen Products till avbildningen.
- Kontakta
dotnet publish
i projektet.
- Ange arbetskatalogen i avbildningen till
Ange följande kod direkt under den sista raden:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app . ENTRYPOINT ["dotnet", "Products.dll"]
Den här koden utför följande steg sekventiellt när den anropas:
- Hämta
mcr.microsoft.com/dotnet/aspnet:8.0
bilden. - Ange arbetskatalogen i avbildningen till
/app
. - Exponera port 80 och 443.
- Kopiera allt från katalogen app för skapa avbildning som du skapade i katalogen app i den här avbildningen.
- Ange startpunkten för den här bilden till
dotnet
och skickaProducts.dll
som ett argument.
- Hämta
Skapa Docker-avbildningen
När du har slutfört Dockerfile är nästa steg att använda den för att skapa en Docker-avbildning:
Om du vill skapa avbildningen för serverdelstjänsten Produkter går du till fliken TERMINAL och kör följande kommando:
cd ./dotnet-docker docker build -t productsbackend:latest -f Products/Dockerfile .
Detta kör kommandona i Dockerfile i den aktuella katalogen och tillämpar taggen productsbackend:latest på den resulterande avbildningen.
Efter mycket utdata skapas avbildningen. När du anger
docker images
visas en lista över alla bilder i kodområdet, inklusive productsbackend. Den andra avbildningen är den för själva kodområdet.Du ser utdata som följande meddelanden:
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
Tänk på skillnaden mellan att använda dotnet publish
och att manuellt skapa Dockerfiles- för varje mikrotjänst i dina appar.
Kör containern och testa tjänsten
Nu kan du använda avbildningen för att köra och hosta tjänsten Products.
Kör följande kommando för att skapa och köra en container från den nya avbildningen för produkter och öppna tjänsten på port 32001:
docker run -it --rm -p 32001:8080 products
Eller om du vill köra avbilden du skapade med Dockerfile, kör:
docker run -it --rm -p 32001:8080 productsbackend
Om du vill testa tjänsten växlar du till fliken PORTar och väljer sedan globeikonen till höger om den lokala adressen för porten Back End. Webbläsaren öppnar en ny flik på den adressen.
Om du vill fråga efter vissa produkter lägger du till adressen med /api/product och trycker sedan på Retur. Du bör se viss produktinformation i JSON-format.
[ { "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" }, ... ]