다음을 통해 공유


Docker Compose 빌드 속성

Container Tools 빌드 속성설명된 개별 Docker 프로젝트를 제어하는 속성 외에도 MSBuild에서 솔루션을 빌드하는 데 사용하는 Docker Compose 속성을 설정하여 Visual Studio에서 Docker Compose 프로젝트를 빌드하는 방법을 사용자 지정할 수도 있습니다. 또한 Docker Compose 구성 파일에서 파일 레이블을 설정하여 Visual Studio 디버거에서 Docker Compose 앱을 실행하는 방법을 제어할 수 있습니다.

MSBuild 속성을 설정하는 방법

속성 값을 설정하려면 프로젝트 파일을 편집합니다. Docker Compose 속성의 경우 이 프로젝트 파일은 다음 섹션의 표에 달리 표시되지 않는 한 .dcproj 확장명의 파일입니다. 예를 들어 디버깅을 시작할 때 브라우저를 시작하도록 지정한다고 가정합니다. 다음과 같이 DockerLaunchAction 프로젝트 파일에서 .dcproj 속성을 설정할 수 있습니다.

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

기존 PropertyGroup 요소에 속성 설정을 추가하거나, 속성 설정이 없는 경우 새 PropertyGroup 요소를 만들 수 있습니다.

Docker Compose MSBuild 속성

다음 표에서는 Docker Compose 프로젝트(.dcproj 파일)에 사용할 수 있는 MSBuild 속성을 보여 줍니다.

속성 이름 묘사
AdditionalComposeFilePaths 모든 명령에 대해 docker-compose.exe 보낼 세미콜론으로 구분된 목록에 추가 작성 파일을 지정합니다. Docker Compose 프로젝트 파일(dcproj)의 상대 경로가 허용됩니다.
DependencyAwareStart 서비스 시작 순서 및 상태 검사를 제어하는 Docker Compose 속성 depends_onhealthcheck지원하는 앱을 시작하는 다른 방법을 사용하도록 설정합니다.

Visual Studio 17.13 이상이 필요합니다.

기본값: False
DockerComposeBaseFilePath .yml 확장명 없이 Docker Compose 파일의 파일 이름의 첫 번째 부분을 지정합니다. 예를 들어:
1. DockerComposeBaseFilePath = null/undefined: docker-compose기본 파일 경로를 사용하고 파일 이름은 docker-compose.ymldocker-compose.override.yml.
2. DockerComposeBaseFilePath = mydockercompose: 파일의 이름은 mydockercompose.ymlmydockercompose.override.yml.
3. DockerComposeBaseFilePath = .. \mydockercompose: 파일이 한 수준 위로 올라오게 됩니다.

기본값: docker-compose
DockerComposeBuildArguments docker-compose build 명령에 전달할 추가 매개 변수를 지정합니다. 예를 들어 --parallel --pull.
DockerComposeDownArguments docker-compose down 명령에 전달할 추가 매개 변수를 지정합니다. 예를 들어 --timeout 500.
DockerComposeEnvFilePath docker compose통해 --env-file 명령에 전달되는 .env 파일의 상대 경로입니다. env_file 특성사용합니다.

기본값: 비어 있음
DockerComposeProjectName 지정한 경우 Docker Compose 프로젝트의 프로젝트 이름을 재정의합니다.

기본값: "dockercompose" + 자동 생성된 해시
DockerComposeProjectsToIgnore 디버그하는 동안 Docker Compose 도구에서 무시할 프로젝트를 지정합니다. 이 속성은 모든 프로젝트에 사용할 수 있습니다. 파일 경로는 다음 두 가지 방법 중 하나로 지정할 수 있습니다.
1. dcproj를 기준으로 합니다. 예를 들어 <DockerComposeProjectsToIgnore> path\to\AngularProject1.csproj </DockerComposeProjectsToIgnore>.
2. 절대 경로입니다.
참고: 경로는 구분 기호 문자 ;구분 기호로 구분되어야 합니다.
DockerComposeUpArguments docker-compose up 명령에 전달할 추가 매개 변수를 지정합니다. 예를 들어 --timeout 500.
DockerDevelopmentMode 사용자 프로젝트가 컨테이너에 빌드되는지 여부를 제어합니다. Fast 또는 일반 컨트롤의 허용되는 값은 Dockerfile에서 빌드되는 단계를. 디버그 구성은 기본적으로 빠른 모드이고 그렇지 않으면 일반 모드입니다.

기본값: Fast
DockerLaunchAction F5 또는 Ctrl+F5에서 수행할 시작 작업을 지정합니다. 허용되는 값은 None, LaunchBrowser 및 LaunchWCFTestClient입니다.

기본값: 없음
DockerLaunchBrowser 브라우저를 시작할지 여부를 나타냅니다. DockerLaunchAction을 지정하면 무시됩니다.

기본값: False
DockerServiceName DockerLaunchAction 또는 DockerLaunchBrowser가 지정된 경우 DockerServiceName은 docker-compose 파일에서 참조되는 서비스를 시작하도록 지정합니다.
DockerServiceUrl 브라우저를 시작할 때 사용할 URL입니다. 유효한 대체 토큰은 "{ServiceIPAddress}", "{ServicePort}" 및 "{Scheme}"입니다. 예: {Scheme}://{ServiceIPAddress}:{ServicePort}
DockerTargetOS Docker 이미지를 빌드할 때 사용되는 대상 OS입니다.

또한 DockerComposeProjectPath 또는 .csproj 프로젝트 파일의 속성 .vbproj Docker Compose 프로젝트(.dcproj) 파일에 대한 상대 경로를 지정합니다. 서비스 프로젝트를 게시할 때 이 속성을 설정하여 docker-compose.yml 파일에 저장된 연결된 이미지 빌드 설정을 찾습니다.

