ASP.NET MVC Uygulamalarını Windows Kapsayıcılarına Geçirme

Mevcut .NET Framework tabanlı bir uygulamayı bir Windows kapsayıcısında çalıştırmak için uygulamanızda herhangi bir değişiklik yapılması gerekmez. Uygulamanızı bir Windows kapsayıcısında çalıştırmak için uygulamanızı içeren bir Docker görüntüsü oluşturup kapsayıcıyı başlatın. Bu konuda, mevcut bir ASP.NET MVC uygulamasının nasıl alınıp bir Windows kapsayıcısında dağıtılacağı açıklanmaktadır.

Mevcut bir ASP.NET MVC uygulamasıyla başlarsınız, ardından yayımlanan varlıkları Visual Studio kullanarak oluşturursunuz. Uygulamanızı içeren ve çalıştıran görüntüyü oluşturmak için Docker kullanırsınız. Bir Windows kapsayıcısında çalışan siteye göz atacak ve uygulamanın çalıştığını doğrulayacaksınız.

Bu makale Docker hakkında temel bir anlayışınızın olduğunu varsayar. Docker’a Genel Bakış makalesini okuyarak Docker hakkında bilgi edinebilirsiniz.

Kapsayıcıda çalıştırabileceğiniz uygulama, soruları rastgele yanıtlayan basit bir web sitesidir. Bu uygulama, kimlik doğrulaması veya veritabanı depolama alanı olmayan temel bir MVC uygulamasıdır; web katmanını bir kapsayıcıya taşımaya odaklanmanızı sağlar. Gelecekteki konular, kapsayıcılı uygulamalarda kalıcı depolamanın nasıl taşınacağını ve yönetileceğini gösterir.

Uygulamanızı taşımak şu adımları içerir:

  1. Bir görüntünün varlıklarını oluşturmak için yayımlama görevi oluşturma.
  2. Uygulamanızı çalıştıracak bir Docker görüntüsü oluşturma.
  3. Görüntünüzü çalıştıran bir Docker kapsayıcısı başlatma.
  4. Tarayıcınızı kullanarak uygulamayı doğrulama.

Tamamlanmış uygulama GitHub'dadır.

Önkoşullar

Geliştirme makinesi aşağıdaki yazılıma sahip olmalıdır:

Önemli

Windows Server 2016 kullanıyorsanız Kapsayıcı Ana Bilgisayarı Dağıtımı - Windows Server yönergelerini izleyin.

Docker’ı yükleyip başlattıktan sonra tepsi simgesine sağ tıklayıp Windows kapsayıcılarına geç öğesini seçin. Bu işlem, Windows temelinde Docker görüntülerini çalıştırmak için gereklidir. Bu komutun yürütülmesi birkaç saniye sürer:

Windows Kapsayıcısı

Betiği yayımlama

Bir Docker görüntüsüne yüklemeniz gereken tüm varlıkları tek bir yerde toplayın. Uygulamanız için bir yayımlama profili oluşturmak için Visual Studio Yayımla komutunu kullanabilirsiniz. Bu profil, tüm varlıkları bu öğreticinin devamında hedef görüntünüze kopyaladığınız bir dizin ağacına yerleştirecektir.

Yayımlama Adımları

  1. Visual Studio'da web projesine sağ tıklayın ve Yayımla'yı seçin.
  2. Özel profil düğmesine tıklayın ve ardından yöntem olarak Dosya Sistemi'ni seçin.
  3. Dizini seçin. Kural gereği, indirilen örnek kullanır bin\Release\PublishOutput.

Bağlantıyı Yayımla

Ayarlar sekmesinin Dosya Yayımlama Seçenekleri bölümünü açın. Yayımlama sırasında ön derleme'yi seçin. Bu iyileştirme, Docker kapsayıcısında görünümleri derlediğiniz ve önceden derlenmiş görünümleri kopyaladığınız anlamına gelir.

Yayımlama Ayarları

Yayımla'ya tıkladığınızda Visual Studio tüm gerekli varlıkları hedef klasöre kopyalar.

Görüntü oluşturma

