Свойства сборки средств контейнеров

Вы можете настроить сборку проектов контейнеров Visual Studio, задав свойства, используемые MSBuild для сборки проекта. Например, можно изменить имя Dockerfile, указать теги и метки для образов, указать дополнительные аргументы, переданные командам Docker, и управлять тем, выполняет ли Visual Studio определенные оптимизации производительности, такие как построение вне среды контейнера. Вы также можете задать свойства отладки, такие как имя исполняемого файла для запуска, а также аргументы командной строки для предоставления.

Чтобы задать значение свойства, измените файл проекта. Например, предположим, что файл Dockerfile называется MyDockerfile. Свойство в файле проекта можно задать DockerfilePath следующим образом.

<PropertyGroup>
   <DockerfilePath>MyDockerfile</DockerfilePath>
</PropertyGroup>

Замечание

Свойство заменяет устаревшее свойство DockerfilePathDockerfileFile, которое по-прежнему поддерживается в текущей версии Visual Studio.

Чтобы задать значение свойства, измените файл проекта. Например, предположим, что файл Dockerfile называется MyDockerfile. Свойство в файле проекта можно задать DockerfileFile следующим образом.

<PropertyGroup>
   <DockerfileFile>MyDockerfile</DockerfileFile>
</PropertyGroup>

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

Свойства проектов пакета SDK для .NET

В этом разделе описываются свойства MSBuild, которые применяются при выборе типа сборки контейнера пакета SDK для .NET.

Существует только одно свойство, EnableSdkContainerDebuggingв файле проекта, который необходим для контейнерных проектов пакета SDK для .NET. Он должен иметь значение True для проектов пакета SDK для .NET, чтобы включить отладку.

<PropertyGroup>
   <EnableSdkContainerDebugging>True</EnableSdkContainerDebugging>
</PropertyGroup>

Свойства для проектов Dockerfile

В этом разделе описываются свойства MSBuild, которые применяются при выборе типа сборки контейнера Dockerfile.

В следующей таблице показаны свойства MSBuild, доступные для проектов Dockerfile. Версия пакета NuGet применяется к Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Название свойства Description Значение по умолчанию Версия пакета NuGet
ContainerDevelopmentMode Определяет, включена ли оптимизация сборки на узле (отладка "Быстрый режим"). Допустимые значения : Fast и Regular. Быстрый 1.0.1872750 или более поздней версии
ContainerVsDbgPath Путь к отладчику VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 или более поздней версии
DockerDebuggeeArguments При отладке отладчик передает эти аргументы в запущенный исполняемый файл. Неприменимо к проектам .NET Framework ASP.NET 1.7.8 или более поздней версии
DockerDebuggeeProgram При отладке отладчик предписывает запустить этот исполняемый файл. Для проектов .NET Core и .NET 5 и более поздних версий: dotnet ASP.NET проекты .NET Framework: неприменимо (службы IIS) всегда используются. 1.7.8 или более поздней версии
DockerDebuggeeKillProgram Эта команда используется для убийства выполняемого процесса в контейнере. Неприменимо к проектам .NET Framework ASP.NET 1.7.8 или более поздней версии
DockerDebuggeeWorkingDirectory При отладке отладчику будет показано использовать этот путь в качестве рабочего каталога. C:\app (Windows) или /app (Linux) 1.7.8 или более поздней версии
DockerDefaultTargetOS Целевая операционная система по умолчанию, используемая при создании образа Docker. Задано Visual Studio. 1.0.1985401 или более поздней версии
DockerImageLabels Набор меток по умолчанию, примененных к образу Docker. com.microsoft.created-by=visual-studio; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 или более поздней версии
DockerFastModeProjectMountDirectory В быстром режиме это свойство управляет тем, где выходной каталог проекта подключен к работающему контейнеру. C:\app (Windows) или /app (Linux) 1.9.2 или более поздней версии
DockerfileBuildArguments Дополнительные аргументы, переданные команде сборки Docker . Неприменимо. 1.0.1872750 или более поздней версии
DockerfileContext Контекст по умолчанию, используемый при создании образа Docker, в качестве пути относительно Dockerfile. Устанавливается Visual Studio при добавлении поддержки Docker в проект. В проектах .NET Framework задайте для параметра "." (папка проекта) и в проектах .NET Core и .NET 5 и более поздних версий устанавливается относительный путь к папке решения (обычно ..). 1.0.1872750 или более поздней версии
DockerfileFastModeStage Этап Dockerfile (то есть целевой объект), используемый при создании образа в режиме отладки. Первый этап, найденный в Dockerfile (обычно базовый) -
DockerfileFileFile Описывает файл Dockerfile по умолчанию, используемый для сборки или запуска контейнера для проекта. Это значение может быть путем. Dockerfile 1.0.1872750 или более поздней версии
DockerfileRunArguments Дополнительные аргументы, переданные команде запуска Docker . Неприменимо. 1.0.1872750 или более поздней версии
DockerfileRunEnvironmentFiles Список файлов среды с запятой, примененных во время выполнения Docker. Неприменимо. 1.0.1872750 или более поздней версии
DockerfileTag Тег, используемый при создании образа Docker. При отладке к тегу добавляется :d ev. Имя сборки после удаления неэлементных символов со следующими правилами:
Если результирующий тег имеет все числовые значения, то "image" вставляется в виде префикса (например, image2314)
Если результирующий тег является пустой строкой, то "image" используется в качестве тега.
1.0.1872750 или более поздней версии

