Übung: Anpassen eines Docker-Images zum Ausführen Ihrer eigenen Web-App

Abgeschlossen

Eine Dockerfile-Datei enthält die Schritte zum Erstellen eines benutzerdefinierten Docker-Images.

Sie möchten eine der Web-Apps Ihrer Organisation mithilfe von Docker bereitstellen. Sie wählen eine einfache Web-App aus, die eine Web-API für eine Hotelreservierungswebsite implementiert. Die Web-API macht HTTP POST- und GET-Vorgänge verfügbar, die Kundenbuchungen erstellen und abrufen.

Hinweis

In dieser Version der Web-App werden die Buchungen nicht persistent gespeichert, und Abfragen liefern Dummydaten.

In dieser Übung erstellen Sie eine Dockerfile-Datei für eine App, für die keine solche Datei vorhanden ist. Dann erstellen Sie das Image und führen es lokal aus.

Erstellen einer Dockerfile-Datei für die Web-App

  1. Starten Sie Docker auf Ihrem Computer, falls das Programm noch nicht ausgeführt wird.

  2. Führen Sie in einem Eingabeaufforderungsfenster auf Ihrem lokalen Computer den folgenden Befehl aus, um den Quellcode für die Web-App herunterzuladen.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. Geben Sie den folgenden Befehl ein, um das Verzeichnis src zu öffnen.

    cd mslearn-hotel-reservation-system/src
    
  4. Geben Sie die folgenden Befehle im Verzeichnis src ein, um eine neue Datei mit dem Namen Dockerfile zu erstellen und im Editor zu öffnen:

    copy NUL Dockerfile
    notepad Dockerfile
    

    Hinweis

    Der Editor-Befehl öffnet standardmäßig eine Textdatei. Stellen Sie sicher, dass Sie den Dateityp All Files (Alle Dateien) ohne Dateierweiterung speichern. Um dies zu überprüfen, öffnen Sie den „src“-Ordner im Datei-Explorer, und wählen Sie „Ansicht“ > „Anzeigen“ > „Dateinamenerweiterungen“ aus. Benennen Sie die Datei bei Bedarf um, und entfernen Sie .txt aus dem Dateinamen.

  5. Fügen Sie dem Dockerfile den folgenden Code hinzu:

    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"
    

    Dieser Code enthält Befehle zum Abrufen eines Images, dass das .NET Core SDK-Framework enthält. Die Dateien für das Web-App- (HotelReservationSystem.csproj) und das Bibliotheksprojekt (HotelReservationSystemTypes.csproj) werden in den Ordner /src kopiert, der sich im Container befindet. Über den Befehl dotnet restore werden die für diese Projekte erforderlichen Abhängigkeiten von NuGet heruntergeladen.

  6. Fügen Sie den folgenden Code am Ende des Dockerfiles an:

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

    Diese Befehle kopieren den Quellcode für die Web-App in den Container und führen dann den Befehl „dotnet build“ aus, um die App zu erstellen. Die sich ergebenden DLLs werden in den Ordner /app im Container geschrieben.

  7. Fügen Sie den folgenden Befehl am Ende des Dockerfiles an.

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

    Der Befehl dotnet publish kopiert die ausführbaren Dateien für die Website in einen neuen Ordner und entfernt alle Zwischendateien. Die Dateien in diesem Ordner können dann für eine Website bereitgestellt werden.

  8. Fügen Sie die folgenden Befehle am Ende des Dockerfiles an.

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

    Der erste Befehl öffnet Port 80 im Container. Der zweite Befehl führt den Verschiebevorgang in den Ordner /app aus, der die veröffentlichte Version der Web-App enthält. Der letzte Befehl gibt an, dass bei der Ausführung des Containers der Befehl dotnet HotelReservationSystem.dll ausgeführt werden soll. Diese Bibliothek enthält den kompilierten Code für die Web-App.

  9. Speichern Sie die Datei, und schließen Sie den Text-Editor. Stellen Sie sicher, dass Sie den Dateityp All Files (Alle Dateien) ohne Dateierweiterung speichern.

Erstellen und Bereitstellen des Images mithilfe der Dockerfile-Datei

  1. Führen Sie an der Eingabeaufforderung den folgenden Befehl zum Erstellen des Images für die Beispiel-App mithilfe der Dockerfile-Datei aus. Vergessen Sie nicht den . am Ende des Befehls. Dieser Befehl erstellt das Image und speichert es lokal. Das Image erhält den Namen reservationsystem. Stellen Sie sicher, dass das Image erfolgreich erstellt wurde. Eine Warnung zu Datei- und Verzeichnisberechtigungen kann angezeigt werden, wenn der Vorgang abgeschlossen ist. Sie können diese Warnung im Rahmen dieser Übung ignorieren. Die Erstellung des Images kann einen Moment dauern.

    docker build -t reservationsystem .
    
  2. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das Image erstellt und in der lokalen Registrierung gespeichert wurde:

    docker image list
    

    Das Image trägt den Namen reservationsystem. Sie sehen auch ein Image namens microsoft/dotnet:

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

Testen der Web-App

  1. Geben Sie den folgenden Code ein, um einen Container mithilfe des Images reservationsystem auszuführen. Docker gibt eine lange Kette von Hexadezimalziffern zurück. Der Container wird im Hintergrund ohne Benutzeroberfläche ausgeführt. Port 80 im Container wird Port 8080 auf dem Hostcomputer zugeordnet. Der Container heißt reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. Starten Sie einen Webbrowser, und navigieren Sie zu http://localhost:8080/api/reservations/1. Es sollte ein JSON-Objekt mit den Daten für die Reservierungsnummer 1 ähnlich der folgenden Ausgabe angezeigt werden:

    Screenshot der Hotelreservierungssystem-Web-App, die in einem Browser ausgeführt wird

    Ersetzen Sie die „1“ am Ende der Localhost-URL durch eine andere Reservierungsnummer (z. B. 2 oder 20), um die entsprechenden Reservierungsdetails anzuzeigen.

  3. Geben Sie den folgenden Befehl ein, um den Status des Containers anzuzeigen:

    docker ps -a
    

    Die Ausgabe listet für alle verfügbaren Container Folgendes auf:

    • CONTAINER ID
    • BILD
    • COMMAND
    • CREATED-Zeitpunkt
    • STATUS
    • PORTS
    • NAMES

    Überprüfen Sie, ob der STATUS des Containers Aktiv ist.

    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. Geben Sie den folgenden Befehl ein, um den Container reservations (Reservierungen) zu beenden:

    docker container stop reservations
    
  5. Löschen Sie den Container reservations aus der lokalen Registrierung.

    docker rm reservations
    
  6. Belassen Sie den Container reservationsystem in der lokalen Registrierung. Sie verwenden dieses Image in der nächsten Übung.

Herzlichen Glückwunsch! Sie haben ein Image für Ihre Web-App erstellt und es mithilfe eines Docker-Containers ausgeführt.