Udostępnij przez


Właściwości kompilacji narzędzi kontenera

Możesz dostosować sposób kompilowania projektów kontenerów przez program Visual Studio, ustawiając właściwości używane przez program MSBuild do kompilowania projektu. Można na przykład zmienić nazwę pliku Dockerfile, określić tagi i etykiety dla obrazów, podać dodatkowe argumenty przekazane do poleceń platformy Docker i kontrolować, czy program Visual Studio wykonuje pewne optymalizacje wydajności, takie jak kompilowanie poza środowiskiem kontenera. Można również ustawić właściwości debugowania, takie jak nazwa pliku wykonywalnego do uruchomienia, oraz argumenty wiersza polecenia, które mają być podane.

Aby ustawić wartość właściwości, edytuj plik projektu. Załóżmy na przykład, że plik Dockerfile nosi nazwę MyDockerfile. Właściwość można ustawić DockerfilePath w pliku projektu w następujący sposób.

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

Uwaga / Notatka

DockerfilePath Właściwość zastępuje przestarzałą właściwość DockerfileFile, która jest nadal obsługiwana w bieżącej wersji programu Visual Studio.

Aby ustawić wartość właściwości, edytuj plik projektu. Załóżmy na przykład, że plik Dockerfile nosi nazwę MyDockerfile. Właściwość można ustawić DockerfileFile w pliku projektu w następujący sposób.

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

Możesz dodać ustawienie właściwości do istniejącego PropertyGroup elementu lub jeśli go nie ma, utwórz nowy PropertyGroup element.

Właściwości projektów zestawu .NET SDK

W tej sekcji opisano właściwości programu MSBuild, które mają zastosowanie podczas wybierania typu kompilacji kontenera zestawu SDK platformy .NET.

W pliku projektu jest tylko jedna właściwość, EnableSdkContainerDebuggingktóra jest wymagana dla projektów konteneryzowanych zestawu SDK platformy .NET. Musi być ustawiona na True wartość dla projektów zestawu .NET SDK, aby umożliwić debugowanie.

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

Właściwości projektów Dockerfile

W tej sekcji opisano właściwości programu MSBuild stosowane podczas wybierania typu kompilacji kontenera Dockerfile.

