Alat Kontainer Visual Studio dengan ASP.NET Core
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Visual Studio 2017 dan versi yang lebih baru mendukung pembuatan, penelusuran kesalahan, dan menjalankan aplikasi ASP.NET Core dalam kontainer yang menargetkan .NET Core. Kontainer Windows dan Linux didukung.
Melihat atau mengunduh kode sampel (cara mengunduh)
Prasyarat
- Docker untuk Windows
- Visual Studio 2019 dengan beban kerja pengembangan lintas platform .NET Core
Penginstalan dan konfigurasi
Untuk penginstalan Docker, pertama-tama tinjau informasi di Docker untuk Windows: Apa yang harus diketahui sebelum Anda menginstal. Selanjutnya, instal Docker untuk Windows.
Drive Bersama di Docker untuk Windows harus dikonfigurasi untuk mendukung pemetaan dan penelusuran kesalahan volume. Klik kanan ikon Docker Baki Sistem, pilih Pengaturan, dan pilih Drive Bersama. Pilih drive tempat Docker menyimpan file. Klik Terapkan.
Tip
Visual Studio 2017 versi 15.6 dan yang lebih baru saat Drive Bersama tidak dikonfigurasi.
Menambahkan proyek ke kontainer Docker
Untuk memuat proyek ASP.NET Core dalam kontainer, proyek harus menargetkan .NET Core. Kontainer Linux dan Windows didukung.
Saat menambahkan dukungan Docker ke proyek, pilih kontainer Windows atau Linux. Host Docker harus menjalankan jenis kontainer yang sama. Untuk mengubah jenis kontainer dalam instans Docker yang sedang berjalan, klik kanan ikon Docker Baki Sistem dan pilih Beralih ke kontainer Windows... atau Beralih ke kontainer Linux....
Aplikasi baru
Saat membuat aplikasi baru dengan templat proyek ASP.NET Core Web Application , pilih kotak centang Aktifkan Dukungan Docker:
Jika kerangka kerja target adalah .NET Core, drop-down OS memungkinkan pemilihan jenis kontainer.
Aplikasi yang sudah ada
Untuk proyek ASP.NET Core yang menargetkan .NET Core, ada dua opsi untuk menambahkan dukungan Docker melalui alat. Buka proyek di Visual Studio, dan pilih salah satu opsi berikut:
- Pilih Dukungan Docker dari menu Proyek .
- Klik kanan proyek di Penjelajah Solusi dan pilih Tambahkan>Dukungan Docker.
Alat Kontainer Visual Studio tidak mendukung penambahan Docker ke proyek ASP.NET Core yang sudah ada yang menargetkan .NET Framework.
Gambaran umum Dockerfile
Dockerfile, resep untuk membuat gambar Docker akhir, ditambahkan ke akar proyek. Lihat referensi Dockerfile untuk pemahaman tentang perintah di dalamnya. Dockerfile khusus ini menggunakan build multi-tahap dengan empat tahap build yang berbeda dan bernama:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1 AS base
WORKDIR /app
EXPOSE 59518
EXPOSE 44364
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
Gambar Dockerfile sebelumnya mencakup runtime ASP.NET Core dan paket NuGet. Paket dikompilasi just-in-time (JIT) untuk meningkatkan performa startup.
Saat kotak centang Konfigurasi untuk HTTPS dialog proyek baru dicentang, Dockerfile mengekspos dua port. Satu port digunakan untuk lalu lintas HTTP; port lainnya digunakan untuk HTTPS. Jika kotak centang tidak dicentang, satu port (80) diekspos untuk lalu lintas HTTP.
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
Gambar Dockerfile sebelumnya mencakup paket ASP.NET Core NuGet, yang dikompilasi just-in-time (JIT) untuk meningkatkan performa startup.
Menambahkan dukungan orkestrator kontainer ke aplikasi
Visual Studio 2017 versi 15.7 atau yang lebih lama mendukung Docker Compose sebagai satu-satu solusi orkestrasi kontainer. Artefak Docker Compose ditambahkan melalui Tambahkan>Dukungan Docker.
Visual Studio 2017 versi 15.8 atau yang lebih baru menambahkan solusi orkestrasi hanya saat diinstruksikan. Klik kanan proyek di Penjelajah Solusi dan pilih Tambahkan>Dukungan Orkestrator Kontainer. Pilihan berikut tersedia:
Docker Compose
Alat Kontainer Visual Studio menambahkan proyek docker-compose ke solusi dengan file berikut:
- docker-compose.dcproj: File yang mewakili proyek. Menyertakan elemen yang
<DockerTargetOS>
menentukan OS yang akan digunakan. - .dockerignore: Mencantumkan pola file dan direktori yang akan dikecualikan saat membuat konteks build.
- docker-compose.yml: File Docker Compose dasar yang digunakan untuk menentukan kumpulan gambar yang dibangun dan dijalankan dengan
docker-compose build
dandocker-compose run
, masing-masing. - docker-compose.override.yml: File opsional, dibaca oleh Docker Compose, dengan penggantian konfigurasi untuk layanan. Visual Studio dijalankan
docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml"
untuk menggabungkan file-file ini.
File docker-compose.yml mereferensikan nama gambar yang dibuat saat proyek berjalan:
version: '3.4'
services:
hellodockertools:
image: ${DOCKER_REGISTRY}hellodockertools
build:
context: .
dockerfile: HelloDockerTools/Dockerfile
Dalam contoh sebelumnya, image: hellodockertools
menghasilkan gambar hellodockertools:dev
saat aplikasi berjalan dalam mode Debug . Gambar hellodockertools:latest
dihasilkan saat aplikasi berjalan dalam mode Rilis .
Awali nama gambar dengan nama pengguna Docker Hub (misalnya, dockerhubusername/hellodockertools
) jika gambar didorong ke registri. Atau, ubah nama gambar untuk menyertakan URL registri privat (misalnya, privateregistry.domain.com/hellodockertools
) tergantung pada konfigurasi.
Jika Anda menginginkan perilaku yang berbeda berdasarkan konfigurasi build (misalnya, Debug atau Rilis), tambahkan file docker-compose khusus konfigurasi. File harus diberi nama sesuai dengan konfigurasi build (misalnya, docker-compose.vs.debug.yml dan docker-compose.vs.release.yml) dan ditempatkan di lokasi yang sama dengan file docker-compose-override.yml.
Dengan menggunakan file penimpaan khusus konfigurasi, Anda dapat menentukan pengaturan konfigurasi yang berbeda (seperti variabel lingkungan atau titik entri) untuk konfigurasi build Debug dan Rilis.
Agar Docker Compose menampilkan opsi untuk dijalankan di Visual Studio, proyek docker harus menjadi proyek startup.
Service Fabric
Selain Prasyarat dasar, solusi orkestrasi Service Fabric menuntut prasyarat berikut:
- Microsoft Azure Service Fabric SDK versi 2.6 atau yang lebih baru
- Beban kerja Azure Development Visual Studio
Service Fabric tidak mendukung menjalankan kontainer Linux di kluster pengembangan lokal di Windows. Jika proyek sudah menggunakan kontainer Linux, Visual Studio akan meminta untuk beralih ke kontainer Windows.
Alat Kontainer Visual Studio melakukan tugas berikut:
<Menambahkan proyek Aplikasi Application Service Fabric project_name>ke solusi.
Menambahkan Dockerfile dan file .dockerignore ke proyek ASP.NET Core. Jika Dockerfile sudah ada di proyek ASP.NET Core, itu diganti namanya menjadi Dockerfile.original. Dockerfile baru, mirip dengan yang berikut ini, dibuat:
# See https://aka.ms/containerimagehelp for information on how to use Windows Server 1709 containers with Service Fabric. # FROM microsoft/aspnetcore:2.0-nanoserver-1709 FROM microsoft/aspnetcore:2.0-nanoserver-sac2016 ARG source WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
<IsServiceFabricServiceProject>
Menambahkan elemen ke file proyek.csproj
ASP.NET Core:<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
Menambahkan folder PackageRoot ke proyek ASP.NET Core. Folder menyertakan manifes layanan dan pengaturan untuk layanan baru.
Untuk informasi selengkapnya, lihat Menyebarkan aplikasi .NET dalam kontainer Windows ke Azure Service Fabric.
Debug
Pilih Docker dari drop-down debug di toolbar, dan mulai penelusuran kesalahan aplikasi. Tampilan Docker dari jendela Output memperlihatkan tindakan berikut yang terjadi:
- Tag runtime 2.1-aspnetcore dari gambar runtime microsoft/dotnet diperoleh (jika belum ada di cache). Gambar menginstal runtime ASP.NET Core dan .NET Core dan pustaka terkait. Ini dioptimalkan untuk menjalankan aplikasi ASP.NET Core dalam produksi.
- Variabel
ASPNETCORE_ENVIRONMENT
lingkungan diatur keDevelopment
dalam kontainer. - Dua port yang ditetapkan secara dinamis diekspos: satu untuk HTTP dan satu untuk HTTPS. Port yang ditetapkan ke localhost dapat dikueri dengan
docker ps
perintah . - Aplikasi disalin ke kontainer.
- Browser default diluncurkan dengan debugger yang dilampirkan ke kontainer menggunakan port yang ditetapkan secara dinamis.
Gambar Docker yang dihasilkan dari aplikasi ditandai sebagai dev. Gambar didasarkan pada tag 2.1-aspnetcore-runtime dari gambar dasar microsoft/dotnet . Jalankan docker images
perintah di jendela Package Manager Console (PMC). Gambar pada komputer ditampilkan:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev d72ce0f1dfe7 30 seconds ago 255MB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
- Gambar runtime microsoft/aspnetcore diperoleh (jika belum ada di cache).
- Variabel
ASPNETCORE_ENVIRONMENT
lingkungan diatur keDevelopment
dalam kontainer. - Port 80 diekspos dan dipetakan ke port yang ditetapkan secara dinamis untuk localhost. Port ditentukan oleh host Docker dan dapat dikueri dengan
docker ps
perintah . - Aplikasi disalin ke kontainer.
- Browser default diluncurkan dengan debugger yang dilampirkan ke kontainer menggunakan port yang ditetapkan secara dinamis.
Gambar Docker yang dihasilkan dari aplikasi ditandai sebagai dev. Gambar didasarkan pada gambar dasar microsoft/aspnetcore . Jalankan docker images
perintah di jendela Package Manager Console (PMC). Gambar pada komputer ditampilkan:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev 5fafe5d1ad5b 4 minutes ago 347MB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
Catatan
Gambar dev tidak memiliki konten aplikasi, karena konfigurasi Debug menggunakan pemasangan volume untuk memberikan pengalaman berulang. Untuk mendorong gambar, gunakan konfigurasi Rilis .
Jalankan docker ps
perintah di PMC. Perhatikan bahwa aplikasi berjalan menggunakan kontainer:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 21 seconds ago Up 19 seconds 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Edit dan lanjutkan
Perubahan pada file statis dan Razor tampilan diperbarui secara otomatis tanpa perlu langkah kompilasi. Buat perubahan, simpan, dan refresh browser untuk melihat pembaruan.
Modifikasi file kode memerlukan kompilasi dan restart Kestrel dalam kontainer. Setelah membuat perubahan, gunakan CTRL+F5
untuk melakukan proses dan memulai aplikasi dalam kontainer. Kontainer Docker tidak dibangun kembali atau dihentikan. Jalankan docker ps
perintah di PMC. Perhatikan bahwa kontainer asli masih berjalan pada 10 menit yang lalu:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 10 minutes ago Up 10 minutes 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Menerbitkan gambar Docker
Setelah siklus pengembangan dan debug aplikasi selesai, Alat Kontainer Visual Studio membantu dalam membuat gambar produksi aplikasi. Ubah menu drop-down konfigurasi ke Rilis dan buat aplikasi. Alat ini memperoleh gambar kompilasi/penerbitan dari Docker Hub (jika belum ada di cache). Gambar diproduksi dengan tag terbaru , yang dapat didorong ke registri privat atau Docker Hub.
Jalankan docker images
perintah di PMC untuk melihat daftar gambar. Output yang mirip dengan berikut ini ditampilkan:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools latest e3984a64230c About a minute ago 258MB
hellodockertools dev d72ce0f1dfe7 4 minutes ago 255MB
microsoft/dotnet 2.1-sdk 9e243db15f91 6 days ago 1.7GB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools latest cd28f0d4abbd 12 seconds ago 349MB
hellodockertools dev 5fafe5d1ad5b 23 minutes ago 347MB
microsoft/aspnetcore-build 2.0 7fed40fbb647 13 days ago 2.02GB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
Gambar microsoft/aspnetcore-build
dan microsoft/aspnetcore
yang tercantum dalam output sebelumnya diganti dengan microsoft/dotnet
gambar pada .NET Core 2.1. Untuk informasi selengkapnya, lihat pengumuman migrasi repositori Docker.
Catatan
Perintah docker images
mengembalikan gambar perantara dengan nama repositori dan tag yang diidentifikasi sebagai <tidak ada> (tidak tercantum di atas). Gambar yang tidak disebutkan namanya ini diproduksi oleh Dockerfile build multi-tahap. Mereka meningkatkan efisiensi membangun gambar akhir—hanya lapisan yang diperlukan yang dibangun kembali ketika perubahan terjadi. Ketika gambar perantara tidak lagi diperlukan, hapus menggunakan perintah docker rmi .
Mungkin ada harapan untuk produksi atau gambar rilis menjadi lebih kecil ukurannya dengan perbandingan dengan gambar dev . Karena pemetaan volume, debugger dan aplikasi berjalan dari komputer lokal dan bukan dalam kontainer. Gambar terbaru telah mengemas kode aplikasi yang diperlukan untuk menjalankan aplikasi pada komputer host. Oleh karena itu, delta adalah ukuran kode aplikasi.
Sumber Daya Tambahan:
- Pengembangan kontainer dengan Visual Studio
- Azure Service Fabric: Menyiapkan lingkungan pengembangan Anda
- Menyebarkan aplikasi .NET dalam kontainer Windows ke Azure Service Fabric
- Memecahkan masalah pengembangan Visual Studio dengan Docker
- Repositori GitHub Alat Kontainer Visual Studio
- GC menggunakan Docker dan kontainer kecil
- System.IO.IOException: Batas pengguna yang dikonfigurasi (128) pada jumlah instans inotify telah tercapai
- Pembaruan pada gambar Docker
ASP.NET Core