Bagikan melalui


Menyesuaikan kontainer Docker di Visual Studio

Anda dapat menyesuaikan gambar kontainer dengan mengedit Dockerfile yang dihasilkan Visual Studio saat menambahkan dukungan Docker 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 Memodifikasi citra 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 Ubah gambar kontainer hanya untuk debug.

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.

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 Containerize aplikasi .NET dengan dotnet publish dan gunakan juga properti yang dijelaskan di Sesuaikan kontainer Anda untuk mengonfigurasi proses build 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 pembangunan bertahap fitur 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:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

Baris di Dockerfile dimulai dari image ASP.NET dari Microsoft Container Registry (mcr.microsoft.com), dan membuat image perantara base yang mengekspos port 80 dan 443, serta mengatur direktori kerja ke /app.

Tahap berikutnya adalah build, yang muncul sebagai berikut:

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:3.1-buster-slim 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).
membangun Proyek ini dibangun dalam tahap ini. Gambar dasar .NET SDK digunakan, yang memiliki komponen yang diperlukan untuk membangun proyek Anda.
menerbitkan 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 dalam Visual Studio 2022 17.11 dan yang lebih baru jika penyebaran Ahead Of Time (AOT) asli diaktifkan pada proyek.

Pemanasan proyek

pemanasan proyek mengacu pada serangkaian langkah yang terjadi ketika profil Docker dipilih untuk proyek (yaitu, ketika proyek di-load atau dukungan Docker ditambahkan) untuk meningkatkan performa pengoperasian berikutnya (F5 atau Ctrl+F5). Perilaku ini dapat dikonfigurasi di dalam 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 base di sebagian besar Dockerfile).
  • Buat Dockerfile dan mulai kontainer.

Pemanasan hanya terjadi dalam mode Fast, sehingga kontainer yang sedang berjalan memasang folder aplikasi di 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, MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, yang kemudian melakukan login di %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 Konfigurasi 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.