Asp.Net Core Uygulaması Docker’da Deploy Etme İşlemi(Dockerize an ASP.NET Core Application)

Burak Coşkun
Devops Türkiye☁️ 🐧 🐳 ☸️
5 min readJul 21, 2019

Bu makalede sizlere VS Code üzerinde ASP.NET Core MVC uygulaması oluşturup kurmayı ve uygulamanızı Docker’a nasıl deploy edeceğinizi göstereceğim.

Docker’ın ne olduğunu açıklamadan önce bir sorundan bahsetmek istiyorum, çünkü o zaman bu sorunu nasıl çözeceğimizi ve docker kullanımının bizim yani geliştiriciler için neden önemli olduğunu anlayacağız.

Bir uygulama geliştirmeniz gerektiğini ve onu kimlerin kullanacağını veya nerede host edileceğini bilmediğinizi varsayalım.

Hepimizin bildiği gibi farklı işletim sistemlerinde çalıştırılabilecek farklı uygulamalar vardır. Çoğu popüler işletim sisteminin kodunu derleyebilir ve sorunları çözebilirsiniz. Fakat değişiklik yapmak istediğinizde farklı platformlar için hepsini tekrar derlemeniz gerekecek ve bu uygulamaların bakımı ileride büyük bir problem olacaktır.

Çözüm:

Uygulamaların kendisini ve bağımlılıklarını bir container a koyabilirsiniz. İşletim sistemi container ı destekliyorsa ve bu container ın ne içerdiği önemli değildir ve uygulamalarınız çalışacaktır.

Biz, sadece tek bir işletim sistemi üzerinde birden fazla container ın içinde bulunduğu, birbirinden bağımsız uygulamaların çalışabildiği bir ortam kuracağız. Bu da tam olarak docker ın tanımı oluyor.

Docker Nedir?

Docker, container ların oluşturulmasını ve kullanılmasını sağlayan bir teknolojidir. Temel olarak, geliştiricilerin ve sistem yöneticilerinin uygulamalarını ana işletim sisteminde( Linux, Windows Server gibi) çalıştırmak için (container larda) kolayca deploy edebilmelerini sağlayan bir araçtır.

“Sanal Makineler ve Docker container’ları aynı mıdır? İkisi de aynısını yapar..” diye düşünebilirsiniz.

Cevap: Hayır..

Sanal Makineler ve Docker Container ları aynı sorunu çözmek için kullanılan araçlardır, fakat farklı teknikler kullanırlar.

Bunu anlatmadan önce kısaca sanallaştırma(virtualization) dan bahsetmek istiyorum.

Sanallaştırma, farklı özellikte olan birden fazla bilgisayarın(sanal makine) aynı işlevi yapan tek bir fiziksel bilgisayarda çalıştırılır ve bu bilgisayardaki hypervisor yazılımı ile kaynakların yönetilmesi ve paylaşılması sağlanır.

Klasik Sunucu ve Sanal Sunucu Karşılaştırması

Hypervisor sayesinde, makinanızda birden fazla işletim sistemi barındıran makina var ve kaynakları verimli kullanıyorsunuz.

Docker bu görevi tamamen yeni ve farklı bir şekilde yapmaktadır.

Sol tarafta hypervisor ün kullanıldığı klasik sanallaştırma teknolojisi — Sağ tarafta docker teknolojisi

Buradaki temel farklılıklar Docker’ın temel sistemin ve kaynakların daha verimli kullanılmasıdır. VM’ler, uygulamalar için tam işlem yalıtımı sağlama konusunda harikadır, ancak bu yalıtmanın maliyeti oldukça yüksektir.

ASP.NET MVC Uygulamasını VS Code üzerinden oluşturmak

MVC hakkında genel bilginiz olduğunu düşünerek(MVC hakkında bilgi), .NET Core platformunu kullanarak bir MVC uygulaması oluşturacağız.

Terminalimizi açalım ve başlayalım.

mkdir AspNetCore-Docker
cd AspNetCore-Docker
mkdir src
cd src
mkdir AspMVC
cd AspMVC

Bir üstteki komut ile AspMVC dizini içine girdikten sonra aşağıdaki adımları izleyeceğiz:

Yeni bir MVC projesi oluşturduktan sonra Visual Studio kod editörü ile uygulama dizinimizi açacağız. Aşağıdaki komut çalıştırılarak MVC projemiz oluşturulur.