В следующей таблице показаны свойства MSBuild, доступные для проектов Dockerfile. Версия пакета NuGet применяется к Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

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

Некоторые свойства, перечисленные как устаревшие, заменяются эквивалентными значениями в launchsettings.json, а один — списком элементов MSBuild.

Название свойства Description Значение по умолчанию Минимальная версия пакета NuGet
ContainerDevelopmentMode Определяет, включена ли оптимизация сборки на узле (отладка "Быстрый режим"). Допустимые значения : Fast и Regular. Быстрый 1.0.1872750
ContainerVsDbgPath Путь к отладчику VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(заменяет DockerImageLabels)
Набор меток по умолчанию, примененных к образу Docker.

ContainerLabel — это список элементов MSBuild, а не свойство.
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 для ContainerLabel

1.5.4 для DockerImageLabels
ContainerFastModeProjectMountDirectory

(заменяет DockerFastModeProjectMountDirectory)
В быстром режиме это свойство управляет тем, где выходной каталог проекта подключен к работающему контейнеру. C:\app (Windows) или /app (Linux) 1.23.0 для ContainerFastModeProjectMountDirectory

1.9.2 для DockerFastModeProjectMountDirectory
ContainerBuildArguments

(заменяет DockerfileBuildArguments)
Дополнительные аргументы, переданные команде сборки контейнера. См. статью "Сборка Docker " или сборка podman. Неприменимо. 1.23.0 для ContainerBuildArguements

1.0.1872750 для DockerfileBuildArguments
ContainerBuildContext

(заменяет DockerfileContext)
Контекст по умолчанию, используемый при создании образа Docker, в качестве пути относительно Dockerfile. Устанавливается Visual Studio при добавлении поддержки Docker в проект. Он задает относительный путь к папке решения (обычно ".."). 1.23.0 для ContainerBuildContext

1.0.1872750 для DockerfileContext
ContainerFastModeStage

(заменяет DockerfileFastModeStage)
Этап Dockerfile (то есть целевой объект), используемый при создании образа в режиме отладки. Первый этап, найденный в Dockerfile (обычно базовый) -
ContainerIncludeDefaultImageLabels (заменяет: DockerIncludeDefaultImageLabels) Если задано значение false, не включает теги com.microsoft.created-by=visual-studio изображений по умолчанию и com.microsoft.visual-studio.project-name=$(MSBuildProjectName). True 1.23.0 для ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages (заменяет DockerLabelBuiltImages) Включите метки на встроенные изображения. Если значение false, метки не добавляются, включая определяемые пользователем метки. True 1.23.0 для ContainerLabelBuiltImages
DockerfilePath

(заменяет DockerfileFile)
Описывает файл Dockerfile по умолчанию, используемый для сборки или запуска контейнера для проекта. Dockerfile 1.23.0 для DockerfilePath

1.0.1872750 для DockerfileFile
ContainerRepository

(заменяет DockerRepository)
Репозиторий, используемый в метке, например webapplication1 в метке webapplication1:dev. Имя сборки. 1.23.0 для ContainerRepository
ContainerImageTag или ContainerImageTags

(заменяет DockerfileTag)
Тег, используемый при создании изображения. При отладке к тегу добавляется :d ev. Имя сборки после удаления неэлементных символов со следующими правилами:
Если результирующий тег имеет все числовые значения, то "image" вставляется в виде префикса (например, image2314)
Если результирующий тег является пустой строкой, то "image" используется в качестве тега.
1.23.0 для ContainerImageTag, ContainerImageTags

1.0.1872750 для DockerfileTag.
DockerDebuggeeArguments

(устаревшее, использование commandLineArgs в launchsettings.json)
При отладке отладчик передает эти аргументы в запущенный исполняемый файл. - 1.7.8
DockerDebuggeeProgram

(устаревшее, использование executablePath в launchsettings.json)
При отладке отладчик предписывает запустить этот исполняемый файл. - 1.7.8
DockerDebuggeeKillProgram Эта команда используется для убийства выполняемого процесса в контейнере. - 1.7.8
DockerDebuggeeWorkingDirectory

