Свойства сборки 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