Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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.
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.)
Depoyu geçerli çalışma dizininize kopyalayın:
git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.gitVirtualization-Documentation\windows-container-samples\asp-net-getting-startedaltı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.
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 .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-appBu komutu inceleyelim.
-
-dDocker'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:80Docker'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 myappDocker'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 buildişleminin doruk noktası olarak üretilen kapsayıcı görüntüsüdür.
-
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

Sonraki adımlar
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.
Özel kapsayıcı kayıt defteri oluşturma
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:v1Diğer uygulama örneklerini ve ilişkili dockerfile'larını görmek için ek kapsayıcı örnekleri 'a bakın.
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.