Ćwiczenie — Dostosowywanie obrazu platformy Docker w celu uruchamiania własnej aplikacji internetowej

Ukończone

Plik Dockerfile zawiera instrukcje tworzenia niestandardowego obrazu platformy Docker.

Decydujesz się wdrożyć jedną z aplikacji internetowych organizacji przy użyciu platformy Docker. Wybierasz prostą aplikację internetową, która implementuje internetowy interfejs API dla witryny internetowej rezerwacji hotelowych. Internetowy interfejs API uwidacznia operacje HTTP POST i GET, które tworzą i pobierają rezerwacje klientów.

Uwaga

W tej wersji aplikacji internetowej rezerwacje nie są rzeczywiście utrwalane, a zapytania zwracają fikcyjne dane.

W tym ćwiczeniu utworzysz plik Dockerfile dla aplikacji, które jeszcze go nie ma. Następnie utworzysz obraz i uruchomisz go lokalnie.

Tworzenie pliku Dockerfile dla aplikacji internetowej

  1. Jeśli nie jest jeszcze uruchomiony, uruchom platformę Docker na komputerze.

  2. W oknie wiersza polecenia na komputerze lokalnym uruchom następujące polecenie, aby pobrać kod źródłowy aplikacji internetowej.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. Wprowadź następujące polecenie, aby otworzyć src katalog.

    cd mslearn-hotel-reservation-system/src
    
  4. src W katalogu wprowadź następujące polecenia, aby utworzyć nowy plik o nazwie Dockerfile i otworzyć go w Notatniku:

    copy NUL Dockerfile
    notepad Dockerfile
    

    Uwaga

    Domyślnie polecenie Notatnik otwiera plik tekstowy. Upewnij się, że zapisano go jako typ pliku Wszystkie pliki bez rozszerzenia pliku. Aby sprawdzić, otwórz folder src w Eksplorator plików, wybierz pozycję Wyświetl > pokaż> rozszerzenia nazw plików. W razie potrzeby zmień nazwę pliku i usuń .txt go z nazwy pliku.

  5. Dodaj następujący kod do pliku 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"
    

    Ten kod zawiera polecenia umożliwiające pobranie obrazu zawierającego zestaw .NET Core Framework SDK. Pliki projektu dla aplikacji internetowej (HotelReservationSystem.csproj) i projektu biblioteki (HotelReservationSystemTypes.csproj) są kopiowane do /src folderu w kontenerze. Polecenie dotnet restore pobiera zależności wymagane przez te projekty z narzędzia NuGet.

  6. Dołącz następujący kod w dolnej części pliku Dockerfile:

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

    Te polecenia kopiują kod źródłowy aplikacji internetowej do kontenera, a następnie uruchamiają polecenie dotnet build, aby skompilować aplikację. Wynikowe biblioteki DLL są zapisywane /app w folderze w kontenerze.

  7. Dołącz następujące polecenie w dolnej części pliku Dockerfile.

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

    Polecenie dotnet publish kopiuje pliki wykonywalne witryny internetowej do nowego folderu i usuwa wszystkie pliki tymczasowe. Pliki w tym folderze można następnie wdrożyć w witrynie internetowej.

  8. Dołącz następujące polecenia do dołu pliku Dockerfile.

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

    Pierwsze polecenie otwiera port 80 w kontenerze. Drugie polecenie umożliwia przejście do folderu /app zawierającego opublikowaną wersję aplikacji internetowej. Ostatnie polecenie nakazuje uruchomionemu kontenerowi wykonanie polecenia dotnet HotelReservationSystem.dll. Ta biblioteka zawiera skompilowany kod aplikacji internetowej.

  9. Zapisz plik i zamknij edytor tekstów. Upewnij się, że zapisano go jako typ pliku Wszystkie pliki bez rozszerzenia pliku.

Kompilowanie i wdrażanie obrazu przy użyciu pliku Dockerfile

  1. W wierszu polecenia uruchom następujące polecenie, aby skompilować obraz dla przykładowej aplikacji przy użyciu pliku Dockerfile. Nie zapomnij dodać symbolu . na końcu polecenia. To polecenie kompiluje obraz i zapisuje go lokalnie. Obraz otrzymuje nazwę reservationsystem. Sprawdź, czy obraz został skompilowany pomyślnie. Po zakończeniu procesu może zostać wyświetlone ostrzeżenie dotyczące uprawnień do plików i katalogów. To ostrzeżenie można zignorować na potrzeby tego ćwiczenia. Kompilacja obrazu może potrwać chwilę.

    docker build -t reservationsystem .
    
  2. Uruchom następujące polecenie, aby sprawdzić, czy obraz został utworzony i zapisany w rejestrze lokalnym:

    docker image list
    

    Obraz będzie mieć nazwę reservationsystem. Będziesz również mieć obraz o nazwie microsoft/dotnet:

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

Testowanie aplikacji internetowej

  1. Wprowadź następujący kod, aby uruchomić kontener przy użyciu reservationsystem obrazu. Platforma Docker zwróci długi ciąg cyfr szesnastkowych. Kontener działa w tle bez żadnego interfejsu użytkownika. Port 80 kontenera został zamapowany na port 8080 na komputerze hosta. Kontener nosi nazwę reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. Otwórz przeglądarkę internetową i przejdź pod adres http://localhost:8080/api/reservations/1. Powinien zostać wyświetlony obiekt JSON zawierający dane dla rezerwacji numer 1 podobny do następujących danych wyjściowych:

    Zrzut ekranu przedstawiający aplikację internetową systemu rezerwacji hotelowych uruchomioną w przeglądarce.

    Zastąp wartość "1" na końcu adresu URL hosta lokalnego innym numerem rezerwacji, na przykład 2 lub 20, aby wyświetlić odpowiednie szczegóły rezerwacji.

  3. Uruchom następujące polecenie, aby wyświetlić stan kontenera:

    docker ps -a
    

    Dane wyjściowe zawierają następujące informacje dla wszystkich dostępnych kontenerów:

    • IDENTYFIKATOR KONTENERA
    • OBRAZ
    • POLECENIE
    • GODZINA UTWORZENIA
    • STAN
    • PORTY
    • NAZWY

    Sprawdź, czy kontener jest STATUS w górę.

    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. Wprowadź następujące polecenie, aby zatrzymać kontener rezerwacji :

    docker container stop reservations
    
  5. Usuń kontener reservations z rejestru lokalnego.

    docker rm reservations
    
  6. Pozostaw repozytorium reservationsystem w rejestrze lokalnym. Użyjesz tego obrazu w następnym ćwiczeniu.

Gratulacje! Utworzono obraz dla aplikacji internetowej i uruchomiono go przy użyciu kontenera platformy Docker.