Bagikan melalui


Mengontainerisasi Aplikasi .NET Core

Berlaku untuk: 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 repositori git Virtualization-Documentation (dikenal secara informal sebagai repositori) dalam folder yang disebut windows-container-samples.

  1. 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.)

  2. Kloning repositori ke direktori kerja Anda saat ini:

    git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
    
  3. Navigasi ke direktori sampel yang ditemukan di bawah Virtualization-Documentation\windows-container-samples\asp-net-getting-started dan 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
    

Menulis 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 citra ini, maka docker akan secara otomatis mencoba dan mengambilnya. Dilengkapi mcr.microsoft.com/dotnet/core/sdk:2.1 dengan .NET core 2.1 SDK yang diinstal, sehingga terserah tugas membangun proyek inti ASP .NET yang menargetkan versi 2.1. Instruksi berikutnya mengubah direktori kerja dalam kontainer kami menjadi /app, sehingga semua perintah yang mengikuti perintah ini dijalankan dalam konteks ini.

COPY *.csproj ./
RUN dotnet restore

Selanjutnya, instruksi ini menyalin file .csproj ke build-env direktori kontainer /app . 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 build-env kontainer, 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 di .

Kompilasi harus berhasil. Sekarang kita harus membangun gambar akhir.

Tip

Mulai cepat ini membangun proyek inti .NET dari sumber. Saat membangun gambar kontainer, ada baiknya untuk hanya menyertakan 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 dipanggil 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 ASP.NET, kami menentukan gambar dengan runtime ini disertakan. Kami kemudian menyalin semua file dari direktori output kontainer sementara kami ke dalam kontainer akhir kami. Kami mengonfigurasi kontainer kami untuk dijalankan dengan aplikasi baru kami sebagai titik masuknya saat kontainer dimulai

Kami telah menulis dockerfile untuk melakukan build multi-tahap. Ketika dockerfile dijalankan, dockerfile akan 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.

Buat dan jalankan aplikasi

Dengan Dockerfile ditulis, kita dapat mengarahkan Docker ke Dockerfile kita dan memberitahunya untuk membangun dan kemudian menjalankan gambar kita:

  1. 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 .
    
  2. Untuk menjalankan kontainer yang baru dibuat, jalankan perintah docker run .

    docker run -d -p 5000:80 --name myapp my-asp-app
    

    Mari kita membedah perintah ini:

    • -d memberi tahu Docker untuk menjalankan kontainer 'dicopot', yang berarti tidak ada konsol yang terhubung ke konsol di dalam kontainer. Kontainer berjalan di latar belakang.
    • -p 5000:80 memberi 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 myapp memberi tahu Docker untuk memberi kontainer ini nama yang nyaman untuk dikueri oleh (alih-alih harus mencari ID kontainer yang ditetapkan pada runtime oleh Docker).
    • my-asp-app adalah gambar yang kita inginkan untuk dijalankan Docker. Ini adalah gambar kontainer yang dihasilkan sebagai puncak dari docker build proses.
  3. Buka browser web dan navigasi ke untuk http://localhost:5000 melihat aplikasi kontainer Anda, seperti yang ditunjukkan pada cuplikan layar ini:

    ASP.NET core webpage, berjalan dari localhost dalam kontainer

Langkah berikutnya

  1. 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.

    Saat Anda sampai di bagian tempat Anda mendorong gambar kontainer 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:v1
    

    Untuk melihat sampel aplikasi lainnya dan dockerfiles terkait, lihat sampel kontainer tambahan.

  2. Setelah memublikasikan aplikasi ke registri kontainer, langkah selanjutnya adalah menyebarkan aplikasi ke kluster Kubernetes yang Anda buat dengan Azure Kubernetes Service.