Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat menyesuaikan gambar kontainer dengan mengedit Dockerfile yang dihasilkan Visual Studio saat menambahkan dukungan kontainer ke proyek Anda. Apakah Anda sedang membangun kontainer yang dikustomisasi dari Visual Studio IDE, atau menyiapkan build dari baris perintah, Anda perlu mengetahui bagaimana Visual Studio menggunakan Dockerfile untuk menyusun proyek Anda. Anda perlu mengetahui detail tersebut karena, untuk alasan performa, Visual Studio mengikuti proses khusus untuk membangun dan menjalankan aplikasi kontainer yang tidak jelas dari Dockerfile.
Misalkan Anda ingin membuat perubahan di Dockerfile dan melihat hasilnya dalam debugging serta kontainer produksi. Dalam hal ini, Anda dapat menambahkan perintah di Dockerfile untuk memodifikasi tahap pertama (biasanya base). Lihat Mengubah image kontainer untuk debugging dan produksi. Tetapi, jika Anda ingin membuat perubahan hanya saat men-debug, tetapi tidak produksi, maka Anda harus membuat tahap lain, dan menggunakan pengaturan build ContainerFastModeStage untuk memberi tahu Visual Studio untuk menggunakan tahap tersebut untuk build debug. Lihat Memodifikasi citra kontainer hanya untuk debugging.
Misalkan Anda ingin membuat perubahan di Dockerfile dan melihat hasilnya dalam debugging serta kontainer produksi. Dalam hal ini, Anda dapat menambahkan perintah di Dockerfile untuk memodifikasi tahap pertama (biasanya base). Lihat Mengubah image kontainer untuk debugging dan produksi. Tetapi, jika Anda ingin membuat perubahan hanya saat men-debug, tetapi tidak produksi, maka Anda harus membuat tahap lain, dan menggunakan pengaturan build DockerfileFastModeStage untuk memberi tahu Visual Studio untuk menggunakan tahap tersebut untuk build debug. Lihat Memodifikasi citra kontainer hanya untuk debugging.
Artikel ini menjelaskan proses build Visual Studio untuk aplikasi kontainer secara terperinci, kemudian berisi informasi tentang cara memodifikasi Dockerfile untuk memengaruhi proses debugging dan build produksi, atau hanya untuk penelusuran kesalahan.
Prasyarat
- Docker Desktop atau Podman Desktop.
- Visual Studio, atau untuk dukungan Podman, Visual Studio 2026, dengan ASP.NET dan pengembangan web, beban kerja pengembangan Azure , dan/atau beban kerja pengembangan desktop .NET terinstal.
Prasyarat
- Docker Desktop.
- Visual Studio dengan ASP.NET dan pengembangan web, beban kerja pengembangan Azure , dan/atau beban kerja pengembangan desktop .NET terinstal.
Pembangunan Dockerfile di Visual Studio
Nota
Bagian ini menjelaskan proses build kontainer yang digunakan Visual Studio saat Anda memilih jenis build kontainer Dockerfile. Jika Anda menggunakan jenis build .NET SDK, opsi kustomisasi berbeda, dan informasi di bagian ini tidak berlaku. Sebagai gantinya, lihat Mengontainerisasi aplikasi .NET dengan dotnet publish dan gunakan properti yang dijelaskan di Kustomisasi kontainer Anda untuk mengonfigurasi proses pembuatan kontainer.
Pembangunan multistage
Saat Visual Studio membangun proyek yang tidak menggunakan kontainer Docker, Visual Studio memanggil MSBuild pada komputer lokal dan menghasilkan file output dalam folder (biasanya bin) di bawah folder solusi lokal Anda. Namun, untuk proyek kontainer, proses build mempertimbangkan instruksi Dockerfile untuk membangun aplikasi kontainer. Dockerfile yang digunakan Visual Studio dibagi menjadi beberapa tahap. Proses ini bergantung pada fitur multistage build Docker.
Fitur pembangunan multistage membantu membuat proses membangun wadah lebih efisien, dan membuat wadah lebih kecil dengan memungkinkannya hanya berisi bagian yang dibutuhkan aplikasi Anda saat dijalankan.
Build multistage digunakan untuk proyek .NET Core, bukan proyek .NET Framework.
Pembangunan multitahap memungkinkan citra kontainer dibuat secara bertahap yang menghasilkan citra perantara. Sebagai contoh, pertimbangkan sebuah file Dockerfile yang umum. Tahap pertama disebut base di Dockerfile yang dihasilkan Visual Studio, meskipun alat tidak memerlukan nama tersebut.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
Baris di Dockerfile dimulai dengan image ASP.NET dari Microsoft Container Registry (mcr.microsoft.com) dan membuat image perantara base yang mengekspos port 8080 dan 8081, serta mengatur direktori kerja ke /app.
Saat Anda menargetkan .NET 7 atau yang lebih baru, USER $APP_UID baris muncul, yang mengatur kontainer agar berjalan tanpa hak akses yang ditinggikan dengan nama pengguna yang diperoleh dari variabel lingkungan APP_UID. Port yang digunakan adalah 8080 dan 8081, bukan 80 dan 443, yang memerlukan hak akses yang lebih tinggi.
Tahap berikutnya adalah build, yang muncul sebagai berikut:
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["WebApplication43/WebApplication43.csproj", "WebApplication43/"]
RUN dotnet restore "WebApplication43/WebApplication43.csproj"
COPY . .
WORKDIR "/src/WebApplication43"
RUN dotnet build "WebApplication43.csproj" -c Release -o /app/build
Anda dapat melihat bahwa tahap build dimulai dari citra asli yang berbeda dari registri (sdk daripada aspnet), alih-alih melanjutkan dari basis. Gambar sdk memiliki semua alat build, dan karena alasan itu jauh lebih besar dari gambar aspnet, yang hanya berisi komponen runtime. Alasan untuk menggunakan gambar terpisah menjadi jelas ketika Anda melihat sisa Dockerfile:
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication43.csproj" -c Release -o /app/publish
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication43.dll"]
Tahap akhir dimulai lagi dari base, dan menyertakan COPY --from=publish untuk menyalin output yang diterbitkan ke gambar akhir. Proses ini memungkinkan gambar akhir menjadi jauh lebih kecil, karena tidak perlu menyertakan semua alat build yang ada dalam gambar sdk.
Tabel berikut ini meringkas tahapan yang digunakan dalam Dockerfile khas yang dibuat oleh Visual Studio:
| Panggung | Deskripsi |
|---|---|
| dasar | Membuat citra runtime dasar tempat aplikasi yang sudah dibangun diterbitkan. Pengaturan yang perlu tersedia saat runtime masuk ke sini, seperti port dan variabel lingkungan. Tahap ini digunakan ketika menjalankan dari VS dalam mode cepat (Bawaan untuk konfigurasi Debug). |
| bangun | Proyek ini dibangun dalam tahap ini. Gambar dasar .NET SDK digunakan, yang memiliki komponen yang diperlukan untuk membangun proyek Anda. |
| terbitkan | Tahap ini berasal dari tahap build dan berfungsi untuk menerbitkan proyek Anda, yang kemudian akan disalin ke tahap akhir. |
| terakhir | Tahap ini mengonfigurasi cara memulai aplikasi dan digunakan dalam produksi atau saat berjalan dari VS dalam mode reguler (Default saat tidak menggunakan konfigurasi Debug). |
| aotdebug | Tahap ini digunakan sebagai dasar untuk tahap akhir saat meluncurkan aplikasi dari VS untuk mendukung debugging dalam mode reguler (bawaan saat tidak menggunakan konfigurasi Debug). |
Nota
Tahap aotdebug hanya didukung untuk kontainer Linux. Ini digunakan di Visual Studio 2022 17.11 atau lebih baru jika penerapan native Ahead Of Time (AOT) diaktifkan pada proyek.
Pemanasan proyek
Pemanasan proyek mengacu pada serangkaian langkah yang terjadi ketika profil Kontainer dipilih untuk proyek (yaitu, ketika proyek dimuat atau dukungan kontainer ditambahkan) untuk meningkatkan performa eksekusi berikutnya (F5 atau Ctrl+F5).
Perilaku ini dapat dikonfigurasi di panel Tools>Options di bawah All Settings>Container Tools. Berikut adalah tugas yang berjalan di latar belakang:
- Periksa apakah runtime kontainer (Docker Desktop atau Podman) diinstal dan berjalan.
- Pastikan Docker Desktop diatur ke sistem operasi yang sama dengan proyek. (Pemeriksaan ini tidak berlaku untuk Podman, yang hanya mendukung kontainer Linux.)
- Ambil gambar pada tahap pertama Dockerfile (tahap
basedi sebagian besar Dockerfile). - Buat Dockerfile dan mulai kontainer.
Perilaku ini dapat dikonfigurasi di bawah Alat>Opsi>Alat Kontainer. Berikut adalah tugas yang berjalan di latar belakang:
- Periksa apakah Docker Desktop terinstal dan berjalan.
- Pastikan Docker Desktop diatur ke sistem operasi yang sama dengan proyek.
- Ambil gambar pada tahap pertama Dockerfile (tahap
basedi sebagian besar Dockerfile). - Buat Dockerfile dan mulai kontainer.
Pemanasan hanya terjadi dalam mode Cepat , sehingga kontainer yang sedang berjalan memiliki folder aplikasi yang dipasang volume. Itu berarti bahwa setiap perubahan pada aplikasi tidak membatalkan kontainer. Perilaku ini meningkatkan performa debugging secara signifikan dan mengurangi waktu tunggu untuk tugas yang berjalan lama seperti mengunduh gambar besar.
Mengaktifkan log alat kontainer terperinci
Untuk tujuan diagnostik, Anda dapat mengaktifkan log Container Tools tertentu. Anda dapat mengaktifkan log ini dengan mengatur variabel lingkungan tertentu. Untuk proyek kontainer tunggal, variabel lingkungan adalah MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLED, yang kemudian mengakses %tmp%\Microsoft.VisualStudio.Containers.Tools. Untuk proyek Docker Compose, variabelnya adalah MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, yang kemudian melakukan login pada %tmp%\Microsoft.VisualStudio.DockerCompose.Tools.
Peringatan
Saat pengelogan diaktifkan dan Anda menggunakan proksi token untuk autentikasi Azure, kredensial autentikasi dapat dicatat sebagai teks biasa. Lihat Mengonfigurasi autentikasi Azure.
Langkah berikutnya
Pelajari tentang cara menggunakan tahap-tahap Dockerfile untuk menyesuaikan citra yang digunakan untuk debugging dan produksi, misalnya, cara menginstal alat pada citra hanya saat debugging. Lihat Mengonfigurasi citra kontainer untuk debugging.