Oefening: een containerinstallatiekopieën bouwen voor uw .NET-microservice

Voltooid

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:

  1. Installeer eventuele systeemvereisten voor het uitvoeren van Dev Container in Visual Studio Code.
  2. Zorg ervoor dat Docker wordt uitgevoerd.
  3. Open in een nieuw Visual Studio Code-venster de map van de gekloonde opslagplaats
  4. Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.
  5. Zoeken: Dev-containers: >opnieuw bouwen en opnieuw openen in container
  6. 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.

  1. 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.

  2. 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.

  1. Maak in het deelvenster EXPLORER een bestand met de naam Dockerfile in ./dotnet-docker/Products. Het bestand is leeg.

  2. 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 installatiekopie buildeen 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.
  3. 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.
  4. 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 geef Products.dll deze door als argument.

De Docker-installatiekopieën maken

Nadat u het Dockerfile hebt voltooid, is de volgende stap het gebruiken om een Docker-installatiekopieën te maken:

  1. 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.

  2. 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.

  1. 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
    
  2. 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.

    Schermopname die laat zien hoe u verbinding maakt met de back-endproductenservice.

  3. 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"
        },
        ...
    ]