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:
- Bir görüntünün varlıklarını oluşturmak için yayımlama görevi oluşturma.
- Uygulamanızı çalıştıracak bir Docker görüntüsü oluşturma.
- Görüntünüzü çalıştıran bir Docker kapsayıcısı başlatma.
- 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:
- Windows 10 Yıldönümü Güncelleştirmesi (veya üzeri) veya Windows Server 2016 (veya üzeri)
- Windows için Docker - sürüm Kararlı 1.13.0 veya 1.12 Beta 26 (veya daha yeni sürümler)
- Visual Studio 2017
Ö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:
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ı
- Visual Studio'da web projesine sağ tıklayın ve Yayımla'yı seçin.
- Özel profil düğmesine tıklayın ve ardından yöntem olarak Dosya Sistemi'ni seçin.
- Dizini seçin. Kural gereği, indirilen örnek kullanır
bin\Release\PublishOutput
.
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ı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