Herkese merhaba, sitemin temasını değiştirdim ve bir kaç bileşen eklemesi yaptım. Bri şeyi fark ettim, bir kaç yıldır blog yazıyorum fakat bloğumda arşiv kısmına baktığımda bir kaç ay hariç geri kalan aylarda neredeyse sadece bir adet yazı paylaşmışım. Düşünüyorum; ayda bir yazıdan fazla blog yazmış olmam gerekiyor. Ama gerçekte öyle değilmiş. Neyse, bu durum bloğun üzerinde daha fazla yoğunlaşmam gerektiğini bana güzel bir şekilde hatırlattı. Artık haftada en az bir yazı paylaşmayı planlıyorum. Hadi o zaman konumuza dönelim.

Docker nedir ?

Aslında docker yeni çıkan bir teknoloji değil. Yıllardır var olan bir sistem. Ve uygulama geliştiricilere ya da biraz daha uygulama altyapılarını bilen kullanıcılar için uygulamaları her platformda sorunsuz bir şekilde çalıştırmalarını sağlayan bir yapıya sahip.

Peki nedir bu docker ? Docker en sade haliyle bir sanal makine olarak tanımlayabiliriz. Sanal makine üzerine kuracağınız herhangi bir uygulama, işletim sisteminizden bağımsız olarak çalışır ve uygulama bağımlıklarını içinde barındırır. Böylece işletim sisteminizden izole bir şekilde istenidiğiniz her türlü uygulamayı kurabilir ve çalıştırabilirsiniz. İlerleyen bölümlerde daha detaylı anlatımını yapacağım.

Linux işletim sistemi üzerinden örnekle konuyu biraz daha açalım.

Şimdi python ile bir uygulama geliştireceğimizi düşünelim. Bu uygulamayı geliştirirken yapmak istediğimiz işleme göre üçüncü parti modüller kullanmamız gerekebilir. Bunlar birer bağımlılıktır. Bu bağımlılıklar sistemimizde olmak zorunda. Eğer bu bağımlılıkları işletim sistemine yüklemezsek uygulama geliştiremeyiz. Bağımlılıkları sağladık ve uygulumamızı tamamladık. Harika bir şekilde çalışıyor, tam istediğimiz gibi. Şimdi bu uygulamayı bir arkadaşımız ile paylaşmak istedik ve uygulama kodlarını arkadaşımıza gönderdik, arkadaşımızda linux işletim sistemine sahip olduğunu varsayıyoruz. Arkadaşımız bu kodları aldı ve uygulamamızın çalışması için gerekli olan bağımlılıkları yüklemeden uygulamayı çalıştırmaya kalktı. Böyle bir durumda yazdığımız uygulama çalışmayacaktır. Arkadaşımızda bağımlılıkları yüklemek zorunda olacaktır. Arkadaşımız uygulamanın çalışması için gerekli olan bağımlılıkları gördü ve bunları yüklemeden uygulamanın çalışmayacağını anladı, böylece yazdığımız uygulamanın bağımlılıklarını yüklemek için internette araştırma yapmaya başladı ve gerekli bağımlılıkları bularak yükledi, bunun için bir süre araştırma yapması ve vakit harcaması gerekti. Şimdi uygulamayı tekrar çalıştırmak istediğinde farklı bir hata ile karşılaştı ve uygulamayı çalıştıramadı. Bunun üzerine internette biraz daha araştırma yaptı ve sorunun kullandığı işletim sistemi üzerinde, çalıştırmak istediği uygulamanın bağımlılıklarıyla olan problemi gördü. Ve uygulamayı çalıştırmaktan vazgeçti.

Böyle bir senaryoda kendimizi arkadaşımızın yeirne koyabiliriz. Bu gerçekten insanı çileden çıkartan bir durum. Bunun gibi bir çok senaryo ile karşılaşılabilir.

Kendimden bir örnek vermek istiyorum. Python ile telegram üzerinden mesaj gönderen bir uygulama yazdım. Uygulamanın amacı upwork üzerinden filitrelediğim işleri almak ve bu işleri veritabanına kayıt etmek. Sonrasında belirlediğim aralıkta bana telegram üzerinden göndermek. Bu uygulama sorunsuz bir şekilde bilgisayarımda çalıştı fakar bu uygulamanın işlevini yerine getirmesi için sürekli aktif olarak çalışması gerekiyor. Bunun için bir sunucuya bu uygulumayı göndermem ve orada çalıştırmam gerekiyor. Bunun için pythonanywhere üzerinde bir hesap açarak uygulamayı orada çalıştırmaya başladım. Uygulamanın bağımlılıklarını yüklemek istediğimde bir çok hata ile karşılaştım ve bunu çözmek için gerçekten forum sitelerinde ciddi süreler harcadım.

Bir örnekle daha devam edelim; bu yazdıklarım dışında uygulamanızı farklı platformlar üzerinde test etmek isteyebilirsiniz. Performans olarak ya da daha farklı amaçlar için. Böyle bir durumda test etmek istediğiniz işletim sistemini bilgisayarınıza kurmanız ve ardında uygulamanızı yükleyerek test etme işlemini gerçekleştirmeniz gerekir. Bu da haddinden fazla zaman ve enerji harcamanıza sebep olur.

İşte bu uzun uzun yazdıklarımın ve aklıma gelmeyen daha bir çok sebepten ötürü docker kullanarak uygulamalarınızı hızla derleyebilirsiniz, test edebilirsiniz ve dağıtabilirsiniz.

 Docker yapısı

