Øvelse – bygg et beholderbilde for .NET-mikrotjenesten
I denne øvelsen oppretter du et mikrotjenesteendepunkt og beholder det ved hjelp av .NET SDK og Docker.
Merk deg
Du kan fullføre denne øvelsen i en forekomst av GitHub Codespaces som har Docker og .NET SDK forhåndsinstallert. Når du bruker disse verktøyene og teknikkene i ditt eget utviklingsmiljø, må du kontrollere at du har disse forutsetningene installert.
Åpne utviklingsmiljøet
Du kan velge å bruke et GitHub-kodeområde som er vert for øvelsen, eller fullføre øvelsen lokalt i Visual Studio Code.
Hvis du vil bruke et kodeområde, oppretter du et forhåndskonfigurert GitHub-kodeområde med denne koblingen for oppretting av kodeområde.
GitHub bruker flere minutter på å opprette og konfigurere kodeområdet. Når prosessen er fullført, ser du kodefilene for øvelsen. Koden som brukes for resten av denne modulen, er i /dotnet-docker-katalogen .
Hvis du vil bruke Visual Studio Code, kloner du https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-repositoriet til den lokale maskinen. Da:
- Installer eventuelle systemkrav for å kjøre Utviklingsbeholder i Visual Studio Code.
- Sørg for at Docker kjører.
- Åpne mappen til det klonede repositoriet i et nytt Visual Studio Code-vindu
- Trykk CTRL+SKIFT+P for å åpne kommandopaletten.
- Søk: >utviklerbeholdere: Gjenoppbygge og åpne på nytt i beholder
- Velg eShopLite – dotnet-docker fra rullegardinlisten. Visual Studio Code oppretter utviklingsbeholderen lokalt.
Bruk .NET-publisering til å opprette bakbilde av produkter
Den nyeste versjonen av .NET 8 forbedrer støtten for beholdere. Du kan bruke dotnet publish kommandoen til å opprette et Docker-bilde for mikrotjenesten. Kommandoen oppretter et rotløst beholderbilde som kjører tjenester under en app konto. Det er flott å kjøre rotløse beholdere for sikkerhet og ytelse. Kommandoen vet hvordan du velger det beste basisbildet ved å kontrollere innstillingene i prosjektfilen.
Hvis du vil opprette bildene for alle eShopLite tjenestene, går du til TERMINAL-fanen og kjører denne kommandoen:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainerDu ser utdata som følgende meldinger:
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 leser løsningsfilen, fastslo at den inneholder tre prosjekter, bygde dem og opprettet bilder for store- og produktprosjekter. Bildene er oppkalt etter prosjektene og publisert i det lokale docker-registeret.
Kontroller at bildene er tilgjengelige i docker:
docker imagesDu ser utdata som følgende meldinger:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 About a minute ago 293MB store latest e9458c3abdb1 About a minute ago 218MB
Bruk en Dockerfile til å opprette bakbilde av produkter
Hvis du vil ha mer kontroll over hvordan bildene bygges, kan du bruke en Dockerfile til å opprette et bilde for produkter-nettjenesten.
Opprett en fil med navnet Dockerfile i ./dotnet-docker/Products i EXPLORER-ruten. Filen er tom.
Skriv inn 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 fullført følgende trinn, konfigurerer denne koden DataEntities-biblioteket i products docker-bildet:
- Dra bildet
mcr.microsoft.com/dotnet/sdk:8.0og gi bildetbuildet navn. - Angi arbeidskatalogen i bildet til
/DataEntities. - Kopier filen med navnet DataEntities.csproj funnet lokalt til katalogen
/DataEntitiesdu opprettet. - Ring
dotnet restorepå prosjektet. - Kopier alt i den lokale dataenheter-katalogen til bildet.
- Ring
dotnet publishpå prosjektet.
- Dra bildet
Skriv inn denne koden rett under den siste linjen:
WORKDIR /src COPY Products/Products.csproj . RUN dotnet restore COPY Products . RUN dotnet publish -c release -o /appDenne koden utfører følgende trinn sekvensielt når den aktiveres:
- Angi arbeidskatalogen i bildet til
/src. - Kopier filen Products.csproj som ble funnet lokalt til katalogen
/srcdu opprettet. - Ring
dotnet restorepå prosjektet. - Kopier alt i den lokale produktkatalogen til bildet.
- Ring
dotnet publishpå prosjektet.
- Angi arbeidskatalogen i bildet til
Skriv inn denne koden rett under den siste linjen:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app . ENTRYPOINT ["dotnet", "Products.dll"]Denne koden utfører følgende trinn sekvensielt når den aktiveres:
- Dra bildet
mcr.microsoft.com/dotnet/aspnet:8.0. - Angi arbeidskatalogen i bildet til
/app. - Vis port 80 og 443.
- Kopier alt fra appkatalogen for build-bildet du opprettet i appkatalogen for dette bildet.
- Angi inngangspunktet for dette bildet til
dotnetog sendProducts.dllsom et argument.
- Dra bildet
Opprett Docker-bildet
Etter å ha fullført Dockerfile, er neste trinn å bruke den til å opprette et Docker-bilde:
Hvis du vil opprette bildet for serverdeltjenesten produkter, går du til TERMINAL-fanen og kjører denne kommandoen:
cd ./dotnet-docker docker build -t productsbackend:latest -f Products/Dockerfile .Dette kjører kommandoene i Dockerfile i gjeldende katalog og bruker koden productsbackend:latest på det resulterende bildet.
Etter mye utdata bygges bildet. Når du skriver inn
docker images, vises en liste over alle bildene i kodeområdet, inkludert productsbackend. Det andre bildet er det for selve kodeområdet.Du ser utdata som følgende meldinger:
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
Tenk på forskjellen mellom å bruke dotnet publish og å måtte opprette Dockerfiles manuelt for hver mikrotjeneste i appene dine.
Kjør beholderen og test tjenesten
Nå kan du bruke bildet til å kjøre og være vert for Produkter-tjenesten.
Hvis du vil opprette og kjøre en beholder fra det nye produktbildet og vise tjenesten på port 32001, kjører du denne kommandoen:
docker run -it --rm -p 32001:8080 productsEller hvis du vil kjøre bildet du opprettet ved hjelp av Dockerfile, kan du kjøre:
docker run -it --rm -p 32001:8080 productsbackendHvis du vil teste tjenesten, bytter du til PORTER-fanen og velger globusikonet til høyre for den lokale adressen for serverdelporten . Nettleseren åpner en ny fane på denne adressen.
Hvis du vil spørre noen produkter, tilføyer du adressen med /api/product og trykker deretter på ENTER. Du bør se noe produktinformasjon oppført 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" }, ... ]