Oefening: een containerinstallatiekopieën bouwen voor uw .NET-microservice
In deze oefening maakt u een microservice-eindpunt en containeriseert u het met behulp van de .NET SDK en Docker.
Notitie
U kunt deze oefening uitvoeren in een exemplaar van GitHub Codespaces waarop Docker en de .NET SDK vooraf zijn geïnstalleerd. Wanneer u deze hulpprogramma's en technieken in uw eigen ontwikkelomgeving gebruikt, moet u ervoor zorgen dat deze vereisten zijn geïnstalleerd.
De ontwikkelomgeving openen
U kunt ervoor kiezen om een GitHub-coderuimte te gebruiken die als host fungeert voor de oefening of om de oefening lokaal te voltooien in Visual Studio Code.
Als u een codespace wilt gebruiken, maakt u een vooraf geconfigureerde GitHub Codespace met deze koppeling voor het maken van Codespace.
GitHub duurt enkele minuten om de codespace te maken en te configureren. Wanneer het proces is voltooid, ziet u de codebestanden voor de oefening. De code die voor de rest van deze module wordt gebruikt, bevindt zich in de map /dotnet-docker .
Als u Visual Studio Code wilt gebruiken, kloont u de https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative opslagplaats naar uw lokale computer. Daarna kunt u het volgende doen:
- Installeer eventuele systeemvereisten voor het uitvoeren van Dev Container in Visual Studio Code.
- Zorg ervoor dat Docker wordt uitgevoerd.
- Open in een nieuw Visual Studio Code-venster de map van de gekloonde opslagplaats
- Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.
- Zoeken: Dev-containers: >opnieuw bouwen en opnieuw openen in container
- Selecteer eShopLite - dotnet-docker in de vervolgkeuzelijst. Visual Studio Code maakt uw ontwikkelcontainer lokaal.
.NET publish gebruiken om de back-endinstallatiekopieën van producten te maken
De nieuwste versie van .NET 8 verbetert de ondersteuning voor containerisatie. U kunt de dotnet publish
opdracht gebruiken om een Docker-installatiekopieën voor uw microservices te maken. Met de opdracht maakt u een containerinstallatiekopieën zonder hoofdmap die services uitvoert onder een app
account. Het uitvoeren van rootless containers is ideaal voor beveiliging en prestaties. De opdracht weet hoe u de beste basisinstallatiekopieën kunt kiezen door de instellingen in het projectbestand te controleren.
Als u de installatiekopieën voor alle eShopLite services wilt maken, gaat u naar het tabblad TERMINAL en voert u deze opdracht uit:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainer
U ziet uitvoer zoals de volgende berichten:
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'.
Met de opdracht wordt het oplossingsbestand gelezen, bepaald dat het drie projecten bevat, deze gebouwd en installatiekopieën gemaakt voor de projecten voor de winkel en producten. De installatiekopieën worden vernoemd naar de projecten en gepubliceerd in het lokale Docker-register.
Controleer of de installatiekopieën beschikbaar zijn in Docker:
docker images
U ziet uitvoer zoals de volgende berichten:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 About a minute ago 293MB store latest e9458c3abdb1 About a minute ago 218MB
Een Dockerfile gebruiken om de back-endinstallatiekopieën van producten te maken
Als u meer controle wilt over hoe de installatiekopieën worden gebouwd, kunt u een Dockerfile gebruiken om een installatiekopie voor de webservice Producten te maken.
Maak in het deelvenster EXPLORER een bestand met de naam Dockerfile in ./dotnet-docker/Products. Het bestand is leeg.
Voer de volgende code in:
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
Nadat u de volgende stappen hebt voltooid, wordt met deze code de bibliotheek DataEntities ingesteld in de Docker-installatiekopieën van producten:
- Haal de
mcr.microsoft.com/dotnet/sdk:8.0
installatiekopie op en geef de installatiekopiebuild
een naam. - Stel de werkmap in de afbeelding in op
/DataEntities
. - Kopieer het bestand met de naam DataEntities.csproj lokaal naar de
/DataEntities
map die u hebt gemaakt. - Roep
dotnet restore
het project aan. - Kopieer alles in de lokale map DataEntities naar de installatiekopie.
- Roep
dotnet publish
het project aan.
- Haal de
Voer direct onder de laatste regel deze code in:
WORKDIR /src COPY Products/Products.csproj . RUN dotnet restore COPY Products . RUN dotnet publish -c release -o /app
Deze code voert de volgende stappen sequentieel uit wanneer deze wordt aangeroepen:
- Stel de werkmap in de afbeelding in op
/src
. - Kopieer het bestand Met de naam Products.csproj lokaal naar de
/src
map die u hebt gemaakt. - Roep
dotnet restore
het project aan. - Kopieer alles in de lokale map Producten naar de installatiekopie.
- Roep
dotnet publish
het project aan.
- Stel de werkmap in de afbeelding in op
Voer direct onder de laatste regel deze code in:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app . ENTRYPOINT ["dotnet", "Products.dll"]
Deze code voert de volgende stappen sequentieel uit wanneer deze wordt aangeroepen:
- Haal de
mcr.microsoft.com/dotnet/aspnet:8.0
afbeelding op. - Stel de werkmap in de afbeelding in op
/app
. - Poort 80 en 443 beschikbaar maken.
- Kopieer alles uit de app-map van de build-installatiekopie die u hebt gemaakt in de app-map van deze installatiekopie.
- Stel het toegangspunt van deze afbeelding
dotnet
in en geefProducts.dll
deze door als argument.
- Haal de
De Docker-installatiekopieën maken
Nadat u het Dockerfile hebt voltooid, is de volgende stap het gebruiken om een Docker-installatiekopieën te maken:
Als u de installatiekopieën voor de back-endservice Producten wilt maken, gaat u naar het tabblad TERMINAL en voert u deze opdracht uit:
cd ./dotnet-docker docker build -t productsbackend:latest -f Products/Dockerfile .
Hiermee worden de opdrachten uitgevoerd in Dockerfile in de huidige map en wordt de tag productsbackend:latest toegepast op de resulterende installatiekopieën.
Na veel uitvoer wordt de installatiekopie gebouwd. Als
docker images
u invoert, ziet u een lijst met alle afbeeldingen in uw codespace, inclusief productsbackend. De andere afbeelding is de afbeelding voor de codespace zelf.U ziet uitvoer zoals de volgende berichten:
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
Denk na over het verschil tussen het gebruik dotnet publish
en het handmatig maken van de Dockerfiles voor elke microservice in uw apps.
De container uitvoeren en de service testen
U kunt nu de installatiekopie gebruiken om de productenservice uit te voeren en te hosten.
Als u een container wilt maken en uitvoeren op basis van de installatiekopieën van nieuwe producten en de service beschikbaar wilt maken op poort 32001, voert u deze opdracht uit:
docker run -it --rm -p 32001:8080 products
Of als u de installatiekopieën wilt uitvoeren die u hebt gemaakt met behulp van het Dockerfile, voert u het volgende uit:
docker run -it --rm -p 32001:8080 productsbackend
Als u de service wilt testen, gaat u naar het tabblad POORTEN en selecteert u rechts van het lokale adres voor de back-endpoort het wereldbolpictogram. De browser opent een nieuw tabblad op dat adres.
Als u een query wilt uitvoeren op sommige producten, voegt u het adres toe met /api/product en drukt u op Enter. Als het goed is, ziet u een aantal productgegevens in JSON-indeling.
[ { "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" }, ... ]