Упражнение. Настройка образа Docker для запуска веб-приложения

Завершено

Dockerfile содержит шаги по созданию пользовательского образа Docker.

Теперь вам нужно развернуть одно из веб-приложений вашей организации с помощью Docker. Это простое веб-приложение, реализующее веб-API для веб-сайта бронирования номеров в гостинице. Этот веб-API предоставляет операции HTTP POST и GET, которые создают и извлекают данные о бронировании клиента.

Примечание.

В этой версии веб-приложения резервирования не сохраняются, а запросы возвращают фиктивные данные.

В этом упражнении вы создадите файл Dockerfile для приложения, у которого его нет. Затем вы создадите образ и запустите его локально.

Создание Dockerfile для веб-приложения

  1. Если он еще не запущен, запустите Docker на компьютере.

  2. В окне командной строки на локальном компьютере выполните приведенную ниже команду, чтобы скачать исходный код для веб-приложения.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. Введите следующую команду, чтобы открыть каталог src:

    cd mslearn-hotel-reservation-system/src
    
  4. В каталоге src введите следующие команды, чтобы создать новый файл с именем Dockerfile и открыть его в Блокноте:

    copy NUL Dockerfile
    notepad Dockerfile
    

    Примечание.

    По умолчанию для этого используется команда notepad. Убедитесь, что вы сохранили файл как тип Все файлы без расширения. Чтобы проверить, откройте папку src в проводнике, выберите "Вид" > Показать> "Расширения имен файлов". При необходимости переименуйте файл и удалите .txt из имени файла.

  5. Добавьте следующий код в 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"
    

    Этот код содержит команды, которые извлекают образ, содержащий пакет SDK для .NET Core Framework. Файлы проекта для веб-приложения () и проекта библиотеки (HotelReservationSystem.csprojHotelReservationSystemTypes.csproj) копируются в папку /src в контейнере. Команда dotnet restore скачивает зависимости, необходимые для этих проектов, из NuGet.

  6. Добавьте следующий код в нижней части Файла Dockerfile:

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

    Эти команды копируют исходный код для веб-приложения в контейнер, а затем выполните команду dotnet build для сборки приложения. Полученные библиотеки DLL записываются в папку /app в контейнере.

  7. Добавьте следующую команду в конец Dockerfile.

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

    Команда dotnet publish копирует исполняемые файлы для веб-сайта в новую папку и удаляет все промежуточные файлы. Затем файлы в этой папке можно развернуть на веб-сайте.

  8. Добавьте следующие команды в конец Dockerfile.

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

    Первая команда открывает порт 80 в контейнере. Вторая команда переходит в папку /app, содержащую опубликованную версию веб-приложения. Последняя команда указывает, что при запуске контейнера нужно выполнить команду dotnet HotelReservationSystem.dll. Эта библиотека содержит скомпилированный код для веб-приложения.

  9. Сохраните файл и закройте текстовый редактор. Убедитесь, что вы сохранили файл как тип Все файлы без расширения.

Создание и развертывание образа с помощью файла Dockerfile

  1. В командной строке выполните приведенную ниже команду, чтобы создать образ для примера приложения с использованием Dockerfile. Не забудьте добавить . в конце команды. Эта команда создает образ и сохраняет его локально. Образу назначается имя reservationsystem. Убедитесь, что образ создан успешно. Предупреждение о разрешениях файлов и каталогов может отображаться при завершении процесса. Это предупреждение можно игнорировать в целях этого упражнения. Образ может занять некоторое время для сборки.

    docker build -t reservationsystem .
    
  2. Выполните следующую команду, чтобы убедиться, что образ был создан и сохранен в локальном реестре:

    docker image list
    

    Образ будет иметь имя reservationsystem. У вас также будет изображение с именем microsoft/dotnet:

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

Тестирование веб-приложения

  1. Введите следующий код, чтобы запустить контейнер с образом reservationsystem. Docker вернет длинную строку шестнадцатеричных цифр. Контейнер выполняется в фоновом режиме без пользовательского интерфейса. Порт 80 в контейнере сопоставляется с портом 8080 на главном компьютере. Контейнеру присваивается имя reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. Запустите веб-браузер и перейдите по адресу http://localhost:8080/api/reservations/1. Должен отобразиться объект JSON, содержащий данные для резервирования номер 1, аналогичный следующему выводу:

    Снимок экрана: веб-приложение системы бронирования номеров в гостинице в браузере.

    Замените "1" в конце URL-адреса localhost на другой номер бронирования (например, 2 или 20), чтобы просмотреть соответствующие сведения о бронировании.

  3. Выполните следующую команду, чтобы просмотреть состояние контейнера:

    docker ps -a
    

    Выходные данные содержат следующие сведения для всех доступных контейнеров:

    • ИДЕНТИФИКАТОР КОНТЕЙНЕРА
    • ИЗОБРАЖЕНИЕ
    • КОМАНДА
    • ВРЕМЯ СОЗДАНИЯ
    • СОСТОЯНИЕ
    • ПОРТЫ
    • NAMES

    Убедитесь, что контейнер STATUS включен.

    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. Введите следующую команду, чтобы остановить контейнер резервирования :

    docker container stop reservations
    
  5. Удалите контейнер reservations из локального реестра.

    docker rm reservations
    
  6. Оставьте reservations в локальном реестре. Вы будете использовать этот образ в следующем упражнении.

Поздравляем! Вы только что создали образ для веб-приложения и запустили его, используя контейнер Docker.