Dockerı kısaca sanal makine olarak adlandırmıştık. Şimdi konuyu biraz daha açalım ve nasıl bir yapı olduğuna bakalım.

Docker; yazılımları gerekli olan tüm işlevleri ile birlikte “container” adı verilen standartlaştırılmış birimler halinde paketler. Bu paketleri istediğiniz bir zamanda, istediğiniz uygulamarı içine atarak oluşturabilirsiniz. Oluşturmuş olduğunuz bu paketere imaj adı verilir.

Başıma gelen olayı şimdi docker ile incelersek eğer; ben uygulamamı docker ile imaj haline getirmiş olsaydım, yazmış olduğum tüm bağımlılıklar bu imajın içine olacaktı ve ben bu imajı istediğim herhangi bir sunucuya göndererek uygulamamı, göndermiş olduğum sunucunun işletim sisteminden bağımsız olarak çalıştıracaktım. Böylece işletim sistemi farklılıklarından kaynaklanan sorunlar için vakit harcamam gerekmeyecekti.

Docker oluşturulan bu imajları çalıştırmayı sağlar. Bu imajları istediğiniz gibi oluşturabilirsiniz. Örnek vermek gerekirse; ben python ile bir uygulama geliştirdim ve sadee python kullanmak istiyorum. Böyle bir durumda içinde python yorumlayıcısı ve ihtiyacımız olan programın kendisi ve bunun yanında uygulama için için gerekli olan bağımlılıklar olması yeterli. Başka hergangi bir uygulamaya ihtiyacımız yok. Tüm bu değişkenleri “Docker file” adı verilen bir metin dosyası içine yazarak imajı oluştururuz ve kullanmaya başlarız. Her uygulama için bir docker imajı oluşturulabilir. Herhangi bir sınır bulunmuyor. Bunun yanında başka insanların oluşturmuş olduğu docker imajlarını indirerek bunları da kullanabiliriz. Bunun için oluşturulmuş bir web siteside mevcut. Bu web sitesinde ihtiyacımıza göre bir başkası tarafından oluşturulmuş docker imajını indirerek kullanabiliriz. Ya da kendi oluşturduğumuz imajı bu siteye göndererek başkalarının kullanmasını sağlayabiliriz.

Oluşturulan bu docker imajlarını çalıştırabilmemiz için sistemimizde docker kurulu olması gerekiyor. Docker kurulumu için kendi sitesi üzerindeki yöngergeleri takip edebilirsiniz.

Docker ile neler yapılır ?

Bunu da örneklerle açıklamaya çalışacağım. Hiç programlama bilginiz olmadığını varsayıyorum. Bir uygulama kodu buldunuz ve bunu denemek istiyorsunuz fakat uygulamayı denemek için bir çok bağımlılık istiyor. İşletim sisteminize bilmediğiniz uygulama ve bağımlılıkları kurmak istemiyorsunuz. Bunun için kullanmak istediğiniz uygulamayı docker ile imaj haline getirererk işletim sisteminizden bağımsız bir halde çalışmasını ve vereceği sonucu görmesini sağlayabilirsiniz.

Bir başka örnek; bir uygulama buldunuz ve sadece linux işletim sistemi içinde çalışıyor. Siz windows kullanıyorsunuz. Bu uygulamayı windows üzerinde çalıştırmak için uygulama üzerinde değişiklik yapmanız gerekiyor. Bu konuda herhangi bir fikriniz yok. Böyle bir durumda bir docker imajı oluşturararak içerine linux ve istediğiniz uygulamayı atarak bir imaj oluşturursunuz ve bu imajı windows üzerinde çalıştırırsanız eğer sorunsuz bir şekilde kullanabilirsiniz.

Son verdiğim örneği kullanmıştım. Fiverr üzerinden bir müşteri ile konuştum ve bir uygulama yapmamı istemişti, uygulamayı tamamladım ve çalışan halini bir video çekerek gösterdim. Beğendi ve uygulamayı göndermemi istedi. Uygulamayı gönderdim. Uygulamanın kendi bilgisayarında bir hata verdiğini söyledi. Ben linux kullanıyorum kendisi windows üzerinde bu uygulamayı kullanmak istiyordu. Yukarda verdiğim örneklerdeki gibi işletim sisteminden kaynaklı olarak hatalar ortaya çıktı. Sonrasında docker kullanarak yazdığım uygulamayı imaj haline getirip gönderdim. Müşterinin tek yapması gereken imajı indirmek ve çalıştırmak. İmajın içinde uygulamanın ototmatik olarak çalışması için gerekli ayarları yapmıştım. Müşteri sadece imajı indiirp çalıştırdı ve istediği uygulamayı sorunsuz bir şekilde kullandı.


Aslında docker öyle bir blog yazısı ile anlatılacak bir konu değil. Docker için imaj nasıl oluşturulur, oluşturulan imajın içinde ne gibi işlemler yapılır, imaj oluşturmak için kullanılan “Docker file” nasıl hazırlanır gibi bir sürü konu mevcut. Ben sadece bu konuyu hiç bilmeyenler için örnekler vererek basit hale indirgemek istedim. Umarım hiç bilmeyenler için aydınlatıcı olmuştur. Bir sonraki yazımda görüşmek dileğiyle…

Artık her hafta pazartesi günü bir blog yazısı yayınlamayı düşünüyorum, bu da ilk yazım olsun


Bir Cevap Yazın

Social profiles