Поделиться через


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

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

Задание свойств MSBuild

Чтобы задать значение свойства, измените файл проекта. Для свойств Docker Compose этот файл проекта является одним из них с .dcproj расширением, если иное не указано в таблице в следующем разделе. Например, предположим, что при начале отладки должен запускаться браузер. Свойство в .dcproj файле проекта можно задать DockerLaunchAction следующим образом.

<PropertyGroup>
   <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
</PropertyGroup>

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

Свойства MSBuild для Docker Compose

В таблице ниже приводятся свойства MSBuild, доступные для проектов Docker Compose.

Имя свойства Расположение Description Default value
AdditionalComposeFilePaths DCPROJ Указывает дополнительные файлы Compose в списке, разделенном точкой с запятой, которые будут отправлены в docker-compose.exe для всех команд. Допустимы относительные пути из файла проекта Docker Compose (dcproj). -
DockerComposeBaseFilePath DCPROJ Указывает первую часть имен файлов Docker Compose без .yml расширения. Например:
1. DockerComposeBaseFilePath = null/undefined: используйте базовый путь к docker-composeфайлу, а файлы будут называться docker-compose.yml и docker-compose.override.yml.
2. DockerComposeBaseFilePath = mydockercompose: файлы будут называться mydockercompose.yml и mydockercompose.override.yml.
3. DockerComposeBaseFilePath = ..\mydockercompose: файлы будут располагаться на уровень выше.
docker-compose
DockerComposeBuildArguments DCPROJ Указывает дополнительные параметры, передаваемые в команду docker-compose build. Например, --parallel --pull.
DockerComposeDownArguments DCPROJ Указывает дополнительные параметры, передаваемые в команду docker-compose down. Например, --timeout 500. -
DockerComposeEnvFilePath DCPROJ Относительный путь к env-файлу, который передается командам docker compose через --env-file. См. раздел "Использование атрибута env_file". Нет значения
DockerComposeProjectName DCPROJ При указании переопределяет имя проекта Для проекта Docker Compose. dockercompose + автоматически сгенерированный хэш
DockerComposeProjectPath CSPROJ или VBPROJ Относительный путь к файлу Проекта Docker Compose (dcproj). Задайте это свойство при публикации проекта службы, чтобы можно было найти связанные параметры сборки образа, хранящиеся в файле docker-compose.yml. -
DockerComposeProjectsToIgnore DCPROJ Указывает, что проекты, которые будут игнорироваться средствами Docker Compose во время отладки. Это свойство можно использовать для любого проекта. Пути к файлам можно указать одним из двух способов:
1. Относительно DCPROJ. Например, <DockerComposeProjectsToIgnore>path\to\AngularProject1.csproj</DockerComposeProjectsToIgnore>.
2. Абсолютные пути.
Примечание. Пути должны быть разделены с помощью символа ;.
-
DockerComposeUpArguments DCPROJ Указывает дополнительные параметры, передаваемые в команду docker-compose up. Например, --timeout 500. -
DockerDevelopmentMode DCPROJ Определяет, создан ли пользовательский проект в контейнере. Допустимые значения Fast или Regular определяют, какие этапы создаются в Dockerfile. По умолчанию в качестве конфигурации отладки используется режим Fast, в противном случае — режим Regular. Быстро
DockerLaunchAction DCPROJ Указывает действие запуска, выполняемое при нажатии клавиши F5 или клавиш CTRL+F5. Допустимые значения: None, LaunchBrowser и LaunchWCFTestClient. нет
DockerLaunchBrowser DCPROJ Указывает, следует ли запускать браузер. Игнорируется, если задано свойство DockerLaunchAction. False
DockerServiceName DCPROJ Если задан DockerLaunchAction или DockerLaunchBrowser, то DockerServiceName указывает, какая служба, на которую ссылается docker-compose файл, запускается. -
DockerServiceUrl DCPROJ URL-адрес, используемый при запуске браузера. Допустимые токены замены: "{ServiceIPAddress}", "{ServicePort}" и "{Scheme}". Пример: {Scheme}://{ServiceIPAddress}:{ServicePort} -
DockerTargetOS DCPROJ Целевая ОС, используемая при сборке образа Docker. -

Пример

Если изменить расположение docker-compose файлов, задав DockerComposeBaseFilePath относительный путь, необходимо также убедиться, что контекст сборки изменен таким образом, чтобы он ссылался на папку решения. Например, если docker-compose файл является папкой с именем DockerComposeFiles, файл Docker Compose должен задать для контекста сборки значение "." или ".. /.", в зависимости от того, где он относится к папке решения.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
  <PropertyGroup Label="Globals">
    <ProjectVersion>2.1</ProjectVersion>
    <DockerTargetOS>Windows</DockerTargetOS>
    <ProjectGuid>154022c1-8014-4e9d-bd78-6ff46670ffa4</ProjectGuid>
    <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
    <DockerServiceUrl>{Scheme}://{ServiceIPAddress}{ServicePort}</DockerServiceUrl>
    <DockerServiceName>webapplication1</DockerServiceName>
    <DockerComposeBaseFilePath>DockerComposeFiles\mydockercompose</DockerComposeBaseFilePath>
    <AdditionalComposeFilePaths>AdditionalComposeFiles\myadditionalcompose.yml</AdditionalComposeFilePaths>
  </PropertyGroup>
  <ItemGroup>
    <None Include="DockerComposeFiles\mydockercompose.override.yml">
      <DependentUpon>DockerComposeFiles\mydockercompose.yml</DependentUpon>
    </None>
    <None Include="DockerComposeFiles\mydockercompose.yml" />
    <None Include=".dockerignore" />
  </ItemGroup>
