ASP.Net Core Uygulaması için Docker İmajı Hazırlamak

Önceki makalelerle birlikte Docker konseptlerine ve kullanımına aşina olduğunuzu umuyorum. Bu makalemde konuyu bir adım öteye götürerek geliştirdiğimiz bir ASP.Net Core uygulamasını nasıl bir Docker imajına dönüştürebileceğimizi ve bir Container içerisinde Docker’da nasıl çalıştırabileceğimizi anlatacağım.

Sürecin tüm adımlarını görebilmeniz için makalemde sıfırdan başlayacağım. Geliştirme ortamı olarak pek çok .Net geliştiricisinin alışkın olduğu Windows ve Visual Studio’dan da biraz uzaklaşalım. Her ne kadar ilerleyen makalelerde bunları kullanacak olsam da, şimdilik Mac OS ortamında çalışacağım. Bu ortamdaki en önemli yardımcılarım Visual Studio Code ve bir grup komut satırı aracı olacak. Dolayısıyla öncelikle Visual Studio Code, Docker for Mac ve .Net Core kurulumlarınızı gerçekleştirmiş olduğunuza emin olmalısınız. .Net Core RC sürümleri bilgisayarınızda kurulu ise öncelikle bu script yardımıyla kaldırdığınıza emin olun.

Oluşturacağımız Docker dosyalarını düzenlemekte yardımcı olması için Visual Studio için Docker desteği eklentisini kurmanızı tavsiye ederim;

ext install vscode-docker

vs-code-docker-eklentisi

Makalemin devamında kritik yerlerde kullanacağımız ve hayatımızı kolaylaştıracak olan diğer bir araçta Yeoman olacak. Modern web uygulamaları için platform bağımsız şablon desteği almamızı sağlan bu açık kaynak kodlu proje için öncelikle Node.js’i bilgisayarımıza kurmalıyız. Bu kurulum sonrasında aşağıdaki komutu kullanarak Node paket yöneticisi yardımıyla Yeoman’ı sistemimize kurabiliriz;

npm install -g yo bower grunt-cli gulp

Dikkat ederseniz Yeoman kurulumu (yo) dışında bower, grunt ve gulp gibi ihtiyacımız olan diğer kurulumları da aynı komut satırında gerçekleştirdik.

Bir sonraki adımımız Yeoman’da ASP.Net Core uygulaması oluşturabilmek için gerekli olan generator-aspnet paketimizi kurmakta;

npm install -g generator-aspnet

Projemiz için bir klasör oluşturarak içerisine gidelim;

mkdir enteprisecoding-docker-sample
cd enteprisecoding-docker-sample/

Yeoman yardımıyla bir ASP.Net Core projesi oluşturalım;

yo aspnet

"yo aspnet" komutu ile Yeoman Asp.Net şablon üreticisini başlatabilirsiniz

Uygulama türü olarak  Web Application Basic [without Membership and Authorization] seçelim ve enter ile devam edelim.

yo-aspnet-ui

Arayüz için tercih ettiğimiz framework’ü seçelim.

yo-aspnet-app-name

Uygulamamıza bir isim verelim (örneğin; EnterprisecodingDockerApp)

yo-aspnet-sonuc

Yeoman Asp.Net generator bizim için proje dosyalarını oluşturacaktır. Projemizin bağımlılıklarını yükleme için az önce oluşturulan EnterprisecodingDockerApp klasörüne giderek aşağıdaki komutu kullanabilirsiniz;

 
cd EnterprisecodingDockerApp/
dotnet restore

Ardından projemizi aşağıdaki komutla çalıştırabiliriz;

dotnet run

dotnet-run

Tarayıcıdan http://localhost:5000 adresini ziyaret ederek uygulamamızın çalıştığını teyit edebiliriz;

uygulama-ana-sayfasi

Komut satırına geri dönerek kntrl + c tuşu yardımıyla uygulamamızı durduralım.

