Как веб-разработчики, мы привыкли находить подходящий хостинг для наших приложений со всеми сложностями их развертывания и обслуживания. Но сейчас мы живем в новую эпоху, когда поставщики облачных услуг могут сделать для нас многое практически бесплатно. Что касается разработчиков .NET, Microsoft Azure выглядит наиболее естественным выбором для размещения веб-приложений.
Docker — это еще одна технология, которая позволяет абстрагироваться от платформы и среды, в которой вы запускаете свое приложение.
В этой статье я дам подробное руководство о том, как создать простое веб-приложение ASP.NET Core, создать образ докера с вашим приложением и самый простой способ его развертывания в Azure. В итоге вы будете хорошо понимать, как развернуть свое веб-приложение и сделать его доступным для всего мира.
Для разработки этой статьи я собираюсь использовать JetBrains Rider. Но вы можете использовать любой инструмент, какой захотите.
Сначала вам нужно создать новый проект. Давайте назовем это простым « веб-приложением ».
После создания нового проекта он должен выглядеть так:
Без каких-либо изменений в проекте мы сосредоточимся на Dockerfile
. Измените его, как показано в следующем примере:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 as base WORKDIR /app EXPOSE 8080 ENV ASPNETCORE_URLS http://+:8080 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build COPY . /src WORKDIR /src RUN dotnet build "webapp.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "webapp.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "webapp.dll"]
Вам необходимо обратить внимание на строки EXPOSE 8080
и ENV ASPNETCORE_URLS http://+:8080
, чтобы иметь возможность подключаться по HTTP к докер-контейнеру.
Создайте образ докера из командной строки. Вам нужно перейти в каталог проекта webapp
и выполнить следующую команду:
DOCKER_BUILDKIT=1 docker buildx build --platform linux/amd64 --tag drmoz/webapp:latest .
Я запускаю его на Mac M1, и мне нужно явно указать параметр --platform
, чтобы обеспечить совместимость с развертыванием Azure. Мне также нужно активировать Docker Buildkit, указав параметр DOCKER_BUILDKIT=1
и используя buildx
, чтобы иметь возможность создать образ для другой архитектуры.
Если вы используете его на платформе Intel x86/x64, вы можете использовать команду docker build
без необходимости указывать параметр --platform
и активировать buildx
.
Вы можете пометить свое изображение по-другому, но поскольку я собираюсь использовать Docker Hub, мне нужно указать имя своей учетной записи: drmoz
как часть тега изображения drmoz/webapp:latest
.
Когда образ создан, вы можете проверить, присутствует ли он в Docker, выполнив следующую команду:
docker images
Оно должно быть в списке:
REPOSITORY TAG IMAGE ID CREATED SIZE drmoz/webapp latest 0cfac748256b 37 minutes ago 216MB
Давайте запустим Docker-контейнер, чтобы убедиться, что вновь созданный образ работает нормально. Выполните команду docker run
, чтобы запустить контейнер:
docker run -p 5555:8080 drmoz/webapp:latest
Укажите параметр -p
, чтобы сопоставить порт 8080
внутри контейнера с портом 5555
вашего локального компьютера. Также укажите имя образа для создания контейнера. В моем случае это drmoz/webapp:latest
.
Теперь вы можете перейти по адресу http://localhost:5555
в своем браузере, чтобы увидеть домашнюю страницу веб-приложения ASP.NET Core.
Нам нужно отправить образ в Docker Hub . Перед этим вы должны зарегистрироваться в реестре Docker и создать репозиторий. Нажмите кнопку « Создать репозиторий » в правом углу главной страницы.
Укажите поле Repository Name
и оставьте видимость репозитория Public
.
В командной строке вам необходимо войти в реестр Docker Hub:
docker login
После этого вы сможете отправить вновь созданный образ в реестр:
docker push drmoz/webapp:latest
Перейдите в репозиторий, и вы увидите информацию об образе:
Теперь мы готовы развернуть наше веб-приложение ASP.NET Core в Azure. Давайте войдем на портал Azure и создадим новую группу ресурсов. Укажите имя группы ресурсов как « webapp-rg » и нажмите кнопку «Просмотреть + создать».
На следующем экране просто нажмите кнопку «Создать».
Теперь мы можем создать веб-приложение. Перейдите на страницу «Создать ресурс» и найдите WebApp. Нажмите кнопку «Создать».
Вам необходимо указать Resource Group
, которую мы создали ранее. Также укажите уникальное Name
для веб-приложения. Выберите «Docker-контейнер» в поле Publish
. Позже мы сможем указать, какой образ Docker использовать.
В разделе Pricing plans
выберите любые подходящие варианты, но для тестовых целей я рекомендую использовать покрышку Free F1 . Перейдите на вкладку Docker.
На этой вкладке выберите «Docker Hub» в поле Image Source
. Выберите «Общедоступный» в поле Access Type
», укажите Image and tag
с именем изображения, которое мы отправили в Docker Hub. Перейдите на вкладку «Просмотр + создание». На этой вкладке нажмите кнопку «Создать»:
Когда новый ресурс будет развернут, вас спросят, хотите ли вы перейти к этому ресурсу; просто сделай это. Вы сможете увидеть информацию о веб-приложении.
Нажмите кнопку «Обзор», чтобы открыть развернутое веб-приложение. Если все прошло правильно, вы должны увидеть домашнюю страницу веб-приложения ASP.NET Core, аналогичную той, которую вы видели в своем браузере, перейдя по адресу http://localhost:5555
.
Если вы перейдете к настройкам «Центр развертывания» и включите «Продолжение развертывания», вы сможете повторно развертывать свой образ каждый раз, когда вы отправляете новый в Docker Hub. Таким образом, вы можете внести изменения в свой код, отправить его в Docker Hub с новым образом и увидеть изменения за считанные минуты в Azure.
Чтобы иметь возможность просматривать журналы развертывания и выявлять проблемы, вам необходимо включить сохранение журналов в файловую систему в главе «Журналы службы приложений» следующим образом:
Когда это будет сделано, вы можете перейти в «Центр развертывания» и просмотреть журналы следующим образом:
Если вы достигли этой точки, вам удалось создать веб-приложение ASP.NET Core; упакуйте его в образ Docker и разверните в Azure. Сегодня технологии облегчают жизнь и ускоряют процесс разработки. Вы увидите, насколько легко вы можете развернуть свое приложение у поставщика облачных услуг и предоставить его всему миру, выполнить некоторое тестирование и увидеть результат своей работы.
Теперь вы можете подробно изучить облачные провайдеры Azure, воспользовавшись документацией Microsoft. Также ознакомьтесь с документацией Docker для более глубокого понимания этой технологии. Я надеюсь, что это может быть полезно.