Bagikan melalui


Properti build Alat Kontainer

Anda dapat menyesuaikan cara Visual Studio membangun proyek kontainer Anda dengan mengatur properti yang digunakan MSBuild untuk membangun proyek Anda. Misalnya, Anda dapat mengubah nama Dockerfile, menentukan tag dan label untuk gambar Anda, memberikan argumen tambahan yang diteruskan ke perintah Docker, dan mengontrol apakah Visual Studio melakukan pengoptimalan performa tertentu seperti membangun di luar lingkungan kontainer. Anda juga dapat mengatur properti penelusuran kesalahan seperti nama yang dapat dieksekusi untuk diluncurkan, dan argumen baris perintah yang akan disediakan.

Untuk mengatur nilai properti, edit file proyek. Misalnya, Dockerfile Anda diberi nama MyDockerfile. Anda dapat mengatur DockerfilePath properti dalam file proyek sebagai berikut.

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

Nota

Properti DockerfilePath menggantikan properti DockerfileFileyang tidak digunakan lagi , yang masih didukung dalam versi Visual Studio saat ini.

Untuk mengatur nilai properti, edit file proyek. Misalnya, Dockerfile Anda diberi nama MyDockerfile. Anda dapat mengatur DockerfileFile properti dalam file proyek sebagai berikut.

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

Anda dapat menambahkan pengaturan properti ke elemen yang sudah ada PropertyGroup , atau jika tidak ada, buat elemen baru PropertyGroup .

Properti untuk proyek .NET SDK

Bagian ini menjelaskan properti MSBuild yang berlaku saat Anda memilih jenis build kontainer .NET SDK.

Hanya ada satu properti, EnableSdkContainerDebugging, dalam file proyek yang diperlukan untuk proyek kontainer .NET SDK. Ini harus diatur ke True untuk proyek .NET SDK untuk mengaktifkan penelusuran kesalahan.

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

Properti untuk proyek Dockerfile

Bagian ini menjelaskan properti MSBuild yang berlaku saat Anda memilih jenis build kontainer Dockerfile.

