MSBuild에서 프로젝트를 빌드하는 데 사용하는 속성을 설정하여 Visual Studio에서 컨테이너 프로젝트를 빌드하는 방법을 사용자 지정할 수 있습니다. 예를 들어 Dockerfile의 이름을 변경하고, 이미지에 대한 태그 및 레이블을 지정하고, Docker 명령에 전달된 추가 인수를 제공하고, Visual Studio가 컨테이너 환경 외부에서 빌드하는 등의 특정 성능 최적화를 수행하는지 여부를 제어할 수 있습니다. 실행할 실행 파일의 이름 및 제공할 명령줄 인수와 같은 디버깅 속성을 설정할 수도 있습니다.
속성 값을 설정하려면 프로젝트 파일을 편집합니다. 예를 들어 Dockerfile의 이름이 MyDockerfile이라고 가정합니다. 다음과 같이 프로젝트 파일에서 속성을 설정할 DockerfilePath 수 있습니다.
<PropertyGroup>
<DockerfilePath>MyDockerfile</DockerfilePath>
</PropertyGroup>
비고
이 속성 DockerfilePath 은 사용되지 않는 속성을 대체합니다. 이 속성 DockerfileFile은 현재 버전의 Visual Studio에서 계속 지원됩니다.
속성 값을 설정하려면 프로젝트 파일을 편집합니다. 예를 들어 Dockerfile의 이름이 MyDockerfile이라고 가정합니다. 다음과 같이 프로젝트 파일에서 속성을 설정할 DockerfileFile 수 있습니다.
<PropertyGroup>
<DockerfileFile>MyDockerfile</DockerfileFile>
</PropertyGroup>
기존 PropertyGroup 요소에 속성 설정을 추가하거나 속성 설정이 없는 경우 새 PropertyGroup 요소를 만들 수 있습니다.
.NET SDK 프로젝트의 속성
이 섹션에서는 .NET SDK 컨테이너 빌드 유형을 선택할 때 적용되는 MSBuild 속성에 대해 설명합니다.
.NET SDK 컨테이너화된 프로젝트에 필요한 속성 EnableSdkContainerDebugging은 프로젝트 파일에 하나뿐입니다. 디버깅을 True 사용하도록 설정하려면 .NET SDK 프로젝트로 설정해야 합니다.
<PropertyGroup>
<EnableSdkContainerDebugging>True</EnableSdkContainerDebugging>
</PropertyGroup>
Dockerfile 프로젝트의 속성
이 섹션에서는 Dockerfile 컨테이너 빌드 유형을 선택할 때 적용되는 MSBuild 속성에 대해 설명합니다.
다음 표에서는 Dockerfile 프로젝트에 사용할 수 있는 MSBuild 속성을 보여줍니다. NuGet 패키지 버전은 Microsoft.VisualStudio.Azure.Containers.Tools.Targets에 적용됩니다.
| 속성 이름 | Description | 기본값 | NuGet 패키지 버전 |
|---|---|---|---|
| ContainerDevelopmentMode | "호스트 기반 빌드" 최적화("빠른 모드" 디버깅)를 사용할 수 있는지 여부를 제어합니다. 허용되는 값은 Fast 및 Regular입니다. | 빠름 | 1.0.1872750 이상 |
| ContainerVsDbgPath | VSDBG 디버거의 경로입니다. | %USERPROFILE%\vsdbg\vs2017u5 |
1.0.1985401 이상 |
| DockerDebuggeeArguments | 디버깅할 때 디버거는 이러한 인수를 시작된 실행 파일에 전달하도록 지시됩니다. | ASP.NET .NET Framework 프로젝트에는 적용되지 않습니다. | 1.7.8 이상 |
| DockerDebuggeeProgram | 디버깅할 때 디버거는 이 실행 파일을 시작하도록 지시됩니다. | .NET Core 및 .NET 5 이상 프로젝트의 경우: dotnet, ASP.NET .NET Framework 프로젝트: 해당 없음(IIS(인터넷 정보 서비스)은 항상 사용됨) | 1.7.8 이상 |
| DockerDebuggeeKillProgram | 이 명령은 컨테이너에서 실행 중인 프로세스를 종료하는 데 사용됩니다. | ASP.NET .NET Framework 프로젝트에는 적용되지 않습니다. | 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을 기준으로 하는 경로로 사용되는 기본 컨텍스트입니다. | Docker 지원이 프로젝트에 추가되면 Visual Studio에서 설정합니다. .NET Framework 프로젝트에서 ""로 설정합니다. (프로젝트 폴더) .NET Core 및 .NET 5 이상 프로젝트에서 솔루션 폴더(일반적으로 "..")에 대한 상대 경로로 설정됩니다. | 1.0.1872750 이상 |
| DockerfileFastModeStage | 디버그 모드에서 이미지를 빌드할 때 사용할 Dockerfile 단계(즉, 대상)입니다. | Dockerfile에서 찾은 첫 번째 단계(일반적으로 기본) | - |
| DockerfileFile | 프로젝트에 대한 컨테이너를 빌드/실행하는 데 사용할 기본 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 이상 |
다음 표에서는 Dockerfile 프로젝트에 사용할 수 있는 MSBuild 속성을 보여줍니다. 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(replaces DockerImageLabels) |
Docker 이미지에 적용되는 기본 레이블 집합입니다.ContainerLabel 는 속성이 아닌 MSBuild 항목 목록입니다. |
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) |
1.23.0 for ContainerLabel1.5.4 for DockerImageLabels |
ContainerFastModeProjectMountDirectory(replaces DockerFastModeProjectMountDirectory) |
빠른 모드에서 이 속성은 프로젝트 출력 디렉터리가 실행 중인 컨테이너에 볼륨 탑재되는 위치를 제어합니다. | C:\app(Windows) 또는 /app(Linux) | 1.23.0 for ContainerFastModeProjectMountDirectory1.9.2 for DockerFastModeProjectMountDirectory |
ContainerBuildArguments(replaces DockerfileBuildArguments) |
컨테이너 빌드 명령에 전달된 추가 인수입니다. Docker 빌드 또는 podman 빌드를 참조하세요. | 적용할 수 없습니다. | 1.23.0 for ContainerBuildArguements1.0.1872750 for DockerfileBuildArguments |
ContainerBuildContext(replaces DockerfileContext) |
Docker 이미지를 빌드할 때 Dockerfile을 기준으로 하는 경로로 사용되는 기본 컨텍스트입니다. | Docker 지원이 프로젝트에 추가되면 Visual Studio에서 설정합니다. 솔루션 폴더(일반적으로 "..")에 대한 상대 경로로 설정됩니다. | 1.23.0 for ContainerBuildContext1.0.1872750 for DockerfileContext |
ContainerFastModeStage(replaces DockerfileFastModeStage) |
디버그 모드에서 이미지를 빌드할 때 사용할 Dockerfile 단계(즉, 대상)입니다. | Dockerfile에서 찾은 첫 번째 단계(일반적으로 기본) | - |
ContainerIncludeDefaultImageLabels (replaces: DockerIncludeDefaultImageLabels) |
로 false설정하면 기본 이미지 태그 및 com.microsoft.created-by=visual-studiocom.microsoft.visual-studio.project-name=$(MSBuildProjectName). |
진실 | 1.23.0 for ContainerIncludeDefaultImageLabels |
ContainerLabelBuiltImages (replaces DockerLabelBuiltImages) |
빌드된 이미지에 레이블을 포함합니다. false이면 사용자 정의 레이블을 포함하여 레이블이 추가되지 않습니다. | 진실 | 1.23.0 for ContainerLabelBuiltImages |
DockerfilePath(replaces DockerfileFile) |
프로젝트에 대한 컨테이너를 빌드/실행하는 데 사용할 기본 Dockerfile에 대해 설명합니다. | Dockerfile | 1.23.0 for DockerfilePath1.0.1872750 for DockerfileFile |
ContainerRepository(replaces DockerRepository) |
레이블에서 사용할 리포지토리(예 webapplication1 : 레이블 webapplication1:dev)입니다. |
어셈블리 이름입니다. | 1.23.0 for ContainerRepository |
ContainerImageTag 또는 ContainerImageTags(replaces DockerfileTag) |
이미지를 빌드할 때 사용할 태그입니다. 디버깅에서 ":d ev"가 태그에 추가됩니다. | 다음 규칙을 사용하여 숫자가 아닌 문자를 제거한 후의 어셈블리 이름입니다. 결과 태그가 모든 숫자인 경우 "image"는 접두사로 삽입됩니다(예: image2314). 결과 태그가 빈 문자열이면 "image"가 태그로 사용됩니다. |
에 대한 ContainerImageTag1.23.0 ContainerImageTags1.0.1872750 for DockerfileTag. |
DockerDebuggeeArguments(사용되지 않음, launchsettings.json사용 commandLineArgs) |
디버깅할 때 디버거는 이러한 인수를 시작된 실행 파일에 전달하도록 지시됩니다. | - | 1.7.8 |
DockerDebuggeeProgram(사용되지 않음, launchsettings.json사용 executablePath) |
디버깅할 때 디버거는 이 실행 파일을 시작하도록 지시됩니다. | - | 1.7.8 |
DockerDebuggeeKillProgram |
이 명령은 컨테이너에서 실행 중인 프로세스를 종료하는 데 사용됩니다. | - | 1.7.8 |
DockerDebuggeeWorkingDirectory(사용되지 않음; launchsettings.json사용 workingDirectory) |
디버깅할 때 디버거는 이 경로를 작업 디렉터리로 사용하도록 지시됩니다. | C:\app(Windows) 또는 /app(Linux) | 1.7.8 |
| DockerDefaultTargetOS | Docker 이미지를 빌드할 때 사용되는 기본 대상 운영 체제입니다. | Visual Studio에서 설정합니다. | 1.0.1985401 |
DockerfileRunArguments(사용되지 않음, launchsettings.json사용 containerRunArguments) |
Docker 실행 명령에 전달된 추가 인수입니다. | 적용할 수 없습니다. | 1.0.1872750 |
DockerfileRunEnvironmentFiles(사용되지 않음, launchsettings.json사용 containerRunEnvironmentFiles) |
Docker 실행 중에 적용된 환경 파일의 세미콜론으로 구분된 목록입니다. | 적용할 수 없습니다. | 1.0.1872750 |
ContainerRepository 및 ContainerImageTag (또는 ContainerImageTags) 이미지 레이블의 두 부분, 리포지토리 및 하나 이상의 태그(예 webapp1:alpha: )를 지정하는 기능을 제공합니다. 이전 버전의 Visual Studio에서는 이 속성을 사용하여 DockerfileTag 리포지토리와 단일 태그를 지정할 수 있었지만, 예를 들어 여러 태그를 지정할 수 없는 등의 제한 사항이 있었습니다. 이 속성 DockerfileTag 은 사용되지 않습니다. 프로젝트는 이제 사용하고 ContainerRepositoryContainerImageTag현재 버전은 여러 태그도 지원 ContainerImageTags 합니다.
이전 Visual Studio 버전에서 구문은 .입니다 <DockerfileTag>webapp1:alpha</DockerfileTag>. 현재 해당 항목은 <ContainerRepository>webapp1</ContainerRespository> 및 <ContainerImageTag>alpha</ContainerImageTag>, 또는 <ContainerImageTags>alpha;latest</ContainerImageTags> 여러 태그를 원하는 경우입니다.
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>
비고
또는 )에 대한 ContainerBuildContextDockerfileContext값을 제공하여 설정할 수 있는 빌드 컨텍스트는 일반적으로 Visual Studio에서 프로젝트 docker build 와 명령줄에서 실행할 때 사용하는 항목과 podman build다릅니다. 솔루션 수준에서 빌드 아티팩트가 포함될 수 있도록 빌드 명령줄의 동작에서 벗어나야 합니다.
호출 docker build (또는 podman build)할 때 항상 빌드 컨텍스트를 지정하고 필요에 따라 Dockerfile의 경로를 지정할 수 있습니다. 기본값은 Dockerfile이 컨텍스트의 루트에 있지만 플래그를 -f 사용하여 대체 위치를 지정할 수 있습니다. 예를 들어 프로젝트 디렉터리 또는 docker build -f ProjectName/Dockerfile . 솔루션 디렉터리에서 빌드 docker build -f 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>
비고
값을 DockerfileContext제공하여 설정할 수 있는 Docker 컨텍스트는 일반적으로 .NET Core(.NET 5 이상 포함) docker build 를 대상으로 하는 프로젝트의 경우 Visual Studio에서 명령줄에서 실행할 때 사용하는 것과 다릅니다. 솔루션 수준에서 빌드 아티팩트가 포함될 수 있도록 하려면 동작 docker build 에서 벗어나야 합니다.
호출 docker build할 때 항상 빌드 컨텍스트를 지정하고 필요에 따라 Dockerfile의 경로를 지정할 수 있습니다. 기본값은 Dockerfile이 컨텍스트의 루트에 있지만 플래그를 -f 사용하여 대체 위치를 지정할 수 있습니다. 예를 들어 프로젝트 디렉터리 또는 docker build -f ProjectName/Dockerfile . 솔루션 디렉터리에서 빌드 docker build -f Dockerfile .. 할 수 있습니다.
다음 단계
일반적으로 MSBuild 속성에 대한 자세한 내용은 MSBuild 속성을 참조하세요.