Поделиться через


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

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

Необходимые условия

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

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

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

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

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

    снимок экрана: флажок

    Снимок экрана: .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 основан на образе dotnet/core/aspnet и содержит инструкции по изменению базового образа, создав проект и добавив его в контейнер. Если вы используете .NET Framework, базовый образ будет отличаться.

Если установлен флажок настройки нового диалогового окна проекта для httpS, Dockerfile предоставляет два порта. Один порт используется для трафика HTTP; другой порт используется для HTTPS. Если флажок не установлен, для HTTP-трафика предоставляется один порт (80).

Отладка

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

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

Заметка

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

Окно контейнеров

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

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

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

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

снимок экрана окна

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

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

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

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

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

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

    снимок экрана: диалоговое окно публикации — выберите

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

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

  5. Введите нужные значения в создание нового реестра контейнеров Azure.

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

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

  6. Щелкните Создать. Диалоговое окно публикации отображает созданный реестр.

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

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

    снимок экрана, показывающий успешную публикацию.

Дальнейшие действия

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

С помощью Visual Studio можно легко создавать, отлаживать и запускать контейнерные приложения .NET, ASP.NET и ASP.NET Core и публиковать их в реестре контейнеров Azure, Docker Hub, Службе приложений Azure или собственном реестре контейнеров. В этой статье вы публикуете приложение 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 Web App или если вы хотите использовать .NET Framework вместо .NET Core, выберите ASP.NET веб-приложение (.NET Framework).

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

    снимок экрана: флажок

    Снимок экрана: последний выпуск с .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.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
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

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

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

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

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

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

Заметка

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

Окно контейнеров

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

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

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

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

снимок экрана окна

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

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

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

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

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

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

    снимок экрана: диалоговое окно публикации — выберите

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

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

  5. Введите нужные значения в создание нового реестра контейнеров Azure.

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

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

  6. Выберите Создать. Диалоговое окно публикации отображает созданный реестр.

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

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

    снимок экрана, показывающий успешную публикацию.

Дальнейшие действия

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

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