Краткое руководство. Docker в Visual Studio

С помощью Visual Studio можно легко создавать, отлаживать и запускать контейнерные приложения .NET, ASP.NET и ASP.NET Core и публиковать их в Реестр контейнеров Azure, Docker Hub, приложение Azure Service или в собственном реестре контейнеров. При работе с этой статьей мы опубликуем приложение ASP.NET Core в реестре контейнеров Azure.

Необходимые компоненты

Установка и настройка

Для установки Docker сначала просмотрите сведения в Docker Desktop для Windows: что нужно знать перед установкой. Затем установите Docker Desktop.

Добавление проекта в контейнер Docker

  1. Создайте проект, используя шаблон Веб-приложение ASP.NET Core, или, если вы хотите использовать .NET Framework вместо .NET Core, выберите Веб-приложение ASP.NET (.NET Framework).

  2. На экране Создание веб-приложения установите флажок Включить поддержку Docker.

    Снимок экрана: включение поддержки Docker проверка box.

    На снимке экрана показана платформа .NET Core; если вы используете .NET Framework, она выглядит немного иначе.

  3. Выберите нужный тип контейнера (Windows или Linux) и нажмите кнопку Создать.

Общие сведения о Dockerfile

Dockerfile с инструкциями по созданию окончательного образа Docker создается в проекте. См. справочник по Dockerfile для получения сведений о других доступных в нем командах.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

Предыдущий Dockerfile основан на образе microsoft/aspnetcore и включает в себя инструкции по изменению базового образа путем сборки проекта и добавления его в контейнер. Если вы используете .NET Framework, базовый образ будет отличаться.

Если в диалоговом окне создания проекта установлен флажок Configure for HTTPS (Настроить для трафика HTTPS), Dockerfile будет предоставлять два порта. Один порт используется для трафика HTTP, другой — для HTTPS. Если флажок не установлен, для трафика HTTP будет предоставляться один порт (80).

Отладка

Выберите Docker из раскрывающегося списка отладки на панели инструментов и начните отладку приложения. Может появиться сообщение с запросом о доверии сертификату. Выберите доверие сертификату, чтобы продолжить.

В параметре Инструменты контейнера в окне Вывод показано, какие действия выполняются. В первый раз может потребоваться некоторое время для скачивания базового образа, но при последующих запусках это происходит гораздо быстрее.

Примечание.

Если вам нужно изменить порты для отладки, это можно сделать в файле launchSettings.json. См. сведения о параметрах запуска контейнеров.

Окно "Контейнеры"

В Visual Studio 2019 версии 16.4 или более поздних версиях окно Контейнеры можно использовать для просмотра запущенных на компьютере контейнеров, а также доступных образов.

Откройте окно Контейнеры, используя поле поиска в интегрированной среде разработки (нажмите сочетание клавиш CTRL+Q), введите container и в списке выберите Контейнеры.

Окно Контейнеры можно закрепить в удобном месте, например под редактором. Для этого перетащите его и следуйте инструкциям по размещению.

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

Снимок экрана: окно

Дополнительные сведения см. в статье Использование окна "Контейнеры".

Публикация образов Docker

После завершения цикла разработки и отладки приложения можно создать рабочий образ приложения.

  1. Измените раскрывающийся список конфигурации на выпуск и создайте приложение.

  2. В обозревателе решений щелкните правой кнопкой проект и выберите Опубликовать.

  3. В диалоговом окне Публикации перейдите на вкладку Реестр контейнеров Docker.

    Снимок экрана: диалоговое окно публикации, выбор реестра контейнеров Docker.

  4. Выберите Создать Реестр контейнеров Azure.

    Снимок экрана: диалоговое окно

  5. Заполните нужные значения в окне Создать новый реестр контейнеров Azure.

    Параметр Предлагаемое значение Description
    DNS-префикс Глобально уникальное имя Имя, которое однозначно идентифицирует реестр контейнеров.
    Подписка Выберите свою подписку Подписка Azure, которую нужно использовать.
    Группа ресурсов myResourceGroup Имя группы ресурсов, в которой создается реестр контейнеров. Чтобы создать группу ресурсов, выберите Создать.
    SKU Стандартные Уровень обслуживания в реестре контейнеров
    Расположение реестра Расположение рядом с вами Выберите расположение в ближайшем регионе или в регионе, расположенном рядом с другими службами, которые будут использовать реестр контейнеров.

    Снимок экрана: диалоговое окно создания реестра контейнеров Azure в Visual Studio.

  6. Нажмите кнопку Создать. Теперь в диалоговом окне Публикации отображается созданный реестр.

    Снимок экрана: диалоговое окно публикации с созданным реестром контейнеров Azure.

  7. Нажмите кнопку Готово, чтобы завершить процесс публикации образа контейнера во вновь созданном реестре в Azure.

    Снимок экрана: сообщение об успешной публикации.

Next Steps

Теперь можно извлечь контейнер из реестра в любой узел, поддерживающий работу образов Docker, например Экземпляры контейнеров Azure.

С помощью Visual Studio можно легко создавать, отлаживать и запускать контейнерные приложения .NET, ASP.NET и ASP.NET Core и публиковать их в Реестр контейнеров Azure, Docker Hub, приложение Azure Service или в собственном реестре контейнеров. В этой статье вы публикуете приложение ASP.NET Core в Реестр контейнеров Azure.

Необходимые компоненты

Установка и настройка

Для установки Docker сначала просмотрите сведения в Docker Desktop для Windows: что нужно знать перед установкой. Затем установите Docker Desktop.

