Øvelse – Opret et objektbeholderbillede til din .NET-mikrotjeneste
I denne øvelse skal du oprette et mikrotjenesteslutpunkt og objektbeholderisere det ved hjælp af .NET SDK og Docker.
Seddel
Du kan fuldføre denne øvelse i en forekomst af GitHub Codespaces, der har Docker- og .NET SDK- forudinstalleret. Når du bruger disse værktøjer og teknikker i dit eget udviklingsmiljø, skal du sørge for, at disse forudsætninger er installeret.
Åbn udviklingsmiljøet
Du kan vælge at bruge et GitHub-kodeområde, der er vært for øvelsen, eller fuldføre øvelsen lokalt i Visual Studio Code.
Hvis du vil bruge et kodeområde, skal du oprette et forudkonfigureret GitHub-kodeområde med dette link til oprettelse af kodeområde.
GitHub tager flere minutter at oprette og konfigurere kodeområdet. Når processen er fuldført, kan du se kodefilerne til øvelsen. Den kode, der bruges til resten af dette modul, findes i mappen /dotnet-docker.
Hvis du vil bruge Visual Studio Code, skal du klone det https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative lager til din lokale computer. Derpå:
- Installér alle systemkrav for at køre Dev Container i Visual Studio Code.
- Kontrollér, at Docker kører.
- Åbn mappen med det klonede lager i et nyt Visual Studio Code-vindue
- Tryk Ctrl+Skift+P- for at åbne kommandopaletten.
- Søg efter: >udviklerobjektbeholdere: Genopbyg og genåbn i objektbeholder
- Vælg eShopLite – dotnet-docker- på rullelisten. Visual Studio Code opretter din udviklingsobjektbeholder lokalt.
Brug .NET publicer til at oprette back end-afbildningen af Products
Den seneste .NET 8-version forbedrer understøttelsen af objektbeholderisering. Du kan bruge kommandoen dotnet publish til at oprette et Docker-billede til dine mikrotjenester. Kommandoen opretter et rodløst objektbeholderbillede, der kører tjenester under en app konto. Kørsel af rodløse objektbeholdere er velegnet til sikkerhed og ydeevne. Kommandoen ved, hvordan du vælger det bedste basisbillede ved at kontrollere indstillingerne i projektfilen.
Hvis du vil oprette billederne for alle de eShopLite tjenester, skal du gå til fanen TERMINAL og køre denne kommando:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainerDu kan se output som følgende meddelelser:
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'.Kommandoen læser løsningsfilen, fastslår, at den indeholder tre projekter, byggede dem og oprettede billeder til butiks- og produktprojekter. Billederne er navngivet efter projekterne og publiceret i den lokale docker-registreringsdatabase.
Kontrollér, at billederne er tilgængelige i docker:
docker imagesDu kan se output som følgende meddelelser:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 About a minute ago 293MB store latest e9458c3abdb1 About a minute ago 218MB
Brug en Dockerfile til at oprette back end-billedet Products
Hvis du vil have mere kontrol over, hvordan billederne bygges, kan du bruge en Dockerfile til at oprette et billede til webtjenesten Products.
I ruden EXPLORER skal du oprette en fil med navnet Dockerfile i ./dotnet-docker/Products. Filen er tom.
Angiv følgende kode:
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 /appNår du har fuldført følgende trin, konfigurerer denne kode biblioteket DataEntities på afbildningen Products docker:
- Træk det
mcr.microsoft.com/dotnet/sdk:8.0billede, og navngiv billedetbuild. - Angiv arbejdsmappen på billedet til
/DataEntities. - Kopiér filen med navnet DataEntities.csproj, findes lokalt, til den
/DataEntitiesmappe, du har oprettet. - Ring til
dotnet restorepå projektet. - Kopiér alt i den lokale DataEntities mappe til billedet.
- Ring til
dotnet publishpå projektet.
- Træk det
Angiv denne kode direkte under den sidste linje:
WORKDIR /src COPY Products/Products.csproj . RUN dotnet restore COPY Products . RUN dotnet publish -c release -o /appDenne kode udfører følgende trin sekventielt, når den aktiveres:
- Angiv arbejdsmappen på billedet til
/src. - Kopiér filen med navnet Products.csproj fundet lokalt til den
/srcmappe, du har oprettet. - Ring til
dotnet restorepå projektet. - Kopiér alt i den lokale Products mappe til billedet.
- Ring til
dotnet publishpå projektet.
- Angiv arbejdsmappen på billedet til
Angiv denne kode direkte under den sidste linje:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app . ENTRYPOINT ["dotnet", "Products.dll"]Denne kode udfører følgende trin sekventielt, når den aktiveres:
- Træk billedet
mcr.microsoft.com/dotnet/aspnet:8.0. - Angiv arbejdsmappen på billedet til
/app. - Vis port 80 og 443.
- Kopiér alt fra app--mappen for det build billede, du har oprettet, til mappen app for dette billede.
- Angiv indgangspunktet for dette billede for at
dotnetog overføreProducts.dllsom et argument.
- Træk billedet
Opret Docker-billedet
Når Dockerfile er fuldført, er det næste trin at bruge den til at oprette et Docker-billede:
Hvis du vil oprette billedet for back end-tjenesten Products, skal du gå til fanen TERMINAL og køre denne kommando:
cd ./dotnet-docker docker build -t productsbackend:latest -f Products/Dockerfile .Dette kører kommandoerne i Dockerfile i den aktuelle mappe og anvender koden productsbackend:latest på det resulterende billede.
Efter meget output bygges billedet. Hvis du angiver
docker images, kan du se en liste over alle billeder i kodeområdet, herunder productsbackend. Det andet billede er det for selve kodeområdet.Du kan se output som følgende meddelelser:
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å forskellen mellem at bruge dotnet publish og at skulle oprette Dockerfiles manuelt for hver mikrotjeneste i dine apps.
Kør objektbeholderen, og test tjenesten
Nu kan du bruge billedet til at køre og hoste tjenesten Products.
Hvis du vil oprette og køre en objektbeholder fra de nye produkter billede og vise tjenesten på port 32001, skal du køre denne kommando:
docker run -it --rm -p 32001:8080 productsEller hvis du vil køre det billede, du har oprettet ved hjælp af Dockerfile, skal du køre:
docker run -it --rm -p 32001:8080 productsbackendHvis du vil teste tjenesten, skal du skifte til fanen PORTE og derefter vælge globusikonet til højre for den lokale adresse for Back End port. Browseren åbner en ny fane på den pågældende adresse.
Hvis du vil forespørge om nogle produkter, skal du tilføje adressen med /api/product og derefter trykke på Enter. Du bør kunne se nogle produktoplysninger, der er angivet 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" }, ... ]