Docker Nedir? Yazılımcılar Neden Docker Kullanır?

Docker, yazılım geliştiriciler ve sistemciler için geliştirilen açık kaynaklı bir sanallaştırma platformudur. Docker ile Linux, Windows ve MacOSX üzerinde Linux ve Windows sanal containerler(makineler) çalıştırabilirsiniz. Bu platform sayesinde web sistemlerinin kurulumunu, testini ve dağıtımını kolaylıkla gerçekleştirebilirsiniz. En önemli özelliği belki de “Benim bilgisayarımda çalışıyordu, sunucuda neden çalışmadı acaba?” sorununu ortadan kaldırıyor olması.

Docker, yazılımların kurulmuş halinin imajını (.iso DVD imajı gibi) alıp tekrar kullanılabilir hale getiriyor. İsterseniz bu imajı bir kere oluşturup istediğiniz sunuculara gönderirsiniz, isterseniz her sunucuda sıfırdan imaj oluşturursunuz. Dockerfile adı verilen talimat dosyalarına bakarak her sunucu aynı imajı yeniden inşa edebilir. Bu sayede manuel müdahaleye gerek kalmaz.

 

Bir diğer güzel özelliği ise Dockerfile ve imajların geliştirilebilir olması. Talimatlara birkaç adım daha eklemek isterseniz önceki komutları tekrardan vermek yerine kaldığı en son yerden devam ediyor. Bu da zaman kazandırıyor.

Ne Farkı Var?

Bunu açıklamak için öncelikle var olan durumdan bir örnek üzerinde bahsedelim. Python/Flask ile geliştirdiğimiz bir web uygulamamız olsun.

Bunu Dockersız bir sunucuya kurmamız için gereken adımlar aşağı yukarı şu şekilde:

  • Önce Python, virtualenv, pip gibi araçları kur.
  • Git versiyon kontrol sistemini kur, gerekli depodan kodları çek.
  • virtualenv ile sanal ortam oluştur, bağımlılıkları çek.
  • Django sunucusunu çalıştır.
  • Gerekirse nginx ile reverse proxy ayarı yap.

Veritabanı kurulum ve ayarları varsa işlem daha da uzuyor. Bunları manuel olarak yapmak gerekiyor, bu da her bir kurulum için zorluk demek. Özellikle de çok sayıda bilgisayara aynı kurulum yapılacaksa ve belli aralıklarla güncelleme gerekebiliyorsa bu durum can sıkıcı olabiliyor. Docker da bu noktada imdadımıza yetişiyor. Örnek bir anlatım şurada. Tüm komutları tek bir Dockerfile dosyasına yazıp imaj oluşturup çok sayıda sunucuya bu imajı gönderebiliyoruz. İmajları Docker Hub gibi sitelerde tutabiliyoruz.

Container ve Image Kavramları

Docker, LXC sanallaştırma mekanizması üzerine kurulu. Bir Docker imajı, container denilen birimlerde çalıştırılıyor. Oyunculara rol vermek gibi düşünebiliriz. Her bir container bir süreç (process) kullanıyor. Bir makinada gücüne bağlı olarak binlerce docker containerı birden çalışabiliyor. Container imajları ortak olan sistem dosyalarını paylaşıyorlar. Dolayısıyla disk alanından tasarruf ediliyor. Şekilde görüldüğü gibi uygulama containerları ortak bin (exe) ve kütüphaneleri kullanıyorlar. Ancak klasik sanal makina sistemlerinde (VMWare, VirtualBox vs) her bir uygulama için ayrı işletim sistemi ve kütüphane dosyaları ayrılmak zorunda.

Container dediğimiz mekanizma deniz taşımacılığında kullanılan containerlardan esinlenmiş. Deniz taşımacılığında her containerın boyutu aynıdır ve taşıma ücreti aşağı yukarı standarttır. Boyutlarının aynı olması sebebiyle yerleşimi ve taşıması kolaydır.

Klasik VM vs Docker

VM’ler her bir çalışan örneği için full bir işletim sistemine sahiptir. Docker ise hem full işletim sistemi yerine boyut olarak küçültülmüş imajları kullanır hem de konak işletim sistemi kütüphanelerini paylaşımlı olarak kullanır. Fakat bu durum, Docker’i sistem kaynak tüketim dostu yaparken, izolasyon seviyesini ise düşürmektedir. Bunlarla birlikte aşağıdaki karşılaştırmaları yapabiliriz.

Kıyas türü VM   Docker
OS  Tam işletim sistemi Küçültülmüş işletim sistemi imajı
Izolasyon  Yüksek Daha düşük
Çalışır hale gelmesi Dakikalar Saniyeler
Versiyonlama Yok Yüksek
Kolay paylaşılabilirlik Düşük Yüksek

 

Her iki sanallaştırma yaklaşımın birbirlerine göre avantaj ve dezavantajları mevcut. Ancak, Docker yönünden bakıldığında bazı avantajların çok kritik olduğunu söylemek doğru olur.

Yazılımımızı test etmek istediğimizde bir yazılım ve bir veritabanı containerı oluşturup testi onun üzerinde gerçekleştirebiliriz. Bu işlemi Jenkins gibi continuous integration aracıyla otomatikleştirme imkanımız da var. Docker özetle bu şekildedir. Sunucunuz üzerinde dışarıya belirli bir porttan hizmet veren yazılım kutuları olarak düşünebiliriz. Kurulumu, dağıtımı ve testi kolaylaştıran bu sistem, sistem yöneticilerine ve yazılımcılara büyük kolaylık sağlamaktadır.

bir yorum bırakın