Tabel berikut ini memperlihatkan properti MSBuild yang tersedia untuk proyek Dockerfile. Versi paket NuGet berlaku untuk Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Nama properti Description Nilai standar Versi paket NuGet
ContainerDevelopmentMode Mengontrol apakah pengoptimalan "build-on-host" (debugging "Mode Cepat" diaktifkan. Nilai yang diizinkan cepat dan Teratur. Cepat 1.0.1872750 atau yang lebih baru
ContainerVsDbgPath Jalur untuk debugger VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401 atau yang lebih baru
DockerDebuggeeArguments Saat penelusuran kesalahan, debugger diinstruksikan untuk meneruskan argumen ini ke executable yang diluncurkan. Tidak berlaku untuk proyek .NET Framework ASP.NET 1.7.8 atau yang lebih baru
DockerDebuggeeProgram Saat penelusuran kesalahan, debugger diinstruksikan untuk meluncurkan executable ini. Untuk proyek .NET Core dan .NET 5 dan yang lebih baru: dotnet, ASP.NET proyek .NET Framework: Tidak berlaku (Internet Information Services (IIS) selalu digunakan) 1.7.8 atau yang lebih baru
DockerDebuggeeKillProgram Perintah ini digunakan untuk mematikan proses yang sedang berjalan dalam kontainer. Tidak berlaku untuk proyek .NET Framework ASP.NET 1.7.8 atau yang lebih baru
DockerDebuggeeWorkingDirectory Saat penelusuran kesalahan, debugger diinstruksikan untuk menggunakan jalur ini sebagai direktori kerja. C:\app (Windows) atau /app (Linux) 1.7.8 atau yang lebih baru
DockerDefaultTargetOS Sistem operasi target default yang digunakan saat membangun gambar Docker. Diatur oleh Visual Studio. 1.0.1985401 atau yang lebih baru
DockerImageLabels Kumpulan label default yang diterapkan ke gambar Docker. com.microsoft.created-by=visual-studio; com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.5.4 atau yang lebih baru
DockerFastModeProjectMountDirectory Dalam Mode Cepat, properti ini mengontrol tempat direktori output proyek dipasang volume ke dalam kontainer yang sedang berjalan. C:\app (Windows) atau /app (Linux) 1.9.2 atau yang lebih baru
DockerfileBuildArguments Argumen tambahan diteruskan ke perintah build Docker . Tidak dapat diterapkan. 1.0.1872750 atau yang lebih baru
DockerfileContext Konteks default yang digunakan saat membangun gambar Docker, sebagai jalur relatif terhadap Dockerfile. Diatur oleh Visual Studio saat dukungan Docker ditambahkan ke proyek. Dalam proyek .NET Framework, atur ke "." (folder proyek), dan dalam proyek .NET Core dan .NET 5 dan yang lebih baru, folder tersebut diatur ke jalur relatif ke folder solusi (biasanya ".."). 1.0.1872750 atau yang lebih baru
DockerfileFastModeStage Tahap Dockerfile (yaitu target) yang akan digunakan saat membangun gambar dalam mode debug. Tahap pertama ditemukan di Dockerfile (biasanya dasar) -
DockerfileFile Menjelaskan Dockerfile default yang akan digunakan untuk membangun/menjalankan kontainer untuk proyek. Nilai ini bisa menjadi jalur. Dockerfile 1.0.1872750 atau yang lebih baru
DockerfileRunArguments Argumen tambahan diteruskan ke perintah jalankan Docker . Tidak dapat diterapkan. 1.0.1872750 atau yang lebih baru
DockerfileRunEnvironmentFiles Daftar file lingkungan yang dibatasi titik koma yang diterapkan selama eksekusi Docker. Tidak dapat diterapkan. 1.0.1872750 atau yang lebih baru
DockerfileTag Tag yang digunakan saat membuat gambar Docker. Dalam penelusuran kesalahan, ":d ev" ditambahkan ke tag. Nama assembly setelah menghapus karakter nonalphanumeric dengan aturan berikut:
Jika tag yang dihasilkan adalah semua numerik, maka "gambar" dimasukkan sebagai awalan (misalnya, gambar2314)
Jika tag yang dihasilkan adalah string kosong, maka "gambar" digunakan sebagai tag.
1.0.1872750 atau yang lebih baru

Tabel berikut ini memperlihatkan properti MSBuild yang tersedia untuk proyek Dockerfile. Versi paket NuGet berlaku untuk Microsoft.VisualStudio.Azure.Containers.Tools.Targets.

Beberapa properti dan daftar item dalam tabel berikut ini adalah pengganti yang setara untuk properti usang. Dalam hal ini, properti usang yang digantinya juga dinamai. Sebaiknya perbarui proyek untuk menggunakan properti yang saat ini didukung. Dukungan untuk properti usang mungkin dihapus dalam pembaruan Visual Studio di masa mendatang.

Beberapa properti yang tercantum sebagai usang digantikan oleh nilai yang setara dalam launchsettings.json, dan satu digantikan oleh daftar item MSBuild.

Nama properti Description Nilai standar Versi paket NuGet minimum
ContainerDevelopmentMode Mengontrol apakah pengoptimalan "build-on-host" (debugging "Mode Cepat" diaktifkan. Nilai yang diizinkan cepat dan Teratur. Cepat 1.0.1872750
ContainerVsDbgPath Jalur untuk debugger VSDBG. %USERPROFILE%\vsdbg\vs2017u5 1.0.1985401
ContainerLabel

(menggantikan DockerImageLabels)
Kumpulan label default yang diterapkan ke gambar Docker.

ContainerLabel adalah daftar item MSBuild, bukan properti.
com.microsoft.created-by=visual-studio;com.microsoft.visual-studio.project-name=$(MSBuildProjectName) 1.23.0 untuk ContainerLabel

1.5.4 untuk DockerImageLabels
ContainerFastModeProjectMountDirectory

(menggantikan DockerFastModeProjectMountDirectory)
Dalam Mode Cepat, properti ini mengontrol tempat direktori output proyek dipasang volume ke dalam kontainer yang sedang berjalan. C:\app (Windows) atau /app (Linux) 1.23.0 untuk ContainerFastModeProjectMountDirectory

1.9.2 untuk DockerFastModeProjectMountDirectory
ContainerBuildArguments

(menggantikan DockerfileBuildArguments)
Argumen tambahan diteruskan ke perintah build kontainer. Lihat Build Docker atau build podman. Tidak dapat diterapkan. 1.23.0 untuk ContainerBuildArguements

1.0.1872750 untuk DockerfileBuildArguments
ContainerBuildContext

(menggantikan DockerfileContext)
Konteks default yang digunakan saat membangun gambar Docker, sebagai jalur relatif terhadap Dockerfile. Diatur oleh Visual Studio saat dukungan Docker ditambahkan ke proyek. Ini diatur ke jalur relatif ke folder solusi (biasanya ".."). 1.23.0 untuk ContainerBuildContext

1.0.1872750 untuk DockerfileContext
ContainerFastModeStage

(menggantikan DockerfileFastModeStage)
Tahap Dockerfile (yaitu target) yang akan digunakan saat membangun gambar dalam mode debug. Tahap pertama ditemukan di Dockerfile (biasanya dasar) -
ContainerIncludeDefaultImageLabels (menggantikan: DockerIncludeDefaultImageLabels) Jika diatur ke false, tidak menyertakan tag com.microsoft.created-by=visual-studio gambar default dan com.microsoft.visual-studio.project-name=$(MSBuildProjectName). Benar 1.23.0 untuk ContainerIncludeDefaultImageLabels
ContainerLabelBuiltImages (menggantikan DockerLabelBuiltImages) Sertakan label pada gambar bawaan. Jika false, tidak ada label yang ditambahkan, termasuk label yang ditentukan pengguna. Benar 1.23.0 untuk ContainerLabelBuiltImages
DockerfilePath

(menggantikan DockerfileFile)
Menjelaskan Dockerfile default yang akan digunakan untuk membangun/menjalankan kontainer untuk proyek. Dockerfile 1.23.0 untuk DockerfilePath

1.0.1872750 untuk DockerfileFile
ContainerRepository

(menggantikan DockerRepository)
Repositori yang akan digunakan dalam label, misalnya webapplication1 di label webapplication1:dev. Nama assembly. 1.23.0 untuk ContainerRepository
ContainerImageTag atau ContainerImageTags

(menggantikan DockerfileTag)
Tag yang digunakan saat membangun gambar. Dalam penelusuran kesalahan, ":d ev" ditambahkan ke tag. Nama assembly setelah menghapus karakter nonalphanumeric dengan aturan berikut:
Jika tag yang dihasilkan adalah semua numerik, maka "gambar" dimasukkan sebagai awalan (misalnya, gambar2314)
Jika tag yang dihasilkan adalah string kosong, maka "gambar" digunakan sebagai tag.
1.23.0 untuk ContainerImageTag, ContainerImageTags

1.0.1872750 untuk DockerfileTag.
DockerDebuggeeArguments

(usang, gunakan commandLineArgs dalam launchsettings.json)
Saat penelusuran kesalahan, debugger diinstruksikan untuk meneruskan argumen ini ke executable yang diluncurkan. - 1.7.8
DockerDebuggeeProgram

(usang, gunakan executablePath dalam launchsettings.json)
Saat penelusuran kesalahan, debugger diinstruksikan untuk meluncurkan executable ini. - 1.7.8
DockerDebuggeeKillProgram Perintah ini digunakan untuk mematikan proses yang sedang berjalan dalam kontainer. - 1.7.8
DockerDebuggeeWorkingDirectory

(usang; gunakan workingDirectory dalam launchsettings.json)
Saat penelusuran kesalahan, debugger diinstruksikan untuk menggunakan jalur ini sebagai direktori kerja. C:\app (Windows) atau /app (Linux) 1.7.8
DockerDefaultTargetOS Sistem operasi target default yang digunakan saat membangun gambar Docker. Diatur oleh Visual Studio. 1.0.1985401
DockerfileRunArguments

(usang, gunakan containerRunArguments dalam launchsettings.json)
Argumen tambahan diteruskan ke perintah jalankan Docker . Tidak dapat diterapkan. 1.0.1872750
DockerfileRunEnvironmentFiles

(usang, gunakan containerRunEnvironmentFiles dalam launchsettings.json)
Daftar file lingkungan yang dibatasi titik koma yang diterapkan selama eksekusi Docker. Tidak dapat diterapkan. 1.0.1872750

ContainerRepository dan ContainerImageTag (atau ContainerImageTags) menyediakan kemampuan untuk menentukan dua bagian label gambar, repositori dan satu atau beberapa tag (misalnya, webapp1:alpha). Di versi Visual Studio sebelumnya, Anda dapat menggunakan DockerfileTag properti untuk menentukan repositori dan satu tag, tetapi ini memiliki batasan, misalnya, tidak ada kemampuan untuk menentukan beberapa tag. Properti DockerfileTag usang; proyek sekarang harus menggunakan ContainerRepository dan ContainerImageTag, dan versi saat ini juga mendukung ContainerImageTags untuk beberapa tag.

Dalam versi Visual Studio sebelumnya, sintaksnya adalah <DockerfileTag>webapp1:alpha</DockerfileTag>. Yang setara saat ini adalah <ContainerRepository>webapp1</ContainerRespository> dan <ContainerImageTag>alpha</ContainerImageTag>, atau <ContainerImageTags>alpha;latest</ContainerImageTags> jika Anda menginginkan beberapa tag.

Example

File proyek berikut menunjukkan contoh beberapa pengaturan ini.

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

Nota

Konteks build, yang dapat Anda tetapkan dengan memberikan nilai untuk ContainerBuildContext (atau DockerfileContext), biasanya berbeda di Visual Studio untuk proyek dari apa yang docker build (atau podman build) gunakan saat Anda menjalankannya dari baris perintah. Keberangkatan dari perilaku baris perintah build diperlukan untuk memastikan bahwa artefak build pada tingkat solusi dapat disertakan.

Saat Anda memanggil docker build (atau podman build), Anda selalu menentukan konteks build, dan Anda dapat secara opsional menentukan jalur ke Dockerfile. Defaultnya adalah Dockerfile berada di akar konteks, tetapi Anda dapat menggunakan -f bendera untuk menentukan lokasi alternatif. Misalnya, Anda dapat membangun dari docker build -f Dockerfile .. direktori proyek, atau docker build -f ProjectName/Dockerfile . dari direktori solusi.

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

Nota

Konteks Docker, yang dapat Anda tetapkan dengan memberikan nilai untuk DockerfileContext, biasanya berbeda di Visual Studio untuk proyek yang menargetkan .NET Core (termasuk .NET 5 dan yang lebih baru) dari apa yang docker build digunakan saat Anda menjalankannya dari baris perintah. Keberangkatan dari docker build perilaku diperlukan untuk memastikan bahwa artefak build di tingkat solusi dapat disertakan.

Saat memanggil docker build, Anda selalu menentukan konteks build, dan Anda dapat secara opsional menentukan jalur ke Dockerfile. Defaultnya adalah Dockerfile berada di akar konteks, tetapi Anda dapat menggunakan -f bendera untuk menentukan lokasi alternatif. Misalnya, Anda dapat membangun dari docker build -f Dockerfile .. direktori proyek, atau docker build -f ProjectName/Dockerfile . dari direktori solusi.

Langkah selanjutnya

Untuk informasi tentang properti MSBuild umumnya, lihat Properti MSBuild.

Lihat juga

Properti build Docker Compose

Pengaturan peluncuran Alat Kontainer

MSBuild properti yang dicadangkan dan terkenal