Добавление проекта в контейнер Docker

  1. Перед созданием проекта Visual Studio убедитесь, что Docker Desktop запускает тип контейнеров (Windows или Linux), которые вы планируете использовать в проекте Visual Studio.

    Чтобы изменить тип контейнера, используемый Docker Desktop, щелкните правой кнопкой мыши значок Docker (кит) на панели задач и выберите пункт "Переключиться на контейнеры Linux" или "Переключиться на контейнеры Windows".

    Предупреждение

    Если вы переключите тип контейнера после создания проекта Visual Studio, файлы образов Docker могут не загружаться.

  2. Создайте проект, используя шаблон Веб-приложение ASP.NET Core, или, если вы хотите использовать .NET Framework вместо .NET Core, выберите Веб-приложение ASP.NET (.NET Framework).

  3. На экране Создание веб-приложения установите флажок Включить поддержку Docker.

    Снимок экрана: включение поддержки Docker проверка box.

    Снимок экрана: последний выпуск с .NET 8.0. Если вы используете платформа .NET Framework, диалоговое окно выглядит немного иначе.

  4. Выберите нужный тип контейнера (Windows или Linux) и нажмите кнопку "Создать".

Общие сведения о Dockerfile

Visual Studio создает Dockerfile в проекте, который предоставляет рецепт создания окончательного образа Docker. Дополнительные сведения см . в справочнике по Dockerfile для получения сведений о командах, используемых в Dockerfile.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

Предыдущий файл Dockerfile основан на образе Microsoft Container Registry (MCR) .NET 8 и содержит инструкции по изменению базового образа, создав проект с именем MyWebApp и добавив его в контейнер. Если вы используете платформа .NET Framework, базовый образ отличается.

Если в диалоговом окне создания проекта установлен флажок Configure for HTTPS (Настроить для трафика HTTPS), Dockerfile будет предоставлять два порта. Один порт используется для трафика HTTP, другой — для HTTPS. Если флажок не установлен, для трафика HTTP будет предоставляться один порт (80).

В Visual Studio 2022 версии 17.7 или более поздней версии можно использовать .NET 8. В этом случае у вас есть преимущество безопасного запуска приложения как обычного пользователя, а не с повышенными разрешениями. Файл Dockerfile по умолчанию, созданный Visual Studio для проектов .NET 8, настроен для запуска в качестве обычного пользователя. Чтобы включить это поведение в существующем проекте, добавьте строку USER app в Файл Dockerfile в базовом образе. Кроме того, поскольку порт 80 ограничен для обычных пользователей, предоставляет порты 8080 и 8081 вместо 80 и 443. Порт 8080 используется для трафика HTTP, а порт 8081 используется для HTTPS. Для запуска от имени обычного пользователя контейнер должен использовать базовый образ .NET 8, и приложение должно работать в качестве приложения .NET 8. При правильной настройке Dockerfile должен содержать код, как показано в следующем примере:

FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Отладка

Выберите Docker из раскрывающегося списка отладки на панели инструментов и начните отладку приложения. Может появиться сообщение с запросом о доверии сертификату. Выберите доверие сертификату, чтобы продолжить.

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

После завершения сборки откроется браузер и отобразит домашнюю страницу приложения. В адресной строке браузера можно просмотреть localhost URL-адрес и номер порта для отладки.

Примечание.

Если необходимо изменить порты для отладки, это можно сделать в launchSettings.json файле. См. сведения о параметрах запуска контейнеров.

Окно "Контейнеры"

Окно "Контейнеры" можно использовать для просмотра запущенных контейнеров на компьютере и других доступных образов.

Откройте окно Контейнеры, используя поле поиска в интегрированной среде разработки (нажмите сочетание клавиш CTRL+Q), введите container и в списке выберите Контейнеры.

Окно Контейнеры можно закрепить в удобном месте, например под редактором. Для этого перетащите его и следуйте инструкциям по размещению.

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

Снимок экрана: окно

Дополнительные сведения см. в статье Использование окна "Контейнеры".

Публикация образов Docker

После завершения цикла разработки и отладки приложения можно создать рабочий образ приложения.

  1. Измените раскрывающийся список конфигурации на выпуск и создайте приложение.

  2. В обозревателе решений щелкните правой кнопкой проект и выберите Опубликовать.

  3. В диалоговом окне Публикации перейдите на вкладку Реестр контейнеров Docker.

    Снимок экрана: диалоговое окно публикации, выбор реестра контейнеров Docker.

  4. Выберите Создать Реестр контейнеров Azure.

    Снимок экрана: диалоговое окно

  5. Заполните нужные значения в окне Создать новый реестр контейнеров Azure.

    Параметр Предлагаемое значение Description
    DNS-префикс Глобально уникальное имя Имя, которое однозначно идентифицирует реестр контейнеров.
    Подписка Выберите свою подписку Подписка Azure, которую нужно использовать.
    Группа ресурсов myResourceGroup Имя группы ресурсов, в которой создается реестр контейнеров. Чтобы создать группу ресурсов, выберите Создать.
    SKU Стандартные Уровень обслуживания в реестре контейнеров
    Расположение реестра Расположение рядом с вами Выберите расположение в регионе рядом с вами или рядом с другими службами, которые могут использовать реестр контейнеров.

    Снимок экрана: диалоговое окно создания реестра контейнеров Azure в Visual Studio.

  6. Нажмите кнопку создания. Теперь в диалоговом окне Публикации отображается созданный реестр.

    Снимок экрана: диалоговое окно публикации с созданным реестром контейнеров Azure.

  7. Нажмите кнопку Готово, чтобы завершить процесс публикации образа контейнера во вновь созданном реестре в Azure.

    Снимок экрана: сообщение об успешной публикации.

Следующие шаги

Теперь можно извлечь контейнер из реестра в любой узел, поддерживающий работу образов Docker, например Экземпляры контейнеров Azure.

Дополнительные ресурсы