Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете добавить поддержку контейнеров Docker в поддерживаемых типах проектов Visual Studio, таких как ASP.NET веб-проекты и другие. Ознакомьтесь с общими сведениями о поддерживаемых типах проектов в вашей версии Visual Studio.
Вы можете добавить поддержку контейнеров Docker или Podman в поддерживаемых типах проектов Visual Studio, таких как ASP.NET веб-проекты и другие. Ознакомьтесь с общими сведениями о поддерживаемых типах проектов в вашей версии Visual Studio.
Предпосылки
- Docker Desktop
- Visual Studio с установленными рабочими нагрузками для разработки на ASP.NET и веб, разработки на Azure и/или разработки настольных приложений .NET.
- Чтобы опубликовать в Реестре контейнеров Azure, требуется подписка Azure. Зарегистрируйтесь для получения бесплатной пробной версии.
Предпосылки
- Docker Desktop или Podman Desktop.
- Visual Studio или для поддержки Podman Visual Studio 2026 с установленной рабочей нагрузкой разработки ASP.NET и веб-разработки, рабочей нагрузкой разработки Azure и (или) рабочей нагрузкой разработки классических приложений .NET .
- Чтобы опубликовать в Реестре контейнеров Azure, требуется подписка Azure. Зарегистрируйтесь для получения бесплатной пробной версии.
Добавление поддержки контейнеров при создании проекта
Вы можете включить поддержку контейнеров во время создания проекта, выбрав включить поддержку контейнеров при создании проекта, как показано на следующем снимке экрана:
Замечание
Для проектов .NET Framework (не .NET Core) доступны только контейнеры Windows.
Замечание
Если вы используете полный шаблон консольного проекта .NET Framework, то поддерживаемый параметр — добавить поддержку Оркестратора контейнеров после создания проекта с параметрами использования Service Fabric или Docker Compose. Добавление поддержки при создании проекта и добавление поддержки Docker для одного проекта без оркестрации не являются доступными опциями.
Замечание
Поддержка контейнеров .NET Framework прекращена в текущей версии Visual Studio. Контейнеры .NET Framework поддерживаются до Visual Studio 2022 17.14.
Добавление поддержки контейнеров в существующий проект
Вы можете добавить поддержку Docker в существующий проект, выбрав добавить>поддержку контейнеров в обозревателе решений. Команды "Добавить поддержку контейнеров" и "Добавить >> службу поддержки оркестратора контейнеров" находятся в меню правой кнопкой мыши (или контекстном меню) узла проекта для проекта ASP.NET Core в обозревателе решений, как показано на следующем снимке экрана:
Выберите тип сборки контейнера и другие параметры
При добавлении или включении поддержки контейнеров в проект .NET 7 или более поздней версии Visual Studio отображает диалоговое окно "Параметры формирования шаблонов контейнеров ", которое дает выбор операционной системы (Linux или Windows), но также возможность выбрать тип сборки контейнера, dockerfile или пакет SDK для .NET.
Вы также можете указать дистрибутив образа контейнера и контекст сборки контейнера.
Дистрибутив образа контейнера определяет, какой образ ОС используется в качестве базового для контейнеров. Этот список изменяется при переключении между Linux и Windows в качестве типа контейнера.
Доступны следующие изображения:
Виндоус:
- Windows Nano Server (рекомендуется, доступно только в версиях 8.0 и более поздних, не предустановлено для проектов развёртывания Native Ahead-of-time (AOT))
- Windows Server Core (доступно только 8.0 и более поздней версии)
Linux :
- По умолчанию (Debian, но тег соответствует целевой версии .NET)
- Debian
- Ubuntu
- Chiseled Ubuntu
- Алпайн
Замечание
Контейнеры, основанные на образе Chiseled Ubuntu и использующие развертывание Native Ahead-of-time (AOT), можно отлаживать только в быстром режиме. См . статью "Настройка контейнеров Docker" в Visual Studio.
Контекст сборки контейнера указывает папку, используемую для docker build (или podman build). См. контекст сборки Docker или сборку Podman. По умолчанию используется папка решения, которая рекомендуется. Все файлы, необходимые для сборки, должны находиться в этой папке, что не так, если выбрать папку проекта или другую папку.
Тип сборки контейнера Dockerfile
Если выбрать тип сборки контейнера Dockerfile , Visual Studio добавляет в проект следующее:
- Файл Dockerfile
-
.dockerignoreфайл - Ссылка на пакет NuGet для Microsoft.VisualStudio.Azure.Containers.Tools.Targets
Добавленный файл Dockerfile будет выглядеть следующим образом. В этом примере проект был назван WebApplication-Docker, и вы выбрали контейнеры Linux:
# 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 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.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 "./WebApplication15-AddContainerSupport.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", "WebApplication15-AddContainerSupport.dll"]
Тип сборки контейнера пакета SDK для .NET
Вы можете использовать встроенную поддержку 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, таких как базовый образ контейнера, и переменные среды для задания. Параметры, доступные в файле проекта для конфигурации контейнера, перечислены при настройке контейнера. Например, Container Image Distro сохраняется в файле проекта как свойство ContainerBaseImage. Вы можете изменить его позже, изменив файл проекта.
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>
Выберите тип сборки контейнера и другие параметры
При добавлении или включении поддержки Docker в проект .NET 7 или более поздней версии Visual Studio отображает диалоговое окно "Параметры шаблонов контейнеров ", которое дает выбор операционной системы (Linux или Windows), но также возможность выбрать тип сборки контейнера, Dockerfile или пакет SDK для .NET. Это диалоговое окно не отображается в проектах .NET Framework.
В версии 17.11 и более поздних версий можно также указать дистрибутив образа контейнера и контекст сборки Docker.
Дистрибутив образа контейнера определяет, какой образ ОС используется в качестве базового для контейнеров. Этот список изменяется при переключении между Linux и Windows в качестве типа контейнера.
Доступны следующие изображения:
Виндоус:
- Windows Nano Server (рекомендуется, доступно только в версиях 8.0 и более поздних, не предустановлено для проектов развёртывания Native Ahead-of-time (AOT))
- Windows Server Core (доступно только 8.0 и более поздней версии)
Linux :
- По умолчанию (Debian, но тег имеет значение "8.0")
- Debian
- Ubuntu
- Chiseled Ubuntu
- Алпайн
Замечание
Контейнеры, основанные на образе Chiseled Ubuntu и использующие развертывание Native Ahead-of-time (AOT), можно отлаживать только в быстром режиме. См . статью "Настройка контейнеров Docker" в Visual Studio.
Контекст сборки Docker указывает папку, используемую для сборки Docker. См. контекст сборки Docker. По умолчанию используется папка решения, которая рекомендуется. Все файлы, необходимые для сборки, должны находиться в этой папке, что не так, если выбрать папку проекта или другую папку.
Тип сборки контейнера Dockerfile
Если выбрать тип сборки контейнера 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:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
FROM mcr.microsoft.com/dotnet/sdk:8.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"]
Тип сборки контейнера пакета SDK для .NET
С помощью 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, таких как базовый образ контейнера, и переменные среды для задания. Параметры, доступные в файле проекта для конфигурации контейнера, перечислены при настройке контейнера. Например, Container Image Distro сохраняется в файле проекта как свойство ContainerBaseImage. Вы можете изменить его позже, изменив файл проекта.
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>
Дальнейшие шаги
Дополнительные сведения о реализации служб и использовании средств Visual Studio для работы с контейнерами см. в следующих статьях:
Отладка приложений в локальном контейнере
Развертывание контейнера ASP.NET в реестре контейнеров с помощью Visual Studio
Развертывание в Службу приложений Azure
Развертывание в приложениях контейнеров Azure с помощью Visual Studio