Oefening: Een Docker-installatiekopie aanpassen voor het uitvoeren van uw eigen web-app

Voltooid

Een Dockerfile bevat de stappen voor het bouwen van een aangepaste Docker-installatiekopie.

U besluit een van de web-apps van uw organisatie te implementeren met behulp van Docker. U selecteert een eenvoudige web-app die een web-API implementeert voor een website voor hotelreserveringen. De web-API maakt HTTP POST- en GET-bewerkingen beschikbaar waarmee reserveringen van klanten worden gemaakt en opgehaald.

Notitie

In deze versie van de web-app worden de boekingen niet daadwerkelijk bewaard en retourneren query's dummygegevens.

In deze oefening maakt u een Dockerfile voor een app die er geen heeft. Vervolgens bouwt u de installatiekopie en gaat u deze lokaal uitvoeren.

Een Dockerfile voor de web-app maken

  1. Als deze nog niet wordt uitgevoerd, start u Docker op uw computer.

  2. In het opdrachtpromptvenster op uw lokale computer voert u de volgende opdracht uit om de broncode van de web-app te downloaden.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. Voer de volgende opdracht in om de src map te openen.

    cd mslearn-hotel-reservation-system/src
    
  4. Voer in de src map de volgende opdrachten in om een nieuw bestand met de naam Dockerfile te maken en dit te openen in Kladblok:

    copy NUL Dockerfile
    notepad Dockerfile
    

    Notitie

    Met de opdracht Kladblok wordt standaard een tekstbestand geopend. Zorg ervoor dat u het opslaat als bestandstype Alle bestanden zonder bestandsextensie. Als u dit wilt controleren, opent u de src-map in Bestandenverkenner en selecteert u >> Bestandsextensies weergeven. Wijzig zo nodig de naam van het bestand en verwijder het uit .txt de bestandsnaam.

  5. Voeg de volgende code toe aan het Dockerfile:

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2
    WORKDIR /src
    COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"]
    COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"]
    RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"
    

    Deze code bevat opdrachten voor het ophalen van een installatiekopie met de .NET Core Framework SDK. De projectbestanden voor de web-app (HotelReservationSystem.csproj) en het bibliotheekproject (HotelReservationSystemTypes.csproj) worden gekopieerd naar de map /src in de container. Met dotnet restore de opdracht worden de afhankelijkheden gedownload die vereist zijn voor deze projecten vanuit NuGet.

  6. Voeg de volgende code toe aan de onderkant van het Dockerfile:

    COPY . .
    WORKDIR "/src/HotelReservationSystem"
    RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
    

    Met deze opdrachten kopieert u de broncode voor de web-app naar de container en voert u vervolgens de dotnet-buildopdracht uit om de app te bouwen. De resulterende DLL-bestanden worden naar de map /app in de container geschreven.

  7. Voeg de volgende opdracht onder aan het Dockerfile toe.

    RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
    

    Met dotnet publish de opdracht worden de uitvoerbare bestanden voor de website gekopieerd naar een nieuwe map en worden eventuele tussentijdse bestanden verwijderd. De bestanden in deze map kunnen vervolgens worden geïmplementeerd op een website.

  8. Voeg de volgende opdrachten toe aan de onderkant van het Dockerfile.

    EXPOSE 80
    WORKDIR /app
    ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
    

    Met de eerste opdracht wordt poort 80 geopend in de container. Met de tweede opdracht wordt de map /app met de gepubliceerde versie van de web-app verplaatst. De laatste opdracht geeft aan dat de opdracht dotnet HotelReservationSystem.dll moet worden uitgevoerd als de container wordt uitgevoerd. Deze bibliotheek bevat de gecompileerde code voor de web-app.

  9. Sla het bestand op en sluit de teksteditor. Zorg ervoor dat u het opslaat als bestandstype Alle bestanden zonder bestandsextensie.

Bouw en implementeer de installatiekopie met behulp van het Dockerfile

  1. Voer vanaf de opdrachtprompt de volgende opdracht uit om de installatiekopie voor de voorbeeld-app met behulp van het Dockerfile te bouwen. Vergeet de . aan het einde van de opdracht niet. Met deze opdracht wordt de installatiekopie gebouwd en lokaal opgeslagen. De installatiekopie krijgt de naam reservationsystem. Controleer of de installatiekopie is gemaakt. Er wordt een waarschuwing over machtigingen voor bestanden en mappen weergegeven terwijl het proces wordt voltooid. Voor deze oefening kunt u deze waarschuwingen negeren. Het kan even duren voordat de installatiekopieën zijn gebouwd.

    docker build -t reservationsystem .
    
  2. Voer de volgende opdracht uit om te controleren of de installatiekopieën zijn gemaakt en opgeslagen in het lokale register:

    docker image list
    

    De installatiekopie krijgt de naam reservationsystem. U hebt ook een afbeelding met de naam microsoft/dotnet:

    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    reservationsystem   latest              d2501f0f2ced        About a minute ago   1.76GB
    

De web-app testen

  1. Voer de volgende code in om een container uit te voeren met behulp van de reservationsystem installatiekopieën. Docker retourneert een lange tekenreeks met hex-cijfers. De container wordt op de achtergrond uitgevoerd zonder gebruikersinterface. Poort 80 in de container wordt toegewezen aan poort 8080 op de hostcomputer. De container krijgt de naam reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. Open een web browser en ga naar http://localhost:8080/api/reservations/1. U ziet nu een JSON-object met de gegevens voor reserveringsnummer 1, vergelijkbaar met de volgende uitvoer:

    Screenshot of the hotel reservations system web app running in a browser.

    Vervang de '1' aan het einde van de localhost-URL door een ander reserveringsnummer, zoals 2 of 20, om de bijbehorende reserveringsgegevens weer te geven.

  3. Voer de volgende opdracht uit om de status van de container weer te geven:

    docker ps -a
    

    De uitvoer bevat het volgende voor alle beschikbare containers:

    • CONTAINER-ID
    • AFBEELDING
    • OPDRACHT
    • TIJD GEMAAKT
    • STATUS
    • POORTEN
    • NAMES

    Controleer of de container STATUS up is.

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    07b0d1de4db7        reservationsystem   "dotnet HotelReserva…"   5 minutes ago       Up 5 minutes        0.0.0.0:8080->80/tcp   reservations
    
  4. Voer de volgende opdracht in om de reserveringscontainer te stoppen:

    docker container stop reservations
    
  5. Verwijder de container reservations uit het lokale register.

    docker rm reservations
    
  6. Laat de container reservationsystem in het lokale register staan. In de volgende oefening gebruikt u deze afbeelding.

Gefeliciteerd. U hebt een installatiekopieën voor uw web-app gemaakt en u hebt deze uitgevoerd met behulp van een Docker-container.