Men-debug aplikasi dalam kontainer Docker lokal
Visual Studio menyediakan cara yang konsisten untuk mengembangkan kontainer Docker dan memvalidasi aplikasi Anda secara lokal. Anda dapat menjalankan dan men-debug aplikasi Anda di kontainer Linux atau Windows yang berjalan di desktop Windows lokal Anda dengan Docker terinstal, dan Anda tidak perlu menghidupkan ulang kontainer setiap kali Anda membuat perubahan kode.
Artikel ini mengilustrasikan cara menggunakan Visual Studio untuk memulai aplikasi di kontainer Docker lokal, membuat perubahan, lalu merefresh browser untuk melihat perubahan. Artikel ini juga menunjukkan cara mengatur titik henti untuk debugging aplikasi yang terkontainerisasi. Jenis proyek yang didukung termasuk aplikasi web, aplikasi konsol, dan fungsi Azure yang menargetkan .NET Framework dan .NET Core. Contoh yang disajikan dalam artikel ini adalah proyek jenis ASP.NET Core Web App dan proyek jenis Aplikasi Konsol (.NET Framework).
Jika Anda sudah memiliki proyek jenis yang didukung, Visual Studio dapat membuat Dockerfile dan mengonfigurasi proyek Anda untuk dijalankan dalam kontainer. Lihat Alat Kontainer di Visual Studio.
Prasyarat
Untuk men-debug aplikasi dalam kontainer Docker lokal, alat berikut harus diinstal:
- Visual Studio 2019 dengan beban kerja Pengembangan Web terinstal
- Visual Studio 2022 dengan beban kerja Pengembangan Web terinstal
Untuk menjalankan kontainer Docker secara lokal, Anda harus memiliki klien Docker lokal. Anda dapat menggunakan Docker Desktop, yang memerlukan Windows 10 atau yang lebih baru.
Membuat aplikasi web
Jika Anda memiliki proyek dan telah menambahkan dukungan Docker seperti yang dijelaskan dalam gambaran umum , lewati bagian ini.
Di jendela mulai Visual Studio, pilih Buat proyek baru.
Pilih ASP.NET Core Web App, lalu pilih Berikutnya.
Masukkan nama untuk aplikasi baru Anda (atau gunakan nama default), tentukan lokasi pada disk, lalu pilih Berikutnya.
Pilih versi .NET yang ingin Anda targetkan. Jika Anda tidak yakin, memilih rilis LTS (dukungan jangka panjang).
Pilih apakah Anda menginginkan dukungan SSL dengan memilih atau menghapus kotak centang Konfigurasikan untuk HTTPS.
Pilih kotak centang Aktifkan Dukungan Docker.
Gunakan daftar dropdown untuk memilih jenis kontainer yang Anda inginkan: Windows atau Linux.
Pilih Buat untuk menyelesaikan proses.
Di jendela mulai Visual Studio, pilih Buat proyek baru.
Pilih ASP.NET Core Web App, lalu pilih Berikutnya.
Masukkan nama untuk aplikasi baru Anda (atau gunakan nama default), tentukan lokasi pada disk, lalu pilih Berikutnya.
Pilih versi .NET yang ingin Anda targetkan. Jika Anda tidak yakin, memilih rilis LTS (dukungan jangka panjang).
Pilih apakah Anda menginginkan dukungan SSL dengan memilih atau menghapus kotak centang Konfigurasikan untuk HTTPS.
Pilih kotak centang Aktifkan Docker.
Gunakan daftar dropdown OS Docker untuk memilih jenis kontainer yang Anda inginkan: Windows atau Linux.
Pilih Buat untuk menyelesaikan proses.
Sunting halaman Razor Anda dan segarkan
Untuk menguraikan perubahan dengan cepat di halaman Razor, Anda dapat memulai aplikasi Anda dalam kontainer. Kemudian, lanjutkan membuat perubahan, melihatnya seperti saat Anda menggunakan Internet Information Services (IIS) Express.
Pastikan Docker disiapkan untuk menggunakan jenis kontainer (Linux atau Windows) yang Anda gunakan. Klik kanan ikon Docker di Taskbar, dan pilih Beralih ke kontainer Linux atau Beralih ke kontainer Windows yang sesuai.
Mengedit kode Anda dan memperbarui situs yang aktif seperti yang dijelaskan di bagian ini tidak didukung dalam templat default di .NET Core dan .NET 5 dan yang lebih baru. Untuk mengaktifkannya, tambahkan paket NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Tambahkan panggilan ke metode ekstensi AddRazorRuntimeCompilation ke kode dalam metode
Startup.ConfigureServices
. Anda hanya memerlukan ini diaktifkan dalam mode DEBUG, jadi kodekan sebagai berikut dalam metodeMain
:// Add services to the container. var mvcBuilder = builder.Services.AddRazorPages(); #if DEBUG if (Env.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); } #endif
Untuk informasi selengkapnya, lihat kompilasi file Razor di ASP.NET Core. Kode yang tepat mungkin bervariasi, tergantung pada kerangka kerja target dan templat proyek yang Anda gunakan.
Atur Konfigurasi Solusi ke Debug. Kemudian, tekan Ctrl+F5 untuk membangun gambar Docker Anda dan menjalankannya secara lokal.
Saat gambar kontainer dibangun dan berjalan dalam kontainer Docker, Visual Studio meluncurkan aplikasi web di browser default Anda.
Buka halaman Indeks . Kami akan membuat perubahan pada halaman ini.
Kembali ke Visual Studio dan buka Index.cshtml .
Tambahkan konten HTML berikut ke akhir file, lalu simpan perubahan.
<h1>Hello from a Docker container!</h1>
Di jendela output, ketika build .NET selesai dan Anda melihat baris berikut, beralih kembali ke browser Anda dan refresh halaman:
Now listening on: http://*:80 Application started. Press Ctrl+C to shut down.
Perubahan Anda telah diterapkan!
Debug dengan titik henti
Seringkali, perubahan memerlukan inspeksi lebih lanjut. Anda dapat menggunakan fitur debugging (penelusuran kesalahan) Visual Studio untuk tugas ini.
Di Visual Studio, buka Index.cshtml.cs.
Ganti konten metode
OnGet
dengan kode berikut:ViewData["Message"] = "Your application description page from within a container";
Di sebelah kiri baris kode, atur titik henti.
Mulai debugging dan tekan titik henti, tekan F5.
Beralih ke Visual Studio untuk melihat titik henti. Memeriksa nilai.
Pemuat ulang cepat
Selain itu, di Visual Studio 17.10 dan yang lebih baru, Hot Reload didukung dalam kontainer, meskipun perlu diketahui bahwa dalam kontainer, Anda harus me-refresh halaman untuk melihat perubahan. Jika perubahannya adalah ke file CSS, Anda harus me-refresh halaman lagi untuk melihat perubahan tersebut. Perhatikan juga bahwa pembaruan untuk file CSS dengan ruang lingkup (.razor.css
, lihat isolasi CSS ASP.NET Core Blazor) tidak didukung sebagai bagian dari pemuat ulang cepat.
Membuat aplikasi konsol .NET Framework
Bagian ini menyajikan cara men-debug proyek aplikasi konsol .NET Framework di kontainer Docker lokal dengan terlebih dahulu menunjukkan cara menambahkan dukungan Docker ke proyek. Penting untuk mengenali bahwa jenis proyek yang berbeda memiliki tingkat dukungan Docker yang berbeda. Bahkan ada berbagai tingkat dukungan Docker untuk proyek aplikasi konsol .NET Core (termasuk .NET 5 dan yang lebih baru) versus proyek aplikasi konsol .NET Framework.
Saat proyek aplikasi konsol .NET Framework dibuat, tidak ada opsi untuk mengaktifkan dukungan Docker. Setelah membuat proyek seperti itu, tidak ada cara untuk secara eksplisit menambahkan dukungan Docker ke proyek. Untuk proyek aplikasi konsol .NET Framework, Anda dapat menambahkan dukungan untuk orkestrasi kontainer. Efek samping menambahkan dukungan orkestrasi ke proyek aplikasi konsol .NET Framework adalah menambahkan dukungan Docker ke proyek.
Prosedur berikut menunjukkan cara menambahkan dukungan orkestrasi ke proyek aplikasi konsol .NET Framework, yang kemudian menambahkan dukungan Docker ke proyek dan memungkinkan proyek di-debug dalam kontainer Docker lokal.
- Buat proyek aplikasi .NET Framework Console baru.
- Di Penjelajah Solusi, klik kanan simpul proyek, lalu pilih Tambahkan Dukungan Orkestrasi Kontainer>. Dalam kotak dialog yang muncul, pilih Docker Compose. Dockerfile ditambahkan ke proyek Anda dan proyek Docker Compose dengan file dukungan terkait ditambahkan.
Debug dengan titik jeda
Di Penjelajah Solusi, buka Program.cs.
Ganti konten metode
Main
dengan kode berikut:System.Console.WriteLine("Hello, world!");
Atur titik henti di sebelah kiri baris kode.
Tekan F5 untuk memulai penelusuran kesalahan dan tekan titik henti.
Beralih ke Visual Studio untuk melihat titik henti dan memeriksa nilai.
Mengautentikasi ke layanan Azure menggunakan proksi token
Saat menggunakan layanan Azure dari kontainer, Anda dapat menggunakan DefaultAzureCredential (dengan VisualStudioCredential diaktifkan) untuk mengautentikasi dengan layanan Azure dengan akun Microsoft Entra Anda tanpa konfigurasi tambahan dalam kontainer. Untuk mengaktifkan ini, lihat Cara mengonfigurasi Alat Kontainer Visual Studio. Selain itu, Anda perlu menyiapkan autentikasi Azure di Visual Studio dengan mengikuti instruksi di Mengautentikasi Visual Studio dengan Azure. Dukungan untuk VisualStudioCredential dalam kontainer tersedia di Visual Studio versi 17.6 dan yang lebih baru.
Azure Functions
Jika Anda men-debug proyek Azure Functions terintegrasi dan menggunakan proksi token dalam kontainer untuk menangani autentikasi ke layanan Azure, Anda perlu menyalin runtime .NET ke kontainer agar proksi token berjalan. Jika Anda men-debug proyek Azure Functions yang terisolasi, proyek tersebut sudah memiliki runtime .NET, jadi tidak perlu langkah tambahan ini.
Untuk memastikan runtime .NET tersedia untuk proksi token, tambahkan, atau ubah lapisan debug
di Dockerfile yang menyalin runtime .NET ke dalam gambar kontainer. Untuk kontainer Linux, Anda dapat menambahkan kode berikut ke Dockerfile:
# This layer is to support debugging, VS's Token Proxy requires the runtime to be installed in the container
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS runtime
FROM base as debug
COPY --from=runtime /usr/share/dotnet /usr/share/dotnet
RUN ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
Selain itu, dalam proyek Visual Studio, Anda perlu melakukan beberapa perubahan untuk menetapkan ini sebagai lapisan yang digunakan saat debugging dalam Mode Cepat. Untuk penjelasan tentang Mode Cepat, lihat Menyesuaikan kontainer Docker di Visual Studio. Untuk skenario kontainer tunggal (bukan Docker Compose), atur properti MSBuild DockerfileFastModeStage
ke debug
untuk menggunakan lapisan tersebut untuk penelusuran kesalahan. Untuk Docker Compose, ubah docker-compose.vs.debug.yml
sebagai berikut:
# Set the stage to debug to use an image with the .NET runtime in it
services:
functionappintegrated:
build:
target: debug
Untuk sampel kode autentikasi dengan Azure Functions, termasuk skenario terintegrasi dan terisolasi, lihat VisualStudioCredentialExample.
Penggunaan kembali kontainer
Saat Anda menggunakan Mode Cepat, yang biasanya digunakan Visual Studio untuk konfigurasi Debug, Visual Studio hanya menyusun ulang citra kontainer Anda dan kontainer itu sendiri saat Anda mengubah Dockerfile. Jika Anda tidak mengubah Dockerfile, Visual Studio akan menggunakan kembali kontainer dari proses sebelumnya.
Jika Anda memodifikasi kontainer secara manual dan ingin memulai ulang dengan gambar kontainer yang bersih, gunakan perintah Build>Clean di Visual Studio, lalu buat seperti biasa.
Saat Anda tidak menggunakan Mode Cepat, yang khas untuk konfigurasi Rilis, Visual Studio membangun kembali kontainer setiap kali proyek dibuat.
Anda dapat mengonfigurasi kapan Mode Cepat digunakan; lihat Cara mengonfigurasi Alat Kontainer Visual Studio.
Pemecahan Masalah
Pelajari cara memecahkan masalah pengembangan Visual Studio Docker.
Konten terkait
Dapatkan detail selengkapnya dengan membaca Cara Visual Studio membangun aplikasi kontainer.
Selengkapnya tentang Docker dengan Visual Studio, Windows, dan Azure
- Pelajari selengkapnya tentang pengembangan kontainer dengan Visual Studio.
- Untuk membangun dan menyebarkan kontainer Docker, lihat integrasi Docker untuk Azure Pipelines.
- Untuk indeks artikel Windows Server dan Nano Server, lihat informasi kontainer Windows.
- Pelajari tentang Azure Kubernetes Service dan tinjau dokumentasi Azure Kubernetes Service.