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.
Berlaku untuk: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Topik ini menjelaskan cara mengemas contoh aplikasi .NET yang ada untuk penyebaran sebagai kontainer Windows, setelah menyiapkan lingkungan Anda seperti yang dijelaskan dalam Memulai: Menyiapkan Windows untuk kontainer, dan menjalankan kontainer pertama Anda seperti yang dijelaskan dalam Menjalankan kontainer Windows pertama Anda.
Anda juga memerlukan sistem kontrol sumber Git yang terinstal di komputer Anda. Untuk menginstalnya, kunjungi Git.
Mengkloning kode sampel dari GitHub
Semua kode sumber sampel kontainer disimpan di bawah Virtualization-Documentation repositori git dalam folder yang disebut windows-container-samples.
Buka sesi PowerShell dan ubah direktori ke folder tempat Anda ingin menyimpan repositori ini. (Jenis jendela prompt perintah lainnya juga berfungsi, tetapi contoh perintah kami menggunakan PowerShell.)
Kloning repositori ke direktori kerja Anda saat ini:
git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.gitNavigasi ke direktori sampel yang ditemukan di bawah
Virtualization-Documentation\windows-container-samples\asp-net-getting-starteddan buat Dockerfile, menggunakan perintah berikut.Dockerfile seperti makefile—ini adalah daftar instruksi yang memberi tahu mesin kontainer cara membuat gambar kontainer.
# Navigate into the sample directory Set-Location -Path Virtualization-Documentation\windows-container-samples\asp-net-getting-started # Create the Dockerfile for our project New-Item -Name Dockerfile -ItemType file
Tulis Dockerfile
Buka Dockerfile yang baru saja Anda buat dengan editor teks apa pun yang Anda suka lalu tambahkan konten berikut:
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]
Mari kita uraikan baris demi baris dan jelaskan apa yang dilakukan setiap instruksi.
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
Grup baris pertama menyatakan dari gambar dasar mana yang akan kami gunakan untuk membangun kontainer kami di atasnya. Jika sistem lokal belum memiliki gambar ini, maka docker akan secara otomatis mencoba dan mengambilnya.
mcr.microsoft.com/dotnet/core/sdk:2.1 dilengkapi dengan .NET core 2.1 SDK yang sudah diinstal, sehingga mampu melakukan tugas membangun proyek ASP .NET Core yang menargetkan versi 2.1. Instruksi berikutnya mengubah direktori kerja dalam kontainer kami menjadi /app, sehingga semua perintah berikut ini dijalankan dalam konteks ini.
COPY *.csproj ./
RUN dotnet restore
Selanjutnya, instruksi ini menyalin file .csproj ke direktori /app kontainer build-env. Setelah menyalin file ini, .NET akan membaca darinya dan kemudian keluar dan mengambil semua dependensi dan alat yang diperlukan oleh proyek kami.
COPY . ./
RUN dotnet publish -c Release -o out
Setelah .NET menarik semua dependensi ke dalam kontainer build-env, instruksi berikutnya menyalin semua file sumber proyek ke dalam kontainer. Kami kemudian memberi tahu .NET untuk menerbitkan aplikasi kami dengan konfigurasi rilis dan menentukan jalur output.
Kompilasi harus berhasil. Sekarang kita harus membangun gambar akhir.
Tip
Panduan ini membangun proyek .NET Core dari sumber. Saat membangun gambar kontainer, ada baiknya untuk menyertakan hanya payload produksi dan dependensinya dalam gambar kontainer. Kami tidak ingin .NET core SDK disertakan dalam gambar akhir kami karena kami hanya memerlukan runtime inti .NET, sehingga dockerfile ditulis untuk menggunakan kontainer sementara yang dikemas dengan SDK yang disebut build-env untuk membangun aplikasi.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]
Karena aplikasi kami menggunakan ASP.NET, kami menentukan gambar yang menyertakan runtime ini. Kami kemudian menyalin semua file dari direktori output kontainer sementara kami ke dalam kontainer akhir kami. Kami mengonfigurasi kontainer kami untuk berjalan dengan aplikasi baru kami sebagai titik masuknya saat kontainer dimulai
Kami telah menulis Dockerfile untuk melakukan build multi-tahap. Ketika dockerfile dijalankan, ia menggunakan kontainer sementara, build-env, dengan .NET core 2.1 SDK untuk membangun aplikasi sampel dan kemudian menyalin biner yang dihasilkan ke dalam kontainer lain yang hanya berisi runtime .NET core 2.1 sehingga kami meminimalkan ukuran kontainer akhir.
Membuat dan menjalankan aplikasi
Dengan Dockerfile ditulis, kita dapat mengarahkan Docker ke Dockerfile kita dan memberitahunya untuk membangun dan kemudian menjalankan gambar kita:
Di jendela prompt perintah, navigasikan ke direktori tempat dockerfile berada lalu jalankan perintah build docker untuk membangun kontainer dari Dockerfile.
docker build -t my-asp-app .Untuk menjalankan kontainer yang baru dibuat, jalankan perintah docker run.
docker run -d -p 5000:80 --name myapp my-asp-appMari kita membedah perintah ini:
-
-dmemberi tahu Docker untuk menjalankan kontainer dalam mode 'terpisah', yang berarti tidak ada konsol yang terhubung ke konsol di dalam kontainer. Kontainer berjalan di latar belakang. -
-p 5000:80memberi tahu Docker untuk memetakan port 5000 pada host ke port 80 dalam kontainer. Setiap kontainer mendapatkan alamat IP-nya sendiri. ASP .NET mendengarkan secara default pada port 80. Pemetaan port memungkinkan kami untuk pergi ke alamat IP host di port yang dipetakan dan Docker akan meneruskan semua lalu lintas ke port tujuan di dalam kontainer. -
--name myappmemberi tahu Docker untuk memberikan nama yang mudah untuk kontainer ini sehingga dapat dikueri (alih-alih harus mencari ID kontainer yang ditetapkan pada runtime oleh Docker). -
my-asp-appadalah gambar yang kita inginkan untuk dijalankan Docker. Ini adalah gambar kontainer yang dihasilkan sebagai puncak dari prosesdocker build.
-
Buka browser web dan navigasi ke
http://localhost:5000untuk melihat aplikasi kontainer Anda.
Langkah berikutnya
Langkah selanjutnya adalah menerbitkan aplikasi web ASP.NET kontainer Anda ke registri privat menggunakan Azure Container Registry. Ini memungkinkan Anda untuk menyebarkannya di organisasi Anda.
Ketika Anda mencapai bagian di mana Anda mengunggah citra kontainer Anda ke registri, tentukan nama aplikasi ASP.NET yang baru saja Anda kemas (
my-asp-app) bersama dengan registri kontainer Anda (misalnya:contoso-container-registry):docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1Untuk melihat contoh aplikasi lainnya dan file docker yang terkait, lihat contoh kontainer tambahan.
Setelah memublikasikan aplikasi ke registri kontainer, langkah selanjutnya adalah menyebarkan aplikasi ke kluster Kubernetes yang Anda buat dengan Azure Kubernetes Service.