dotnet new mvc

Uygulamamızın açıldığını gördükten sonra Terminalde “dotnet restore” yazıyoruz. (İlgili projenin bağımlılıkları restore eder(yeniler)).

Sonraki aşamada ise “dotnet publish -o ./publish” yazılarak, uygulama ve bağımlılıkları bir klasörde paketlenerek hosting edilmeye hazır hale gelmiş olur. (Şimdi, uygulamanız herhangi bir yerde (veya neredeyse her yerde) çalışmaya hazırdır.) publish klasörüne gittiğinizde ve içeriğine baktığınızda aşağıdaki dosyaları göreceksiniz.

Publish dizini içeriği

Bu dizin içerisindeyken “dotnet AspMVC.dll” komutunu çalıştırdığınızda, uygulamamız şu anda 5000 portunda çalışıyor ve bu portu dinliyor, bu yüzden tarayıcıyı açıp http:// localhost:5000 yazdığınızda uygulamamız çalışacaktır.

Örnek ASP.NET MVC Uygulaması

Gördüğünüz gibi, ASP.NET MVC uygulamasını .NET Core ile oluşturmak gayet kolay.

Dockerizing the App(Uygulamamızı Docker Teknolojisi ile Container da Yayınlamak)

Uygulamayı oluşturduktan sonra, imajını alıp bir container a koyacağız. Şimdi uygulamamızı herhangi bir yerde çalıştırmak için gereken talimatları içeren bir Docker dosyasını oluşturmamız gerekiyor.

Docker ın resmi sitesinden ayrıntılı bilgilere ulaşmak için buraya tıklayabilirsiniz.

Şimdi docker dosyamızı oluşturalım.

Terminale aşağıdaki komut yazılarak root dizinde olduğumuzdan emin olmalıyız. ( AspNetCore-Docker dizininde)

cd ../../..

Bu dizine geldiğimizde uzantısı olmayan Dockerfile adında dosya oluşturulur.

  • FROM microsoft/aspnetcore:2.1 → hangi docker image’i kullanılacağını belirttiğimiz komut. Bu projemizde dotnetcore 2.2 SDK image’ini kullanacağız.
  • WORKDIR image içerisinde working directory olarak kullanacağımız yeri belirttiğimiz komut. Bu projemizde working directory olarak /app kullanacağız.
  • COPY proje dosyalarını local file system’dan image’e kopyalamak için kullanılan komuttur.
  • ENTRYPOINT → container ayağa kaldırılırken ilk olarak çalışacak olan komut ve parametreleri belirttiğimiz komuttur. Container run edilirken dotnet komutuyla
  • AspMVC.dll’ i execute edilecektir.

Dockerfile’iniz bu şekilde görünmelidir..

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS baseWORKDIR /appCOPY ./src/AspMVC/publish .ENTRYPOINT [“dotnet”, “AspMVC.dll”]

Docker dosyamız hazır, geriye kalan tek şey imajımızı oluşturmak.

O zaman başlıyoruz! 👊

Terminalinizde root dizine(Dockerfile ın bulunduğu) AspNetCore-Docker klasörüne gelin ve aşağıdaki komutu çalıştırın:

docker build -t myimage .

Bu komut ile docker a imajını oluştur demiş olacağız.

Image’i oluşturabilmesi için gerekli olan dependency’leri download ediyor..

İndirme işlemi tamamlandıktan sonra aşağıdaki komutu çalıştırdığınızda containerdaki çalışan(Up durumda olan) imaj larınızın listelendiğini görebilirsiniz.

docker container ls -a
Imaj

Aşağıdaki komutu çalıştırarak, imajı çalıştır ve container da 5000 portu üzerinden yayınlayarak host et diyoruz.

docker run -p 5000:80 myimage

Imajı Test Et

http://localhost:5000/ adresine gittiğinizde uygulamamızın container içerisinde çalıştığını göreceksiniz.

Makalemi beğendiyseniz alkışlamanız beni mutlu edecek.. :)

Yeni yazılarımdan haberdar olmak için beni twitter, linkedin veya medium hesaplarımdan takip edebilirsiniz.

Makalede aklınıza takılan, net olmayan veya belirtmek istediğin bir şey varsa aşağıdaki yorum kısmına yazabilirsiniz. Faydası olması dileğiyle..

--

--