Ćwiczenie — Dostosowywanie obrazu platformy Docker w celu uruchamiania własnej aplikacji internetowej
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
Jeśli nie jest jeszcze uruchomiony, uruchom platformę Docker na komputerze.
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
Wprowadź następujące polecenie, aby otworzyć
src
katalog.cd mslearn-hotel-reservation-system/src
src
W katalogu wprowadź następujące polecenia, aby utworzyć nowy plik o nazwieDockerfile
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.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. Poleceniedotnet restore
pobiera zależności wymagane przez te projekty z narzędzia NuGet.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.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.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 poleceniadotnet HotelReservationSystem.dll
. Ta biblioteka zawiera skompilowany kod aplikacji internetowej.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
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 .
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
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
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: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.
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
Wprowadź następujące polecenie, aby zatrzymać kontener rezerwacji :
docker container stop reservations
Usuń kontener reservations z rejestru lokalnego.
docker rm reservations
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.