Упражнение. Настройка образа Docker для запуска веб-приложения
Dockerfile содержит шаги по созданию пользовательского образа Docker.
Теперь вам нужно развернуть одно из веб-приложений вашей организации с помощью Docker. Это простое веб-приложение, реализующее веб-API для веб-сайта бронирования номеров в гостинице. Этот веб-API предоставляет операции HTTP POST и GET, которые создают и извлекают данные о бронировании клиента.
Примечание.
В этой версии веб-приложения резервирования не сохраняются, а запросы возвращают фиктивные данные.
В этом упражнении вы создадите файл Dockerfile для приложения, у которого его нет. Затем вы создадите образ и запустите его локально.
Создание Dockerfile для веб-приложения
Если он еще не запущен, запустите Docker на компьютере.
В окне командной строки на локальном компьютере выполните приведенную ниже команду, чтобы скачать исходный код для веб-приложения.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.gitВведите следующую команду, чтобы открыть каталог
src:cd mslearn-hotel-reservation-system/srcВ каталоге
srcвведите следующие команды, чтобы создать новый файл с именемDockerfileи открыть его в Блокноте:copy NUL Dockerfile notepad DockerfileПримечание.
По умолчанию для этого используется команда notepad. Убедитесь, что вы сохранили файл как тип Все файлы без расширения. Чтобы проверить, откройте папку src в проводнике, выберите "Вид" > Показать> "Расширения имен файлов". При необходимости переименуйте файл и удалите
.txtиз имени файла.Добавьте следующий код в 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.Добавьте следующий код в нижней части Файла Dockerfile:
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /appЭти команды копируют исходный код для веб-приложения в контейнер, а затем выполните команду dotnet build для сборки приложения. Полученные библиотеки DLL записываются в папку
/appв контейнере.Добавьте следующую команду в конец Dockerfile.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /appКоманда
dotnet publishкопирует исполняемые файлы для веб-сайта в новую папку и удаляет все промежуточные файлы. Затем файлы в этой папке можно развернуть на веб-сайте.Добавьте следующие команды в конец Dockerfile.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]Первая команда открывает порт 80 в контейнере. Вторая команда переходит в папку
/app, содержащую опубликованную версию веб-приложения. Последняя команда указывает, что при запуске контейнера нужно выполнить командуdotnet HotelReservationSystem.dll. Эта библиотека содержит скомпилированный код для веб-приложения.Сохраните файл и закройте текстовый редактор. Убедитесь, что вы сохранили файл как тип Все файлы без расширения.
Создание и развертывание образа с помощью файла Dockerfile
В командной строке выполните приведенную ниже команду, чтобы создать образ для примера приложения с использованием Dockerfile. Не забудьте добавить
.в конце команды. Эта команда создает образ и сохраняет его локально. Образу назначается имяreservationsystem. Убедитесь, что образ создан успешно. Предупреждение о разрешениях файлов и каталогов может отображаться при завершении процесса. Это предупреждение можно игнорировать в целях этого упражнения. Образ может занять некоторое время для сборки.docker build -t reservationsystem .Выполните следующую команду, чтобы убедиться, что образ был создан и сохранен в локальном реестре:
docker image listОбраз будет иметь имя
reservationsystem. У вас также будет изображение с именем microsoft/dotnet:REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
Тестирование веб-приложения
Введите следующий код, чтобы запустить контейнер с образом
reservationsystem. Docker вернет длинную строку шестнадцатеричных цифр. Контейнер выполняется в фоновом режиме без пользовательского интерфейса. Порт 80 в контейнере сопоставляется с портом 8080 на главном компьютере. Контейнеру присваивается имяreservations.docker run -p 8080:80 -d --name reservations reservationsystemЗапустите веб-браузер и перейдите по адресу
http://localhost:8080/api/reservations/1. Необходимо получить объект JSON, содержащий данные для заказа номер один, аналогичный следующему выводу:
Замените "1" в конце URL-адреса localhost на другой номер бронирования (например, 2 или 20), чтобы просмотреть соответствующие сведения о бронировании.
Выполните следующую команду, чтобы просмотреть состояние контейнера:
docker ps -aВыходные данные содержат следующие сведения для всех доступных контейнеров:
- ИДЕНТИФИКАТОР КОНТЕЙНЕРА
- ИЗОБРАЖЕНИЕ
- КОМАНДА
- ВРЕМЯ СОЗДАНИЯ
- СОСТОЯНИЕ
- ПОРТЫ
- ИМЕНА
Убедитесь, что контейнер
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Введите следующую команду, чтобы остановить контейнер резервирования :
docker container stop reservationsУдалите контейнер reservations из локального реестра.
docker rm reservationsОставьте reservations в локальном реестре. Вы будете использовать этот образ в следующем упражнении.
Поздравляем! Вы только что создали образ для веб-приложения и запустили его, используя контейнер Docker.