Category: Türkçe

Date:

Docker

Docker Nedir, Ne İşe Yarar?

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 Nasıl Yardımcı Olabilir?

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.

Dockerfile Nedir?

Dockerfile, bir yazılımın hangi baz işletim sistemi üzerine kurulacağı, hangi işletim sistemi ve programlama dili paketlerini gerektirdiğini, hangi komutla çalıştırılabileceğini anlatan bir script gibidir. Tek bir docker build . komutuyla Dockerfile isimli dosya okunarak oradaki reçetemsi tanımlar baz alınarak sanal bir işletim sistemi oluşturulur, gereksinimler kurulur ve ortaya bir image (imaj) çıkar. Bu imajları bilgisayarımızda programı hızlıca çalıştırmak için docker run [image] komutunu kullanabiliriz. Bu durumda imajı baz alan bir container oluşturulacaktır.

Docker Container Nedir? Docker Image Nedir?

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 Hub Nedir?

Docker Hub, oluşturulan docker imajlarının yüklenip ortak kullanıma açıldığı bir repodur (depo). Public ve Private olmak üzere iki tür repo vardır. Public olarak yayınlanan imajlar herkes tarafında görülebilmekte ve kullanılabilmektedir. Mesela sürekli güncel sürümü yayınlanan Wordpress imajını indirip kolayca kullanabilir, kurulum derdinden kurtulabilirsiniz. Popüler birçok uygulamanın (mysql, apache, nginx, ghost, vs) hazırda ücretsiz imajları mevcut.

Bununla birlikte şirketiniz gerek baz imajlar, gerekse ürün imajlarını buradaki private reposuna koymak isteyebilir. Bu sayede frontend takımı backend kurulumu yapmak zorunda kalmadan backend kodunu docker container içerisinde çalıştırabilir. Benzer şekilde deploymentları otomatikleştirebilirsiniz. Testler geçtiğinde Docker Hub reponuza yeni imaj yüklenir, ardından deployment tetiklenir ve bu imaj sunucularınıza yüklenir.

Docker Hub'daki imajları indirmek için terminalde docker pull mysql gibi bir komut uygulamanız yeterli. Ardından docker run mysql komutu ile yeni bir container oluşturabilirsiniz. Her komutta belirtilmesi gereken ek argümanlar mevcut. Bunları kullanım kılavuzunu inceleyerek görebilirsiniz.

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; Docker Swarm Mode, Kubernetes ve Apache Mesos gibi küme yönetim yazılımıyla beraber kullanıldığında kolay ölçeklenebilen sistemler kurulmasına imkan tanımakta.

Bulut Ortamına Docker Deployment

Bir imaj ürettiniz, docker hub'da yayınladınız. Şimdi bulut ortamında canlı yayına almak istiyorsunuz. Ne yapacaksınız?

DigitalOcean platformu üzerinde 15 saniye içerisinde bir VPS (sanal sunucu) açabilir, Docker container'larınızı çalıştırabilirsiniz. DigitalOcean'a bu bağlantı üzerinden üye olduğunuzda $100'lık ücretsiz kullanım hakkına kavuşacaksınız.

Docker containerlarınızı bulut ortamına deploy etmek için birkaç yolunuz var:

  • Create Droplets -> Marketplace kısmında Docker imajını kullanabilir, hazır kurulu halde bir VPS başlatabilirsiniz.
  • Create Droplets -> Container distributions kısmında Rancher OS imajını kullanabilir, Docker odaklı bir işletim sistemi olan Rancher OS kullanabilirsiniz.
  • Ubuntu üzerinde kendiniz Docker kurulumu yapabilirsiniz.


Share: FacebookGoogle+Email


comments powered by Disqus