Использование средств Visual Studio для работы с контейнерами для Docker

Доступные в Visual Studio инструменты для разработки с помощью контейнеров Docker просты в использовании и значительно упрощают сборку, отладку и развертывание контейнерных приложений. Можно работать над одним проектом с использованием контейнера или применять оркестрацию контейнеров с Service Fabric или Docker Compose для работы с несколькими службами в контейнерах.

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

Поддержка Docker в Visual Studio

Поддержка Docker доступна в проектах ASP.NET, ASP.NET Core и консольных проектах .NET Core и .NET Framework.

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

В Visual Studio 2019 в качестве служб оркестрации контейнеров можно использовать Docker Compose, Kubernetes и Service Fabric.

Примечание.

При создании консольного проекта .NET Framework или .NET Core невозможно добавить поддержку Docker. После создания проекта консольного приложения .NET Core становится доступным параметр Добавить поддержку Docker. проекты консольного приложения платформа .NET Framework не поддерживают Добавьте параметр поддержки Docker после создания проекта. После создания в консольных проектах .NET Framework и .NET Core становится доступным параметр Добавить поддержку оркестратора контейнеров с помощью Service Fabric или Docker Compose.

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

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

Поддержка Docker в Visual Studio

Поддержка Docker доступна в проектах ASP.NET, ASP.NET Core и консольных проектах .NET Core и .NET Framework.

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

В Visual Studio 2022 версии 17.9 и более поздних версий при добавлении поддержки Docker в проект .NET 7 или более поздней версии можно выбрать два типа сборки контейнеров для добавления поддержки Docker. Можно добавить Dockerfile, чтобы указать, как создавать образы контейнеров или использовать встроенную поддержку контейнеров, предоставляемую пакетом SDK для .NET.

Кроме того, в Visual Studio 2022 и более поздних версиях при выборе оркестрации контейнеров можно использовать Docker Compose или Service Fabric в качестве служб оркестрации контейнеров.

Примечание.

Если вы используете полный шаблон консольного проекта .NET Framework, после создания проекта поддерживается вариант Добавление поддержки оркестратора контейнеров с возможностью использования Service Fabric или Docker Compose. Варианты добавления поддержки при создании проекта и добавления поддержки Docker для одного проекта без оркестрации недоступны.

В Visual Studio 2022 доступно окно Контейнеры, которое позволяет просматривать запущенные контейнеры, доступные образы, переменные среды, журналы и сопоставления портов, проверять файловую систему, подключать отладчик и открывать окно терминала в среде контейнера. См. Использование окна "Контейнеры".

Примечание.

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

Добавление поддержки Docker

Поддержку Docker можно включить при создании проекта, выбрав Enable Docker Support (Включить поддержку Docker), как показано на следующем снимке экрана:

Снимок экрана: включение поддержки Docker для нового веб-приложения ASP.NET Core в Visual Studio.

Снимок экрана: включение поддержки Docker для нового веб-приложения ASP.NET Core в Visual Studio.

Примечание.

Для проектов .NET Framework (не .NET Core) доступны только контейнеры Windows.

Можно добавить поддержку Docker в существующий проект, выбрав Добавить>Поддержка Docker в обозревателе решений. Для проекта ASP.NET Core команды Добавить > Поддержка Docker и Добавить > Container Orchestrator Support (Поддержка оркестратора контейнеров) доступны в контекстном меню, открываемом правым щелчком мыши по узлу проекта, в обозревателе решений, как показано на следующем снимке экрана:

Снимок экрана: пункт меню добавления поддержки Docker в Visual Studio.

Снимок экрана: пункт меню добавления поддержки Docker в Visual Studio.

Добавление поддержки Docker

При добавлении или включении поддержки Docker Visual Studio добавляет в проект следующее:

  • файл Dockerfile;
  • .dockerignore файл
  • ссылку пакета NuGet на Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Добавляемый Dockerfile будет похож на следующий код. В этом примере проект был назван WebApplication-Docker, и вы выбрали контейнеры Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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

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

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

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

Добавление поддержки Docker с помощью типа сборки контейнера Dockerfile

При добавлении или включении поддержки Docker в проект .NET 7 или более поздней версии Visual Studio отображает диалоговое окно "Параметры шаблонов контейнеров", которое дает выбор операционной системы (Linux или Windows), но также возможность выбрать тип сборки контейнера, Dockerfile или пакет SDK для .NET. Это диалоговое окно не отображается в платформа .NET Framework проектах или Функции Azure проектах.

В версии 17.11 и более поздних версий можно также указать дистрибутив образа контейнера и контекст сборки Docker.

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

Дистрибутив образа контейнера указывает, какой образ ОС используется в качестве базового образа. Этот список изменяется при переключении между Linux и Windows в качестве типа контейнера.

Доступны следующие изображения:

