Aracılığıyla paylaş


.NET Core Uygulamasını Kapsayıcıya Alma

Şunlar için geçerlidir: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Bu konu, Başlarken: Kapsayıcılar için Windows'u Hazırlamave İlk Windows Kapsayıcınızı Çalıştırmabölümlerinde açıklandığı gibi, ortamınızı hazırlayıp ilk kapsayıcınızı çalıştırdıktan sonra, mevcut bir örnek .NET uygulamasının Windows kapsayıcısı olarak dağıtım için nasıl paketleneceğini açıklamaktadır.

Ayrıca bilgisayarınızda Git kaynak denetim sisteminin yüklü olması gerekir. Yüklemek için git adresini ziyaret edin.

GitHub'dan örnek kodu kopyalama

Tüm kapsayıcı örnek kaynak kodu, Virtualization-Documentation git deposunda windows-container-samplesadlı bir klasörde tutulur.

  1. Bir PowerShell oturumu açın ve dizinleri bu depoyu depolamak istediğiniz klasörle değiştirin. (Diğer komut istemi pencere türleri de çalışır, ancak örnek komutlarımız PowerShell kullanır.)

  2. Depoyu geçerli çalışma dizininize kopyalayın:

    git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
    
  3. Virtualization-Documentation\windows-container-samples\asp-net-getting-started altında bulunan örnek dizine gidin ve aşağıdaki komutları kullanarak bir Dockerfile oluşturun.

    Dockerfile bir makefile gibidir—kapsayıcı motoruna kapsayıcı imajının nasıl oluşturulacağını belirten yönergelerin bir listesidir.

    # 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
    

Dockerfile dosyasını yazma

Az önce oluşturduğunuz Dockerfile dosyasını istediğiniz metin düzenleyicisiyle açın ve aşağıdaki içeriği ekleyin:

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"]

Şimdi bunu satır satır ayıralım ve her yönergenin ne yaptığını açıklayalım.

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

İlk satır grubu, kapsayıcımızı üzerinde derlemek için hangi temel görüntüden yararlanacağımızı bildirir. Yerel sistemde bu görüntü yoksa Docker otomatik olarak bu görüntüyü getirmeye çalışır. mcr.microsoft.com/dotnet/core/sdk:2.1, .NET Core 2.1 SDK yüklü olarak gelir, bu nedenle 2.1 sürümünü hedefleyen ASP .NET Core projelerini oluşturacak kapasitededir. Sonraki yönerge kapsayıcımızdaki çalışma dizinini /appolacak şekilde değiştirir, bu nedenle bunu izleyen tüm komutlar bu bağlam altında yürütülür.

COPY *.csproj ./
RUN dotnet restore

Ardından, bu yönergeler .csproj dosyalarını build-env kapsayıcısının /app dizinine kopyalar. Bu dosyayı kopyaladıktan sonra .NET dosyadan okur ve ardından projemiz için gereken tüm bağımlılıkları ve araçları getirir.

COPY . ./
RUN dotnet publish -c Release -o out

.NET tüm bağımlılıkları build-env kapsayıcısına çektikten sonra, sonraki yönerge tüm proje kaynak dosyalarını kapsayıcıya kopyalar. Ardından .NET'e uygulamamızı bir yayın yapılandırmasıyla yayımlamasını ve çıkış yolunu belirtmesini söyleriz.

Derleme başarılı olmalıdır. Şimdi son görüntüyü oluşturmalıyız.

Bahşiş

Bu hızlı başlangıç, kaynaktan bir .NET Core projesi oluşturur. Kapsayıcı görüntüleri oluştururken, kapsayıcı görüntüsüne yalnızca üretim yükünü ve bağımlılıklarını eklemek iyi bir uygulamadır. .NET Core SDK'sının son görüntümüze eklenmesini istemiyoruz çünkü yalnızca .NET core çalışma zamanına ihtiyacımız var, bu nedenle dockerfile, uygulamayı derlemek için build-env adlı SDK ile paketlenmiş geçici bir kapsayıcı kullanacak şekilde yazılır.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