Docker görüntünüzü tanımlamak için Dockerfile adlı yeni bir dosya oluşturun. Dockerfile , son görüntüyü oluşturmaya yönelik yönergeler içerir ve temel görüntü adlarını, gerekli bileşenleri, çalıştırmak istediğiniz uygulamayı ve diğer yapılandırma görüntülerini içerir. Dockerfile , görüntüyü oluşturan komutun girişidir docker build .

Bu alıştırmada Docker Hub'da bulunan görüntüyü temel alan microsoft/aspnet bir görüntü oluşturacaksınız. Temel görüntü olan mcr.microsoft.com/dotnet/framework/aspnet:4.8, bir Windows Server görüntüsüdür. Windows Server Core, IIS ve ASP.NET 4.8 içerir. Bu görüntüyü kapsayıcınızda çalıştırdığınızda, IIS ve yüklü web siteleri otomatik olarak başlatılır.

Görüntünüzü oluşturan Dockerfile şöyle görünür:

# The `FROM` instruction specifies the base image. You are
# extending the `mcr.microsoft.com/dotnet/framework/aspnet:4.8` image.

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8

# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot

Bu Dockerfile içinde bir ENTRYPOINT komutu yoktur. Gerekli değildir. IIS ile Windows Server çalıştırırken, IIS işlemi aspnet temel görüntüsünde başlatacak şekilde yapılandırılmış giriş noktasıdır.

docker build komutunu çalıştırarak ASP.NET uygulamanızı çalıştıran görüntüyü oluşturun. Bunu yapmak için projenizin dizininde bir PowerShell penceresi açın ve çözüm dizinine aşağıdaki komutu yazın:

docker build -t mvcrandomanswers .

Bu komut, Dockerfile'ınızdaki yönergeleri kullanarak yeni görüntüyü oluşturur ve görüntüyü mvcrandomanswers olarak adlandırır (-t etiketleme). Bu, temel görüntüyü Docker Hub'dan çekmeyi ve ardından uygulamanızı bu görüntüye eklemeyi içerebilir.

Bu komut tamamlandıktan sonra yeni görüntüyle docker images ilgili bilgileri görmek için komutunu çalıştırabilirsiniz:

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mvcrandomanswers              latest              86838648aab6        2 minutes ago       10.1 GB

GÖRÜNTÜ kimliği makinenizde farklı olacaktır. Şimdi uygulamayı çalıştıralım.

Bir kapsayıcı başlatma

Aşağıdaki docker run komutu yürüterek bir kapsayıcı başlatın:

docker run -d --name randomanswers mvcrandomanswers

bağımsız değişkeni Docker'a -d görüntüyü ayrılmış modda başlatmasını söyler. Bu, Docker görüntüsünün geçerli kabukla bağlantısının kesildiğini gösterir.

Birçok docker örneğinde kapsayıcı ve konak bağlantı noktalarını eşlemek için -p ifadesini görebilirsiniz. Varsayılan aspnet görüntüsü, kapsayıcıyı 80 numaralı bağlantı noktasında dinleyecek ve kullanıma hazır olacak şekilde yapılandırmıştır.

, --name randomanswers çalışan kapsayıcıya bir ad verir. Çoğu komutta kapsayıcı kimliği yerine bu adı kullanabilirsiniz.

mvcrandomanswers, başlatacak görüntünün adıdır.

Tarayıcıda doğrulama

Kapsayıcı başlatıldıktan sonra, gösterilen örnekte kullanarak http://localhost çalışan kapsayıcıya bağlanın. Bu URL'yi tarayıcınıza yazdığınızda çalışan siteyi görmeniz gerekir.

Not

Bazı VPN veya proxy yazılımları sitenize gezinmenizi engelleyebilir. Kapsayıcınızın çalıştığından emin olmak için geçici olarak devre dışı bırakabilirsiniz.

GitHub'da örnek dizin, bu komutları sizin için yürüten bir PowerShell betiği içerir. Bir PowerShell penceresi açın, dizini çözüm dizininizle değiştirin ve şunu yazın:

./run.ps1

Yukarıdaki komut görüntüyü oluşturur, makinenizdeki görüntülerin listesini görüntüler ve bir kapsayıcı başlatır.

Kapsayıcınızı durdurmak için bir docker stop komut verin:

docker stop randomanswers

Kapsayıcıyı kaldırmak için bir docker rm komut verin:

docker rm randomanswers