Windows:

  • Windows Nano Server (рекомендуется только 8.0 и более поздних версий, а не предустановлен для проектов развертывания в машинном коде (AOT)
  • Windows Server Core (доступно только 8.0 и более поздней версии)

Linux:

  • По умолчанию (Debian, но тег имеет значение "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Алпайн

Примечание.

Контейнеры, основанные на образе Ubuntu, и которые используют развертывание Native Ahead-time (AOT) можно отлаживать только в быстром режиме. См. статью "Настройка контейнеров Docker" в Visual Studio.

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

Если выбрать Dockerfile, Visual Studio добавляет в проект следующее:

  • файл Dockerfile;
  • файл .dockerignore;
  • ссылку пакета NuGet на Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Добавляемый Dockerfile будет похож на следующий код. В этом примере проект был назван WebApplication-Docker, и вы выбрали контейнеры Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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

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

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

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

Контейнеризация приложения .NET без Dockerfile

С помощью Visual Studio 2022 17.9 и более поздних версий с установленным пакетом SDK для .NET 7 в проектах ASP.NET Core, предназначенных для .NET 6 или более поздней версии, вы можете использовать встроенную поддержку пакета SDK для контейнеров .NET, что означает, что вам не нужен Dockerfile; См. статью "Контейнеризация приложения .NET с помощью dotnet publish". Вместо этого вы настраиваете контейнеры с помощью свойств MSBuild в файле проекта, а параметры запуска контейнеров с помощью Visual Studio кодируются в .json файле конфигурации launchSettings.json.

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

Здесь выберите пакет SDK для .NET в качестве типа сборки контейнера, чтобы использовать управление контейнерами пакета SDK для .NET вместо Dockerfile.

Дистрибутив образа контейнера указывает, какой образ ОС используется в качестве базового образа. Этот список изменяется при переключении между Linux и Windows в качестве контейнера. Список доступных изображений см. в предыдущем разделе.

Запись сборки контейнера пакета SDK для .NET в launchSettings.json выглядит следующим образом:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

Пакет SDK для .NET управляет некоторыми параметрами, которые были бы закодированы в Dockerfile, таких как базовый образ контейнера, и переменные среды для задания. Параметры, доступные в файле проекта для конфигурации контейнера, перечислены при настройке контейнера. Например, дистрибутив образа контейнера сохраняется в файле проекта в качестве ContainerBaseImage свойства. Вы можете изменить его позже, изменив файл проекта.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Использование окна "Контейнеры"

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

Откройте окно Контейнеры с помощью быстрого запуска (CTRL+Q) и введите containers. С помощью элементов управления закрепления окно можно поместить в другое место. Из-за ширины окна оно лучше подходит для закрепления в нижней части экрана.

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

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

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

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

Поддержка Docker Compose

Если требуется создать многоконтейнерное решение с помощью Docker Compose, добавьте в проекты поддержку оркестратора контейнеров. Это позволит выполнять и отлаживать группу контейнеров (всего решения или группы проектов) одновременно, если они определяются в одном файле docker-compose.yml.

Чтобы добавить поддержку оркестратора контейнеров с использованием Docker Compose, щелкните правой кнопкой мыши узел проекта в обозревателе решений и выберите Добавить > Поддержка оркестратора контейнеров. Затем выберите Docker Compose для управления контейнерами.

После добавления поддержки оркестратора контейнеров в проект в него добавится файл Dockerfile (если его не было прежде), а в само решение в окне Обозреватель решений — папка docker-compose, как показано на следующем снимке экрана:

Снимок экрана: файлы Docker в обозревателе решений Visual Studio.

Снимок экрана: файлы Docker в обозревателе решений Visual Studio.

Если файл docker-compose.yml уже существует, Visual Studio просто добавит в него необходимые строки кода конфигурации.

Повторите этот процесс с другими проектами, которыми нужно управлять с помощью Docker Compose.

При работе с большим количеством служб можно сэкономить время и вычислительные ресурсы, выбрав подмножество служб, которые следует запустить в сеансе отладки. См. Запуск подмножества служб Compose.

Примечание.

Обратите внимание, что удаленные узлы Docker не поддерживаются в инструментах Visual Studio.

Поддержка Service Fabric

Средства Service Fabric для Visual Studio позволяют выполнять разработку и отладку в локальной среде и Azure Service Fabric, а также развертывание в Azure.

Visual Studio 2019 и более поздние версии поддерживают разработку контейнерных микрослужб с помощью контейнеров Windows и оркестрации Service Fabric.

Подробное руководство см . в руководстве по развертыванию приложения .NET в контейнере Windows в Azure Service Fabric.

Дополнительные сведения см. в документации по Azure Service Fabric.

Непрерывная интеграция и непрерывное развертывание (CI/CD)

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

Сведения о Service Fabric см. в руководстве . Развертывание приложения ASP.NET Core в Azure Service Fabric с помощью Azure DevOps Projects.

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

Чтобы получить дополнительные сведения о реализации служб и использовании средств Visual Studio для работы с контейнерами, ознакомьтесь со следующими статьями:

Отладка приложений в локальном контейнере Docker

Deploy an ASP.NET container to a container registry using Visual Studio (Развертывание контейнера ASP.NET в реестр контейнеров с использованием Visual Studio)