Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Заметка
В этом разделе описывается, как настроить контейнеры Docker при выборе типа сборки контейнера Dockerfile. Если вы используете тип сборки пакета SDK для .NET, параметры настройки отличаются, и большинство сведений в этом разделе неприменимо. Вместо этого см. раздел Контейнеризация приложения .NET с использованием команды dotnet publish.
При сборке в конфигурации отладки существует несколько оптимизаций, которые Visual Studio делает, что помогает с производительностью сборочного процесса контейнеризованных проектов. Процесс сборки контейнерных приложений не так прост, как простое следование шагам, описанным в Dockerfile. Сборка в контейнере медленнее, чем сборка на локальном компьютере. Таким образом, при сборке в конфигурации отладки Visual Studio фактически создает проекты на локальном компьютере, а затем делится выходной папкой с контейнером с помощью монтирования томов. Сборка с включённой этой оптимизацией называется быстрой сборкой режима .
В быстром режиме Visual Studio вызывает docker build
с аргументом, который сообщает Docker создать только первый этап в Dockerfile (обычно этап base
). Это можно изменить, задав свойство MSBuild DockerfileFastModeStage
, описанное в разделе Свойства MSBuild для средств контейнеров. Visual Studio обрабатывает остальную часть процесса без учета содержимого Dockerfile. Поэтому при изменении Файла Dockerfile, например для настройки среды контейнера или установки дополнительных зависимостей, необходимо поместить изменения на первом этапе. Любые пользовательские шаги, размещенные на этапах build
, publish
или final
Dockerfile, не выполняются.
Эта оптимизация производительности обычно выполняется только при сборке в конфигурации отладки. В конфигурации выпуска сборка выполняется в контейнере, как указано в Dockerfile. Можно включить это поведение для конфигурации Release, задав ContainerDevelopmentMode
значение Fast в файле проекта.
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<ContainerDevelopmentMode>Fast</ContainerDevelopmentMode>
</PropertyGroup>
Если вы хотите отключить оптимизацию производительности для всех конфигураций и выполнить сборку, как указано в Dockerfile, задайте свойству ContainerDevelopmentMode значение Regular в файле проекта следующим образом:
<PropertyGroup>
<ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
</PropertyGroup>
Чтобы восстановить оптимизацию производительности, удалите свойство из файла проекта.
При запуске отладки (F5) ранее запущенный контейнер повторно используется, если это возможно. Если вы не хотите повторно использовать предыдущий контейнер, вы можете воспользоваться командами Rebuild или Clean в Visual Studio, чтобы заставить Visual Studio использовать новый контейнер.
Процесс запуска отладчика зависит от типа операционной системы проекта и контейнера:
Сценарий | Процесс отладчика |
---|---|
приложения .NET Core (контейнеры Linux) | Visual Studio загружает vsdbg и сопоставляет его с контейнером, а затем вызывается с помощью программы и аргументов (то есть dotnet webapp.dll ), а затем отладчик подключается к процессу. |
приложения .NET Core (контейнеры Windows) | Visual Studio использует onecoremsvsmon и сопоставляет его с контейнером, запускает его в качестве точки входа, после чего Visual Studio подключается к контейнеру и присоединяется к программе. |
приложения .NET Framework | Visual Studio использует msvsmon и связывает его с контейнером, запускает его как часть точки входа, к которой Visual Studio может подключиться и прикрепиться к программе. Это аналогично настройке удаленной отладки на другом компьютере или виртуальной машине. |
Сведения о vsdbg.exe
см. в руководстве по внедорожной отладке .NET Core в Linux и OS X с помощью Visual Studio.
Измените образ контейнера для отладки и эксплуатации
Чтобы изменить образ контейнера для отладки и выпуска, измените стадию base
. Добавьте кастомизации в Dockerfile в разделе базового этапа, как правило, в первом разделе Dockerfile. Для получения информации о командах Dockerfile обратитесь к справочнику Dockerfile в документации Docker.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# <add your commands here>
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication3/WebApplication3.csproj", "WebApplication3/"]
RUN dotnet restore "WebApplication3/WebApplication3.csproj"
COPY . .
WORKDIR "/src/WebApplication3"
RUN dotnet build "WebApplication3.csproj" -c Release -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication3.csproj" -c Release -o /app/publish
# 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", "WebApplication3.dll"]
Изменение образа контейнера только для отладки
Вы можете настроить контейнеры определенными способами, чтобы помочь в отладке, например установить что-то для диагностических целей, не влияя на рабочие сборки.
Чтобы изменить контейнер только для отладки, создайте этап и используйте свойство MSBuild DockerfileFastModeStage
, чтобы сообщить Visual Studio использовать настроенный этап при отладке. См. справочник по Dockerfile в документации Docker для получения информации о командах Dockerfile.
Заметка
Инструкции, приведенные здесь, применяются к случаю с одним контейнером. Вы также можете сделать то же самое для нескольких контейнеров с Помощью Docker Compose, но методы, необходимые для Docker Compose, немного отличаются. Например, этап управляется параметром в файле dockercompose.debug.yml
.
В следующем примере мы устанавливаем пакет procps-ng
, но только в режиме отладки. Этот пакет предоставляет команду pidof
, которая требуется Visual Studio (при использовании .NET 5 и более ранних версий), но отсутствует в образе Mariner, используемом здесь. Этап, используемый для отладки в быстром режиме, является debug
, настраиваемый этап, определенный здесь. Этап быстрого режима не должен наследоваться от этапа build
или publish
, он может наследовать непосредственно от этапа base
, так как Visual Studio подключает том, содержащий все необходимое для запуска приложения, как описано ранее в этой статье.
#See https://aka.ms/containerfastmode to understand 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:6.0-cbl-mariner2.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM base AS debug
RUN tdnf install procps-ng -y
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:6.0-cbl-mariner2.0 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
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish
# 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", "WebApplication1.dll"]
В файле проекта добавьте этот параметр, чтобы сообщить Visual Studio использовать настраиваемый этап debug
при отладке.
<PropertyGroup>
<!-- other property settings -->
<DockerfileFastModeStage>debug</DockerfileFastModeStage>
</PropertyGroup>
Настройка образов отладки с помощью развертывания AOT
Для поддержки собственного развертывания AOT устанавливается отладчик GNU (GDB), но только на образе, используемом при отладке, а не на окончательном образе среды выполнения. Dockerfile содержит аргумент сборки LAUNCHING_FROM_VS
, который может быть true
или false
. Если true
, используется этап aotdebug
, где устанавливается GDB. Обратите внимание, что Visual Studio поддерживает только собственные контейнеры AOT и GDB для Linux.
# These ARGs allow for swapping out the base used to make the final image when debugging from VS
ARG LAUNCHING_FROM_VS
# This sets the base image for final, but only if LAUNCHING_FROM_VS has been defined
ARG FINAL_BASE_IMAGE=${LAUNCHING_FROM_VS:+aotdebug}
# ... (other stages omitted)
# This stage is used as the base for the final stage when launching from VS to support debugging in regular mode (Default when not using the Debug configuration)
FROM base as aotdebug
USER root
# Install GDB to support native debugging
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
gdb
USER app
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM ${FINAL_BASE_IMAGE:-mcr.microsoft.com/dotnet/runtime-deps:8.0} AS final
WORKDIR /app
EXPOSE 8080
COPY --from=publish /app/publish .
ENTRYPOINT ["./WebApplication1"]
Вы можете использовать aotstage
в Dockerfile для настройки образа, используемого во время отладки, без влияния на окончательный образ, используемый при запуске не из Visual Studio или в продуктивной среде. Например, можно установить средство для использования только во время отладки.