Projemizi Visual Studio Code içerisinde ilk defa açtığımızda gerekli bileşenlerin eklenmesi gerektiği hatırlatılarak izin vermemiz istenecektir. Yes diyerek izin verelim;

assets

Projemiz Visual Studio Code içerisinde aşağıdaki şekilde görülecektir;

vs-code-projemiz

Projemiz hazır olduğuna göre sıra geldi Docker imajı oluşturmaya. Bunun için ihtiyacımız olan tanımlama dosyaları Yeoman ile oluşturduğumuz projemize çoktan eklenmiş durumda. Projemizde yer alan Dockerfile ihtiyacımız olan tanımlamaları barındırmakta;

vs-code-dockerfile

Dockerfile, bir Docker imajı oluşturulurken başvurulan tanımlama dosyasıdır. Kendine has bir DSL’i olan bu dosyada imaj kalıtımı, gerekli dosyaların imaja atılması, container başlatılırken yapılması gerekenler v.b. tanımları yapabilirsiniz.

Yukarıda gördüğünüz gibi bizim tanımlamamızda öncelik Docker imajımızın Microsoft tarafından hazırlanan dotnet imajının en güncel sürümünden kalıtılacağı belirtilmekte. devamında mevcut klasör içerisiğini imaj içerisinde app klasörü altına atılması gerektiği söylenmekte.  Imaj oluşturulurken dotnet restore ve build işlemlerinin yapılması gerektiği ve container’ın tcp 5000 portunu kullanacağı belirtiliyor. Son olarak da uygulamanın nasıl başlatılacağı anlatılmakta.

Dockerfile dosyamız en basit haliyle dotnet barındıran, 5000 portundan bir web uygulaması sunan bir imaj olacak. Docker imaj dosyasını oluşturmak için komut satırında projemizin bulunduğu klasöre geçerek aşağıdaki komutu çalıştırmanız yeterli olacaktır;

docker build -t enterprisecoding-docker-app .

docker-build

Successfully built satırıyla sonlanan bu komut ile birlikte docker imajımız oluşturulmuş durumda. Aşağıdaki komut yardımıyla çalıştırabiliriz;

docker run -it -p 5000:5000 enterprisecoding-docker-app

docker-run

Dockerfile içerisinde sadece uygulamanın açacağı portu belirttiğimiz için yukarıdaki mesajı inceleyecek olursanız sunulan ip adresi olarak 0.0.0.0 değeri yer almakta. Uygulamamız karşılanan tüm ip adresleri üzerinden sunulmakta. Tarayıcıdan daha önce olduğu gibi yine http://localhost:5000 adresini yazarak uygulamayı kullanabilirsiniz.

docker-kitematic

Bilgisayarınızda Kitematic uygulaması kurulu ise az önce oluşturduğumuz Docker imajının bir container içinde çalıştığı buradan görebilir, uygulama loglarını ve web ekranını takip edebilirsiniz.

Tebrik ederim, az önce ilk Asp.Net Core uygulamanızı bir Docker Container’ı içerisinde sundunuz!

Burada dikkat etmeniz gerekli bir kaç konu var. Dikkatinizden kaçmış olabileceğini düşünerek bir daha altını çizmek istiyorum. Dockerfile dosyamıza geri dönecek olursak, uygulama ana klasörümüzdeki tüm dosyaların imaj içerisindeki app klasörüne atılmasını ve ardından bir restore ve build işlemi yapılmasını istemiştik. Bunun anlamı, bu haliyle uygulama kodlarımız oluşturduğumuz imajın içerisinde yer alıyor. Bir sonraki makalemde bir kaç ek adım ve yapılandırmayla nasıl imajımızda sadece çalışan uygulamamızı atabileceğimizi sizlerle paylaşacağım.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

1 Yorum

  1. Mustafa Torun   •  

    Dostum merak ettiğim bir çok konu bu makalende var, sağol.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir