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. Baik Anda membuat kontainer yang disesuaikan dari Visual Studio IDE, atau menyiapkan build baris perintah, Anda perlu mengetahui bagaimana Visual Studio menggunakan Dockerfile untuk membangun 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 penelusuran kesalahan dan dalam kontainer produksi. Dalam hal ini, Anda dapat menambahkan perintah di Dockerfile untuk memodifikasi tahap pertama (biasanya base). Lihat Mengubah gambar kontainer untuk penelusuran kesalahan dan produksi. Tetapi, jika Anda ingin membuat perubahan hanya saat penelusuran kesalahan, tetapi bukan produksi, maka Anda harus membuat tahap lain, dan menggunakan DockerfileFastModeStage pengaturan build untuk memberi tahu Visual Studio untuk menggunakan tahap tersebut untuk build debug. Lihat Mengubah gambar kontainer hanya untuk penelusuran kesalahan.

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.

Build Dockerfile di Visual Studio

Catatan

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 Menampung aplikasi .NET dengan dotnet publish dan gunakan properti yang dijelaskan di Menyesuaikan kontainer Anda untuk mengonfigurasi proses build kontainer.

Build multitahap

Ketika membangun proyek yang tidak menggunakan kontainer Docker, Visual Studio membatalkan MSBuild pada komputer lokal dan membuat file output dalam folder (biasanya bin) di bawah folder solusi lokal Anda. Namun, untuk proyek dalam kontainer, proses build mempertimbangkan instruksi Dockerfile untuk membangun aplikasi dalam kontainer tersebut. Dockerfile yang digunakan Visual Studio dibagi menjadi beberapa tahap. Proses ini bergantung pada fitur build multitahap Docker.

Fitur build multitahap membantu menjadikan proses pembangunan kontainer lebih efisien dan menghasilkan kontainer lebih kecil yang hanya dapat berisi bit yang dibutuhkan aplikasi Anda saat beroperasi. Build multitahap digunakan untuk proyek .NET Core, bukan proyek .NET Framework.

Build multitahap memungkinkan gambar kontainer dibuat dalam beberapa tahap yang menghasilkan citra perantara. Sebagai contoh, pertimbangkan Dockerfile yang khas. Tahap pertama dipanggil 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

Garis di dalam Dockerfile dimulai dengan citra ASP.NET dari Microsoft Container Registry (mcr.microsoft.com) dan menghasilkan citra base perantara yang mengekspos port 80 dan 443, dan 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

Tampak tahap build dimulai dari citra asli yang berbeda dari registri (sdk, bukannya aspnet), tidak melanjutkan dari dasar. Citra sdk memiliki semua alat build, sehingga jauh lebih besar dari citra aspnet, yang hanya berisi komponen runtime. Alasan penggunaan citra terpisah menjadi jelas ketika Anda melihat bagian Dockerfile lainnya:

# 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 mencakup COPY --from=publish untuk menyalin output yang diterbitkan ke citra akhir. Proses ini dapat menghasilkan citra akhir yang jauh lebih kecil, karena tidak perlu menyertakan semua alat build yang ada dalam citra sdk.

Tabel berikut ini meringkas tahapan yang digunakan dalam Dockerfile khas yang dibuat oleh Visual Studio:

Tahap Deskripsi
dasar Membuat gambar runtime dasar tempat aplikasi bawaan diterbitkan. Pengaturan yang perlu tersedia saat runtime masuk ke sini, seperti port dan variabel lingkungan. Tahap ini digunakan saat berjalan dari VS dalam mode cepat (Default untuk konfigurasi Debug).
build 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 menerbitkan proyek Anda, yang akan disalin ke tahap akhir.
final 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 dari VS untuk mendukung penelusuran kesalahan dalam mode reguler (Default saat tidak menggunakan konfigurasi Debug).

Catatan

Tahap aotdebug ini 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.

Warmup proyek

Warmup proyek mengacu pada serangkaian langkah yang terjadi ketika profil Docker dipilih untuk suatu proyek (yaitu ketika proyek dimuat atau dukungan Docker ditambahkan) untuk meningkatkan performa pengoperasian berikutnya (F5 atau Ctrl+F5). Perilaku ini dapat dikonfigurasi di bawah Alat>Opsi>Alat Alat Kontainer. Berikut tugas yang beroperasi di latar belakang:

  • Periksa apakah Docker Desktop telah terinstal dan berjalan.
  • Pastikan Docker Desktop telah diatur ke sistem operasi yang sama dengan proyek.
  • Tarik citra pada tahap pertama Dockerfile (tahap base pada sebagian besar Dockerfile).
  • Bangun Dockerfile dan mulai kontainernya.

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 penelusuran kesalahan secara signifikan dan mengurangi waktu tunggu untuk tugas yang berjalan lama seperti menarik 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 masuk %tmp%\Microsoft.VisualStudio.Containers.Tools. Untuk proyek Docker Compose, ini adalah MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, yang kemudian masuk %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 Dockerfile untuk menyesuaikan gambar yang digunakan untuk penelusuran kesalahan dan produksi, misalnya, cara menginstal alat pada gambar hanya saat penelusuran kesalahan. Lihat Mengonfigurasi gambar kontainer untuk penelusuran kesalahan.