Uygulamamız ASP.NET olduğundan, bu çalışma zamanının dahil olduğu bir görüntü belirtiriz. Ardından geçici kapsayıcımızın çıkış dizinindeki tüm dosyaları son kapsayıcımıza kopyalarız. Kapsayıcımızı, kapsayıcı başlatıldığında giriş noktası olarak yeni uygulamamızla çalışacak şekilde yapılandırıyoruz

çok aşamalı derlemegerçekleştirmek için dockerfile dosyasını yazdık. Dockerfile yürütülürken, örnek uygulamayı derlemek için .NET core 2.1 SDK'sı ile build-envgeçici kapsayıcısını kullanır ve ardından çıktısı alınan ikili dosyaları yalnızca .NET Core 2.1 çalışma zamanını içeren başka bir kapsayıcıya kopyalayarak son kapsayıcının boyutunu en aza indirdik.

Uygulamayı derleme ve çalıştırma

Dockerfile yazıldığında, Docker'a Dockerfile'ımızı gösterip imajımızı derleyip çalıştırmasını söyleyebiliriz.

  1. Komut istemi penceresinde dockerfile dosyasının bulunduğu dizine gidin ve dockerfile dosyasından kapsayıcıyı oluşturmak için docker build komutunu çalıştırın.

    docker build -t my-asp-app .
    
  2. Yeni oluşturulan kapsayıcıyı çalıştırmak için docker run komutunu çalıştırın.

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

    Bu komutu inceleyelim.

    • -d Docker'a kapsayıcıyı 'ayrılmış' olarak çalıştırmasını söyler, yani kapsayıcının içindeki konsola hiçbir konsol bağlanmaz. Kapsayıcı arka planda çalışır.
    • -p 5000:80 Docker'a konaktaki 5000 numaralı bağlantı noktasını kapsayıcıdaki 80 numaralı bağlantı noktasına eşlemesini söyler. Her kapsayıcı kendi IP adresine sahip olur. ASP .NET varsayılan olarak 80 numaralı bağlantı noktasında dinler. Bağlantı noktası eşlemesi, eşlenen bağlantı noktasında konağın IP adresine gitmemize olanak tanır ve Docker tüm trafiği kapsayıcının içindeki hedef bağlantı noktasına iletir.
    • --name myapp Docker'a bu kapsayıcıya sorgu için uygun bir ad vermesini söyler (Docker tarafından çalışma zamanında atanan kapsayıcı kimliğini aramak zorunda kalmak yerine).
    • docker'ın çalıştırmasını istediğimiz görüntü my-asp-app. Bu, docker build işleminin doruk noktası olarak üretilen kapsayıcı görüntüsüdür.
  3. Kapsayıcılı uygulamanızı görmek için bir web tarayıcısı açın ve http://localhost:5000'a gidin.

    localhost'ta bir kapsayıcıdan çalışan ASP.NET Core web sayfası

Sonraki adımlar

  1. Sonraki adım, Azure Container Registry kullanarak kapsayıcılı ASP.NET web uygulamanızı özel bir kayıt defterinde yayımlamaktır. Bu, kuruluşunuzda dağıtmanıza olanak tanır.

    Kapsayıcı görüntünüzü kayıt defterine göndermekbölümüne gittiğinizde, kapsayıcı kayıt defterinizle birlikte yeni paketlediğiniz ASP.NET uygulamasının adını (my-asp-app) belirtin (örneğin: contoso-container-registry):

    docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
    

    Diğer uygulama örneklerini ve ilişkili dockerfile'larını görmek için ek kapsayıcı örnekleri 'a bakın.

  2. Uygulamanızı kapsayıcı kayıt defterinde yayımladıktan sonraki adım, uygulamayı Azure Kubernetes Service ile oluşturduğunuz bir Kubernetes kümesine dağıtmaktır.