본보기

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>

빌드 컨텍스트가 솔루션 폴더의 상대 경로(이 경우 )로 설정된 .. 파일은 다음과 같이 표시됩니다.

version: '3.4'

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

메모

DockerComposeBuildArguments, DockerComposeDownArguments 및 DockerComposeUpArguments는 Visual Studio 2019 버전 16.3의 새로운 기능입니다.

Visual Studio의 Docker Compose 구성 재정의

일반적으로 docker-compose.override.ymldocker-compose.yml특정 설정을 재정의하는 데 사용됩니다. 또한 Visual Studio는 Visual Studio 내에서 애플리케이션을 실행하는 것과 관련된 설정을 사용하여 docker-compose.vs.debug.g.yml(빠른 모드의 경우) 및 docker-compose.vs.release.g.yml(일반 모드의 경우) 재정의 파일을 생성합니다. docker-compose.yml 파일과 동일한 디렉터리에 docker-compose.vs.debug.yml(빠른 모드의 경우) 또는 docker-compose.vs.release.yml(일반 모드의 경우)이라는 파일을 배치하여 이러한 Visual Studio 설정을 재정의할 수 있습니다. 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다음과 같이 재정의 관련 레이블을 정의할 수 있습니다.

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

앞의 예제와 같이 값 주위에 큰따옴표를 사용하고 백슬래시를 경로의 백슬래시에 대한 이스케이프 문자로 사용합니다.

레이블 이름 묘사
com.microsoft.visualstudio.debuggee.program 디버깅을 시작할 때 프로그램이 시작되었습니다. .NET Core 앱의 경우 이 설정은 일반적으로 dotnet .
com.microsoft.visualstudio.debuggee.arguments 디버깅을 시작할 때 프로그램에 전달된 인수입니다. .NET Core 앱의 경우 이러한 인수는 일반적으로 NuGet 패키지에 대한 추가 검색 경로와 프로젝트의 출력 어셈블리 경로입니다.
com.microsoft.visualstudio.debuggee.workingdirectory 디버깅을 시작할 때 시작 디렉터리로 사용되는 디렉터리입니다. 이 설정은 일반적으로 Linux 컨테이너에 대한 /app 또는 Windows 컨테이너용 C:\app .
com.microsoft.visualstudio.debuggee.killprogram 이 명령은 컨테이너 내부에서 실행되는 디버기 프로그램을 중지하는 데 사용됩니다(필요한 경우).
레이블 이름 묘사
com.microsoft.visualstudio.debuggee.program 디버깅을 시작할 때 프로그램이 시작되었습니다. .NET Core 앱의 경우 이 설정은 일반적으로 dotnet .
com.microsoft.visualstudio.debuggee.arguments 디버깅을 시작할 때 프로그램에 전달된 인수입니다. .NET Core 앱의 경우 이러한 인수는 일반적으로 NuGet 패키지에 대한 추가 검색 경로와 프로젝트의 출력 어셈블리 경로입니다.
com.microsoft.visualstudio.debuggee.workingdirectory 디버깅을 시작할 때 시작 디렉터리로 사용되는 디렉터리입니다. 이 설정은 일반적으로 Linux 컨테이너에 대한 /app 또는 Windows 컨테이너용 C:\app .
com.microsoft.visualstudio.debuggee.killprogram 이 명령은 컨테이너 내부에서 실행되는 디버기 프로그램을 중지하는 데 사용됩니다(필요한 경우).
com.microsoft.visualstudio.debuggee.noattach.program 격리된 프로세스실행되는 Azure Functions 프로젝트에서 (Ctrl+F5)를 디버깅하지 않고 Start를 사용할 때 시작된 프로그램입니다. 일반적으로 F5Ctrl+F5 모두 동일한 프로그램을 사용하지만 격리된 프로세스의 Azure Functions와 같은 프로젝트 형식에 F5다른 프로그램이 필요한 경우 이 프로그램이 사용됩니다.
com.microsoft.visualstudio.debuggee.noattach.arguments 격리된 프로세스에서 실행되는 Azure Functions 프로젝트에서 (Ctrl+)를 디버깅하지 않고 Start를 사용할 때 프로그램에 전달되는 인수입니다.
com.microsoft.visual-studio.project-name 프로젝트가 Dockerfile과 동일한 폴더에 없는 경우 Visual Studio에서 프로젝트를 찾는 데 도움이 되는 프로젝트의 이름입니다.

Docker 빌드 프로세스 사용자 지정

target 속성의 build 설정을 사용하여 Dockerfile에서 빌드할 스테이지를 선언할 수 있습니다. 이 재정의는 docker-compose.vs.debug.yml 또는 docker-compose.vs.release.yml

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

앱 시작 프로세스 사용자 지정

entrypoint 설정을 사용하고 DockerDevelopmentMode종속되도록 하여 앱을 시작하기 전에 명령 또는 사용자 지정 스크립트를 실행할 수 있습니다. 예를 들어 실행하여 update-ca-certificates 모드에서만 인증서를 설정해야 하지만 일반 모드에서는 설정해야 하는 경우 다음 코드를 docker-compose.vs.debug.yml추가할 수 있습니다.

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

자세한 내용은 컨테이너 진입점 참조하세요.

다음 단계

일반적으로 MSBuild 속성에 대한 자세한 내용은 msBuild 속성 참조하세요.

참고 항목

컨테이너 도구 빌드 속성

컨테이너 도구 시작 설정

Visual Studio Docker Compose에 대한 시작 프로필 관리

MSBuild 예약 및 잘 알려진 속성