Category: Türkçe

Date:

Docker

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. Eğer imaj açık kaynak ise ücretsiz, imajınızı başkalarının görmesini istemiyorsanız ücretli. İşin güzeli popüler birçok uygulamanın (mysql, apache, nginx, ghost, wordpress vs) hazırda ücretsiz imajları mevcut.

docker pull mysql

diyerek bu imajı indirip kullanıma hazır hale getirebiliyoruz.

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.

Sanal Makinalar vs Containerlar

 

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.

Docker ile örnek bir mimari

Aşağıdaki fotoğraftaki örnekten gidecek olursak, sunucumuzda 4 adet docker container çalışıyor. 2 adet Apache web sunucusu, 1 adet mysql veritabanı, 1 adet ssh-bis. Apache sunucular 80 portundan yayın yapacaklar. Bu 80 portundaki yayın container'dan dışarıya (ana (host) sisteme) çıkarken 25890 ve 27568 olarak çıkacaklar. Containerın çalıştığı sistemde web tarayıcı ile http://localhost:25890 adresine girdiğimiz zaman birinci Apache'nin cevabını alırız.

Nginx gibi bir reverse proxy ise gelen istek sub1.domain.com:80'e ise ilk containera (25890), sub2.domain.com:80 ise ikinci containera (27568) yönlendirecek. Bu sayede çok sayıda yazılım bir sistemde birbirinden izole bir halde kolay kurulumla çalışabilecek.

Reverse Proxy ile gelen isteğin lokal portta hizmet veren docker containerlarına yönlendirilmesi

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 şekilde. 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ğlamakta.

Docker, Apache Mesos küme yönetim yazılımıyla beraber kullanıldığında kolay ölçeklenebilen sistemler kurulmasına imkan tanımakta. Bu konuda yardıma ihtiyacınız olursa Fikrimuhal Teknoloji olarak şirketlere danışmanlık, eğitim ve altyapı kurulum hizmetleri vermekteyiz.


Share: FacebookGoogle+Email


Receive notification on my new posts

* required
Languages*   
* Different contents, not direct translation. You may choose both if you wish.
comments powered by Disqus