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

Mevcut .NET Framework tabanlı bir uygulamayı 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şturur ve kapsayıcıyı başlatırsınız. 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.

Var olan 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ın taşınması ş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, bu öğreticinin ilerleyen bölümlerinde hedef görüntünüze kopyaladığınız tüm varlıkları tek bir dizin ağacına yerleştirir.

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.

Dosya Sistemine Bağlantı

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ü derleme yönergelerini 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 üzerinde bulunan görüntüyü temel alan microsoft/aspnet bir görüntü oluşturacaksınız. Temel görüntü olan microsoft/aspnet, bir Windows Server görüntüsüdür. Windows Server Core, IIS ve ASP.NET 4.7.2'yi 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 `microsoft/aspnet` image.

FROM microsoft/aspnet

# 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ılırken, IIS işlemi aspnet temel görüntüsünde başlatacak şekilde yapılandırılmış giriş noktasıdır.

ASP.NET uygulamanızı çalıştıran görüntüyü oluşturmak için Docker build komutunu çalıştırın. 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 dosyanızdaki yönergeleri kullanarak görüntüyü mvcrandomanswers olarak adlandırarak (-t etiketleme) yeni görüntüyü oluşturur. Bu, temel görüntüyü Docker Hub ç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ını 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. Tarayıcınıza bu URL'yi yazdığınızda, çalışan siteyi görmeniz gerekir.

Not

Bazı VPN veya ara sunucu 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, sizin için bu komutları 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