(устаревшее; использование workingDirectory в launchsettings.json)
При отладке отладчику будет показано использовать этот путь в качестве рабочего каталога. C:\app (Windows) или /app (Linux) 1.7.8
DockerDefaultTargetOS Целевая операционная система по умолчанию, используемая при создании образа Docker. Задано Visual Studio. 1.0.1985401
DockerfileRunArguments

(устаревшее, использование containerRunArguments в launchsettings.json)
Дополнительные аргументы, переданные команде запуска Docker . Неприменимо. 1.0.1872750
DockerfileRunEnvironmentFiles

(устаревшее, использование containerRunEnvironmentFiles в launchsettings.json)
Список файлов среды с запятой, примененных во время выполнения Docker. Неприменимо. 1.0.1872750

ContainerRepository и ContainerImageTag (или ContainerImageTags) предоставляют возможность указывать две части метки изображения, репозиторий и один или несколько тегов (например, webapp1:alpha). В предыдущих версиях Visual Studio можно использовать DockerfileTag свойство для указания репозитория и одного тега, но это было ограничение, например, невозможно указать несколько тегов. Свойство DockerfileTag устарело; теперь проекты должны использовать ContainerRepository и ContainerImageTag, а текущая версия также поддерживает ContainerImageTags для нескольких тегов.

В предыдущих версиях Visual Studio синтаксис был <DockerfileTag>webapp1:alpha</DockerfileTag>. Текущий эквивалент и , если <ContainerImageTags>alpha;latest</ContainerImageTags> требуется <ContainerRepository>webapp1</ContainerRespository><ContainerImageTag>alpha</ContainerImageTag>несколько тегов.

Example

В следующем файле проекта показаны примеры некоторых этих параметров.

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8c7ab9a5-d578-4c40-8b6d-54d174002229</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <!-- By default, Visual Studio uses the folder above the Dockerfile.
         The path is relative to the Dockerfile, so here the context is
         set to the same folder as the Dockerfile. -->
    <ContainerBuildContext>.</ContainerBuildContext>
    <!-- Set `docker run` arguments to mount a volume -->
    <DockerfileRunArguments>-v $(MSBuildProjectDirectory)/host-folder:/container-folder:ro</DockerfileRunArguments>
    <!-- Set `docker build` arguments to add a custom tag -->
    <ContainerBuildArguments>-t contoso/front-end:v2.0</ContainerBuildArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
  </ItemGroup>

</Project>

Замечание

Контекст сборки, который можно задать, указав значение ( ContainerBuildContext или DockerfileContext), обычно отличается в Visual Studio для проектов, которые docker build (или podman build) используются при запуске из командной строки. Отклонение от поведения командной строки сборки необходимо для включения артефактов сборки на уровне решения.

При вызове docker build (или podman build) всегда указывается контекст сборки, и при необходимости можно указать путь к Dockerfile. По умолчанию Dockerfile находится в корне контекста, но можно использовать -f флаг для указания альтернативного расположения. Например, можно создать docker build -f Dockerfile .. из каталога проекта или docker build -f ProjectName/Dockerfile . из каталога решения.

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8c7ab9a5-d578-4c40-8b6d-54d174002229</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <!-- In CI/CD scenarios, you might need to change the context. By default, Visual Studio uses the
         folder above the Dockerfile. The path is relative to the Dockerfile, so here the context is
         set to the same folder as the Dockerfile. -->
    <DockerfileContext>.</DockerfileContext>
    <!-- Set `docker run` arguments to mount a volume -->
    <DockerfileRunArguments>-v $(MSBuildProjectDirectory)/host-folder:/container-folder:ro</DockerfileRunArguments>
    <!-- Set `docker build` arguments to add a custom tag -->
    <DockerfileBuildArguments>-t contoso/front-end:v2.0</DockerfileBuildArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
  </ItemGroup>

</Project>

Замечание

Контекст Docker, для которого можно задать, предоставляя значение DockerfileContext, обычно отличается в Visual Studio для проектов, предназначенных для .NET Core (включая .NET 5 и более поздних версий), от того, что docker build используется при запуске из командной строки. Необходимо отходить от поведения docker build , чтобы обеспечить включение артефактов сборки на уровне решения.

При вызове docker buildвсегда указывается контекст сборки, и при необходимости можно указать путь к Dockerfile. По умолчанию Dockerfile находится в корне контекста, но можно использовать -f флаг для указания альтернативного расположения. Например, можно создать docker build -f Dockerfile .. из каталога проекта или docker build -f ProjectName/Dockerfile . из каталога решения.

Дальнейшие шаги

Сведения о свойствах MSBuild, как правило, см. в разделе "Свойства MSBuild".

См. также

Свойства сборки Docker Compose

Параметры запуска средств контейнера

зарезервированные и известные свойства MSBuild