W poniższej tabeli przedstawiono właściwości programu MSBuild dostępne dla projektów dockerfile. Wersja pakietu NuGet ma zastosowanie do elementu Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Nazwa właściwości Description Wartość domyślna Wersja pakietu NuGet
ContainerDevelopmentMode Określa, czy jest włączona optymalizacja "tryb kompilacji na hoście" ("Debugowanie trybu szybkiego". Dozwolone wartości to Fast i Regular. Szybko 1.0.1872750 lub nowszy
ContainerVsDbgPath Ścieżka debugera VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 lub nowszy
DockerDebuggeeArguments Podczas debugowania debuger jest poinstruowany o przekazaniu tych argumentów do uruchomionego pliku wykonywalnego. Nie dotyczy projektów platformy .NET Framework ASP.NET 1.7.8 lub nowsza
DockerDebuggeeProgram Podczas debugowania debuger jest poinstruowany o uruchomieniu tego pliku wykonywalnego. W przypadku projektów .NET Core i .NET 5 i nowszych: dotnet, ASP.NET .NET Framework projects: Not applicable (Internet Information Services (IIS) jest zawsze używany) 1.7.8 lub nowsza
DockerDebuggeeKillProgram To polecenie służy do zabijania uruchomionego procesu w kontenerze. Nie dotyczy projektów platformy .NET Framework ASP.NET 1.7.8 lub nowsza
DockerDebuggeeWorkingDirectory Podczas debugowania debuger jest poinstruowany, aby używał tej ścieżki jako katalogu roboczego. C:\app (Windows) lub /app (Linux) 1.7.8 lub nowsza
DockerDefaultTargetOS Domyślny docelowy system operacyjny używany podczas kompilowania obrazu platformy Docker. Ustaw przez program Visual Studio. 1.0.1985401 lub nowszy
DockerImageLabels Domyślny zestaw etykiet zastosowanych do obrazu platformy Docker. com.microsoft.created-by=visual-studio; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 lub nowsze
DockerFastModeProjectMountDirectory W trybie szybkim ta właściwość steruje miejscem, w którym katalog wyjściowy projektu jest zainstalowany woluminem w uruchomionym kontenerze. C:\app (Windows) lub /app (Linux) 1.9.2 lub nowsze
DockerfileBuildArguments Dodatkowe argumenty przekazane do polecenia kompilacji platformy Docker . Nie dotyczy. 1.0.1872750 lub nowszy
DockerfileContext Domyślny kontekst używany podczas kompilowania obrazu platformy Docker jako ścieżka względem pliku Dockerfile. Ustawiana przez program Visual Studio po dodaniu obsługi platformy Docker do projektu. W projektach .NET Framework ustaw wartość "." (folder projektu) oraz w projektach .NET Core i .NET 5 i nowszych jest ustawiona na ścieżkę względną do folderu rozwiązania (zazwyczaj ".."). 1.0.1872750 lub nowszy
DockerfileFastModeStage Etap pliku Dockerfile (czyli element docelowy) używany podczas kompilowania obrazu w trybie debugowania. Pierwszy etap znaleziony w pliku Dockerfile (zwykle podstawowym) -
DockerfileFile Opisuje domyślny plik Dockerfile używany do kompilowania/uruchamiania kontenera dla projektu. Ta wartość może być ścieżką. Dockerfile 1.0.1872750 lub nowszy
DockerfileRunArguments Dodatkowe argumenty przekazane do polecenia uruchamiania platformy Docker . Nie dotyczy. 1.0.1872750 lub nowszy
DockerfileRunEnvironmentFiles Rozdzielana średnikami lista plików środowiskowych stosowanych podczas uruchamiania platformy Docker. Nie dotyczy. 1.0.1872750 lub nowszy
DockerfileTag Tag do użycia podczas kompilowania obrazu platformy Docker. Podczas debugowania do tagu jest dołączany ciąg ":d ev". Nazwa zestawu po usunięciu znaków innych niżfanumeryczne z następującymi regułami:
Jeśli wynikowy tag ma wartość liczbową, "obraz" zostanie wstawiony jako prefiks (na przykład image2314)
Jeśli wynikowy tag jest pustym ciągiem, "obraz" jest używany jako tag.
1.0.1872750 lub nowszy

W poniższej tabeli przedstawiono właściwości programu MSBuild dostępne dla projektów dockerfile. Wersja pakietu NuGet ma zastosowanie do elementu Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Niektóre właściwości i listy elementów w poniższej tabeli są równoważnymi zamiennikami przestarzałych właściwości. W takim przypadku przestarzała właściwość, którą zastępuje, jest również nazwana. Zalecamy zaktualizowanie projektów w celu korzystania z aktualnie obsługiwanych właściwości. Obsługa przestarzałych właściwości może zostać usunięta w przyszłej aktualizacji programu Visual Studio.

Niektóre właściwości wymienione jako przestarzałe są zastępowane przez równoważne wartości w launchsettings.json, a jeden jest zastępowany przez listę elementów programu MSBuild.

Nazwa właściwości Description Wartość domyślna Minimalna wersja pakietu NuGet
ContainerDevelopmentMode Określa, czy jest włączona optymalizacja "tryb kompilacji na hoście" ("Debugowanie trybu szybkiego". Dozwolone wartości to Fast i Regular. Szybko 1.0.1872750
ContainerVsDbgPath Ścieżka debugera VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(zastępuje DockerImageLabels)
Domyślny zestaw etykiet zastosowanych do obrazu platformy Docker.

ContainerLabel jest listą elementów MSBuild, a nie właściwością.
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 dla ContainerLabel

1.5.4 dla DockerImageLabels
ContainerFastModeProjectMountDirectory

(zastępuje DockerFastModeProjectMountDirectory)
W trybie szybkim ta właściwość steruje miejscem, w którym katalog wyjściowy projektu jest zainstalowany woluminem w uruchomionym kontenerze. C:\app (Windows) lub /app (Linux) 1.23.0 dla ContainerFastModeProjectMountDirectory

1.9.2 dla DockerFastModeProjectMountDirectory
ContainerBuildArguments

(zastępuje DockerfileBuildArguments)
Dodatkowe argumenty przekazane do polecenia kompilacji kontenera. Zobacz Kompilacja platformy Docker lub kompilacja narzędzia podman. Nie dotyczy. 1.23.0 dla ContainerBuildArguements

1.0.1872750 dla DockerfileBuildArguments
ContainerBuildContext

(zastępuje DockerfileContext)
Domyślny kontekst używany podczas kompilowania obrazu platformy Docker jako ścieżka względem pliku Dockerfile. Ustawiana przez program Visual Studio po dodaniu obsługi platformy Docker do projektu. Jest ona ustawiona na ścieżkę względną do folderu rozwiązania (zazwyczaj ".."). 1.23.0 dla ContainerBuildContext

1.0.1872750 dla DockerfileContext
ContainerFastModeStage

(zastępuje DockerfileFastModeStage)
Etap pliku Dockerfile (czyli element docelowy) używany podczas kompilowania obrazu w trybie debugowania. Pierwszy etap znaleziony w pliku Dockerfile (zwykle podstawowym) -
ContainerIncludeDefaultImageLabels (zastępuje: DockerIncludeDefaultImageLabels) Jeśli jest ustawiona wartość false, nie zawiera domyślnych tagów obrazów com.microsoft.created-by=visual-studio i com.microsoft.visual-studio.project-name=$(MSBuildProjectName). Prawda 1.23.0 dla ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages (zastępuje DockerLabelBuiltImages) Uwzględnij etykiety na obrazach utworzonych. Jeśli wartość false, nie zostaną dodane żadne etykiety, w tym etykiety zdefiniowane przez użytkownika. Prawda 1.23.0 dla ContainerLabelBuiltImages
DockerfilePath

(zastępuje DockerfileFile)
Opisuje domyślny plik Dockerfile używany do kompilowania/uruchamiania kontenera dla projektu. Dockerfile 1.23.0 dla DockerfilePath

1.0.1872750 dla DockerfileFile
ContainerRepository

(zastępuje DockerRepository)
Repozytorium do użycia w etykiecie, na przykład webapplication1 w etykiecie webapplication1:dev. Nazwa zestawu. 1.23.0 dla ContainerRepository
ContainerImageTag lub ContainerImageTags

(zastępuje DockerfileTag)
Tag do użycia podczas kompilowania obrazu. Podczas debugowania do tagu jest dołączany ciąg ":d ev". Nazwa zestawu po usunięciu znaków innych niżfanumeryczne z następującymi regułami:
Jeśli wynikowy tag ma wartość liczbową, "obraz" zostanie wstawiony jako prefiks (na przykład image2314)
Jeśli wynikowy tag jest pustym ciągiem, "obraz" jest używany jako tag.
1.23.0 dla ContainerImageTagelementu , ContainerImageTags

1.0.1872750 dla .DockerfileTag
DockerDebuggeeArguments

(przestarzałe, używane commandLineArgs w launchsettings.json)
Podczas debugowania debuger jest poinstruowany o przekazaniu tych argumentów do uruchomionego pliku wykonywalnego. - 1.7.8
DockerDebuggeeProgram

(przestarzałe, używane executablePath w launchsettings.json)
Podczas debugowania debuger jest poinstruowany o uruchomieniu tego pliku wykonywalnego. - 1.7.8
DockerDebuggeeKillProgram To polecenie służy do zabijania uruchomionego procesu w kontenerze. - 1.7.8
DockerDebuggeeWorkingDirectory

(przestarzałe; użycie workingDirectory w launchsettings.json)
Podczas debugowania debuger jest poinstruowany, aby używał tej ścieżki jako katalogu roboczego. C:\app (Windows) lub /app (Linux) 1.7.8
DockerDefaultTargetOS Domyślny docelowy system operacyjny używany podczas kompilowania obrazu platformy Docker. Ustaw przez program Visual Studio. 1.0.1985401
DockerfileRunArguments

(przestarzałe, używane containerRunArguments w launchsettings.json)
Dodatkowe argumenty przekazane do polecenia uruchamiania platformy Docker . Nie dotyczy. 1.0.1872750
DockerfileRunEnvironmentFiles

(przestarzałe, używane containerRunEnvironmentFiles w launchsettings.json)
Rozdzielana średnikami lista plików środowiskowych stosowanych podczas uruchamiania platformy Docker. Nie dotyczy. 1.0.1872750

ContainerRepository i ContainerImageTag (lub ContainerImageTags) umożliwiają określenie dwóch części etykiety obrazu, repozytorium i co najmniej jednego tagu (na przykład webapp1:alpha). W poprzednich wersjach programu Visual Studio można użyć DockerfileTag właściwości do określenia repozytorium i pojedynczego tagu, ale miało to ograniczenia, na przykład nie było możliwości określenia wielu tagów. Właściwość DockerfileTag jest przestarzała. Projekty powinny teraz używać ContainerRepository elementów i ContainerImageTag, a bieżąca wersja obsługuje ContainerImageTags również wiele tagów.

W poprzednich wersjach programu Visual Studio składnia to <DockerfileTag>webapp1:alpha</DockerfileTag>. Bieżący odpowiednik to <ContainerRepository>webapp1</ContainerRespository> i <ContainerImageTag>alpha</ContainerImageTag>, lub <ContainerImageTags>alpha;latest</ContainerImageTags> jeśli chcesz mieć wiele tagów.

Example

Poniższy plik projektu przedstawia przykłady niektórych z tych ustawień.

 <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>

Uwaga / Notatka

Kontekst kompilacji, który można ustawić, podając wartość ( ContainerBuildContext lub DockerfileContext), jest zwykle inny w programie Visual Studio dla projektów z elementów docker build (lub podman build) używanych podczas uruchamiania go z wiersza polecenia. Odejście od zachowania wiersza polecenia kompilacji jest niezbędne, aby upewnić się, że można uwzględnić artefakty kompilacji na poziomie rozwiązania.

Podczas wywoływania docker build (lub podman build) zawsze określasz kontekst kompilacji i opcjonalnie możesz określić ścieżkę do pliku Dockerfile. Domyślnie plik Dockerfile znajduje się w katalogu głównym kontekstu, ale możesz użyć -f flagi , aby określić alternatywną lokalizację. Możesz na przykład skompilować za pomocą polecenia z docker build -f Dockerfile .. katalogu projektu lub docker build -f ProjectName/Dockerfile . z katalogu rozwiązania.

 <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>

Uwaga / Notatka

Kontekst platformy Docker, który można ustawić, podając wartość dla DockerfileContextelementu , jest zwykle inny w programie Visual Studio dla projektów przeznaczonych dla platformy .NET Core (w tym platformy .NET 5 i nowszych) z elementów docker build używanych podczas uruchamiania go z wiersza polecenia. Odejście od zachowania docker build funkcji jest niezbędne, aby upewnić się, że można uwzględnić artefakty kompilacji na poziomie rozwiązania.

Podczas wywoływania docker buildmetody zawsze określasz kontekst kompilacji i opcjonalnie możesz określić ścieżkę do pliku Dockerfile. Domyślnie plik Dockerfile znajduje się w katalogu głównym kontekstu, ale możesz użyć -f flagi , aby określić alternatywną lokalizację. Możesz na przykład skompilować za pomocą polecenia z docker build -f Dockerfile .. katalogu projektu lub docker build -f ProjectName/Dockerfile . z katalogu rozwiązania.

Dalsze kroki

Aby uzyskać ogólne informacje o właściwościach programu MSBuild, zobacz Właściwości programu MSBuild.

Zobacz także

Właściwości kompilacji narzędzia Docker Compose

Ustawienia uruchamiania narzędzi kontenera

Właściwości zarezerwowane i dobrze znane w programie MSBuild