</Project>

Файл mydockercompose.yml должен выглядеть так, как показано ниже. Для контекста сборки задан относительный путь к папке решения (в данном случае ..).

version: '3.4'

services:
  webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    build:
      context: ..
      dockerfile: WebApplication1\Dockerfile

Примечание.

Свойства DockerComposeBuildArguments, DockerComposeDownArguments и DockerComposeUpArguments появились в Visual Studio 2019 версии 16.3.

Переопределение конфигурации Docker Compose в Visual Studio

Обычно docker-compose.override.yml используется для переопределения некоторых параметров в docker-compose.yml. Кроме того, Visual Studio создает переопределение файлов docker-compose.vs.debug.g.yml (для быстрого режима) и docker-compose.vs.release.g.yml (для регулярного режима) с параметрами, характерными для запуска приложения в Visual Studio. Эти параметры Visual Studio можно переопределить, поместив файл docker-compose.vs.debug.yml (для режима Быстрый) или docker-compose.vs.release.yml (для режима Обычный) в один каталог с файлом docker-compose.yml. Щелкните правой кнопкой мыши проект Docker Compose и выберите "Открыть папку" в проводник, а затем используйте команду "Добавить>существующий элемент", чтобы добавить файл в проект Docker Compose.

Совет

Чтобы узнать значения по умолчанию для любых параметров Visual Studio, просмотрите непосредственно промежуточные выходной каталог (например, obj/Docker) для docker-compose.vs.debug.g.yml или docker-compose.vs.release.g.yml. Эти файлы создаются Visual Studio и не должны изменяться.

Метки файлов Docker Compose

В файле docker-compose.vs.debug.yml или docker-compose.vs.release.yml можно определить метки override-specific:

services:
  webapplication1:
    labels:
      com.microsoft.visualstudio.debuggee.workingdirectory: "C:\\my_app_folder"

Заключайте значения в двойные кавычки, как в предыдущем примере, и используйте обратную косую черту как escape-символ для обратных косых черт в путях.

Label name Description
com.microsoft.visualstudio.debuggee.program Программа, запускаемая при начале отладки. Для приложений .NET Core этот параметр обычно имеет значение dotnet.
com.microsoft.visualstudio.debuggee.arguments Аргументы, передаваемые в программу при запуске отладки. Для приложений .NET Core эти аргументы обычно представляют собой дополнительные пути поиска пакетов NuGet, за которыми следует путь к выходной сборке проекта.
com.microsoft.visualstudio.debuggee.workingdirectory Каталог, используемый в качестве начального при запуске отладки. Этот параметр обычно имеет значение /app для контейнеров Linux или C:\app для контейнеров Windows.
com.microsoft.visualstudio.debuggee.killprogram Эта команда служит для остановки отлаживаемой программы, выполняемой в контейнере (при необходимости).
Label name Description
com.microsoft.visualstudio.debuggee.program Программа, запускаемая при начале отладки. Для приложений .NET Core этот параметр обычно имеет значение dotnet.
com.microsoft.visualstudio.debuggee.arguments Аргументы, передаваемые в программу при запуске отладки. Для приложений .NET Core эти аргументы обычно представляют собой дополнительные пути поиска пакетов NuGet, за которыми следует путь к выходной сборке проекта.
com.microsoft.visualstudio.debuggee.workingdirectory Каталог, используемый в качестве начального при запуске отладки. Этот параметр обычно имеет значение /app для контейнеров Linux или C:\app для контейнеров Windows.
com.microsoft.visualstudio.debuggee.killprogram Эта команда служит для остановки отлаживаемой программы, выполняемой в контейнере (при необходимости).
com.microsoft.visualstudio.debuggee.noattach.program Программа, запущенная при использовании запуска без отладки (CTRL+F5) в проекте функций Azure, работающем в изолированном процессе. Как правило, при нажатии клавиш F5 и CTRL+F5 используется одна и та же программа, но если для какого-либо типа проекта, например Функций Azure в изолированном процессе, требуется программа, отличная от программы, вызываемой при нажатии клавиши F5, будет использоваться именно она.
com.microsoft.visualstudio.debuggee.noattach.arguments Аргументы, передаваемые программе при использовании запуска без отладки (CTRL+F5) в проекте функций Azure, который выполняется в изолированном процессе.
com.microsoft.visual-studio.project-name Имя проекта, которое помогает Visual Studio найти проект, если проект не находится в той же папке, что и Dockerfile.

Настройка процесса сборки Docker

Вы можете объявить создаваемый этап в Dockerfile, используя параметр target в свойстве build. Это переопределение можно использовать только в файле docker-compose.vs.debug.yml или docker-compose.vs.release.yml.

services:
  webapplication1:
    build:
      target: customStage
    labels:
      ...

Настройка процесса запуска приложения

Вы можете выполнить команду или пользовательский скрипт перед запуском приложения с помощью параметра entrypoint, создав зависимость от DockerDevelopmentMode. Например, если вам нужно настроить сертификат только в режиме Fast, запустив update-ca-certificates, но не в режиме Regular, можно добавить следующий код только в файл docker-compose.vs.debug.yml:

services:
  webapplication1:
    entrypoint: "sh -c 'update-ca-certificates && tail -f /dev/null'"
    labels:
      ...

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

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

Общие сведения о свойствах MSBuild см. в статье Свойства MSBuild.

См. также

Свойства сборки с помощью инструментов для работы с контейнерами

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

Управление профилями запуска для Docker Compose в Visual Studio

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