Инструменты контейнеров Visual Studio для Docker
Средства, включенные в Visual Studio для разработки с помощью контейнеров Docker, легко используются и значительно упрощают сборку, отладку и развертывание для контейнерных приложений. Вы можете работать с контейнером для одного проекта или использовать оркестрацию контейнеров с Docker Compose или Service Fabric для работы с несколькими службами в контейнерах.
Необходимые условия
- Docker Desktop
- Visual Studio 2019 с веб-разработки, рабочей нагрузкой инструментов Azure и (или) кроссплатформенной разработки .NET Core рабочей нагрузкой
- Инструменты разработки .NET Core для разработки с помощью .NET Core.
- Чтобы опубликовать в Реестре контейнеров Azure, необходима подписка Azure. зарегистрируйте бесплатную пробную версию.
Поддержка 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 Desktop
- Visual Studio 2022 с установленной рабочей нагрузкой веб-разработки, рабочих нагрузок средств Azure и (или) рабочей нагрузке разработки классических приложений .NET
- Чтобы опубликовать в Реестре контейнеров Azure, необходима подписка Azure. зарегистрируйте бесплатную пробную версию.
Поддержка 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, чтобы понять текущие лицензионные требования для вашей версии Docker Desktop в вашей ситуации разработки.
Добавление поддержки Docker
Вы можете включить поддержку Docker во время создания проекта, выбрав Включить поддержку Docker при создании проекта, как показано на следующем снимке экрана:
Заметка
Для проектов .NET Framework (не .NET Core) доступны только контейнеры Windows.
Вы можете добавить поддержку Docker в существующий проект, выбрав Добавить>службу поддержки Docker в обозревателе решений. > поддержки Docker и Добавление > поддержки оркестратора контейнеров расположены в меню правой кнопки мыши (или контекстном меню) узла проекта для ASP.NET Core проекта в обозревателе решений, как показано на следующем снимке экрана.
Добавление поддержки 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, либо .NET SDK. Это диалоговое окно не отображается в проектах .NET Framework или проектах Функций Azure.
В 17.11 и более поздних версиях можно также указать дистрибутив образа контейнера и контекст сборки Docker.
дистрибутив контейнерного образа определяет, какой базовый образ ОС используется в ваших контейнерах. Этот список изменяется при переключении между Linux и Windows в качестве типа контейнера.
Доступны следующие изображения:
Виндоус:
- Windows Nano Server (рекомендуется, доступно только в версиях 8.0 и более поздних, и не предустановлен для нативного опережающего развертывания (AOT) проектов)
- Windows Server Core (доступно только 8.0 и более поздней версии)
Линукс:
- По умолчанию (Debian, но тег имеет значение "8.0")
- Debian
- Ubuntu
- Chiseled Ubuntu
- Альпийский
Заметка
Контейнеры на основе образа Ubuntu и использующие нативное предварительное развертывание (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.
Здесь выберите .NET SDK в качестве типа сборки контейнера, чтобы использовать управление контейнерами в .NET SDK вместо 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-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 см. в Service Fabric.
Непрерывная доставка и непрерывная интеграция (CI/CD)
Visual Studio легко интегрируется с Azure Pipelines для автоматической и непрерывной интеграции и доставки изменений в код и конфигурацию службы. Сведения о начале работы см. в статье Создание первого конвейера.
Сведения о Service Fabric см. в руководстве по . Развертывание приложения ASP.NET Core в Azure Service Fabric с помощью Azure DevOps Projects.
Дальнейшие действия
Дополнительные сведения о реализации служб и использовании средств Visual Studio для работы с контейнерами см. в следующих статьях:
Отладка приложений в локальном контейнере Docker
Развертывание контейнера ASP.NET в реестре контейнеров с помощью Visual Studio
развертывание в службе приложений Azure
Развертывание в приложениях контейнеров Azure с помощью Visual Studio