Упражнение. Настройка образа 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.csproj
HotelReservationSystemTypes.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, аналогичный следующему выводу:Замените "1" в конце URL-адреса localhost на другой номер бронирования (например, 2 или 20), чтобы просмотреть соответствующие сведения о бронировании.
Выполните следующую команду, чтобы просмотреть состояние контейнера:
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
Введите следующую команду, чтобы остановить контейнер резервирования :
docker container stop reservations
Удалите контейнер reservations из локального реестра.
docker rm reservations
Оставьте reservations в локальном реестре. Вы будете использовать этот образ в следующем упражнении.
Поздравляем! Вы только что создали образ для веб-приложения и запустили его, используя контейнер Docker.