Docker Nedir ?

Yazılım ve devops dünyasıyla ilgili araştırmalar yaparken son günlerde sıklıkla karşımıza çıkan bazı kavramlar var. Bunlardan birtanesi de docker. Peki bu docker nedir ? Neden kullanılır ? Hangi sorunlarımızı çözüyor ? Bunlara bir göz atalım.

Basit anlamda çok teknik detaya girmeden mantığını anlatmaya çalışacağım. Aslında docker dediğimiz şey container mimarisini kullanan bir tool olarak düşünebilirsiniz. Temelinde container mimarisinin çalıştığı bir uygulamadır. Docker bize container yapısını kullanmamız için çoğu şeyi basitleştirmiş ve düzenlemiş bir araçtır.

Container mimarisi nedir ?

Container mimarisini anlamak için eskiden ve hala günümüzde birçok yerde kullanılan bir yaklaşımdan bahsetmek istiyorum. Hepimiz sanal sunucunun ne olduğunu biliyoruz. Sanal sunucular bir fiziksel makine de hypervisor katmanı üzerinde birden fazla işletim sistemi çalıştırmamıza yarayan bir yapıdır. Bu yapının bize getirdiği çok avantajlar vardır. Aşağıdaki şekilde hypervisor katmanının yapısını bulabilirsiniz.

Yukarıda da görüldüğü gibi bir fiziksel makinemiz var ve üzerinde birden fazla işletim sistemi yüklersek farklı makineler elde edebiliyoruz. Bu oldukça harika bir olay. Şimdi bir örnekten yola çıkalım. App A, App B, App C isminde uygulamamız olduğunu düşünelim. Bu uygulamalar nodejs, java, python, php gibi dillerden herhangi biriyle yazılmış olabilir. Normalde biz bu uygulamaları çalıştırmamız için örneğin php uygulaması olduğunu düşünelim , sunucumuza php yüklememiz gerekir ayrıca apache yada nginx gibi bir web server da yüklememiz gerekir. Bu yüklediğimiz gereksinimleri artırabiliriz uygulamamıza göre. Peki bir fiziksel makinemiz üzerine bir sanal sunucu oluşturduk ve üzerine php apache gibi gereksinimleri kurduk. Artık uygulamamızı sunucuya atma vakti geldi. Evet container yapılarının çözdüğü sorunlara geldik.

Sorunlar;

  • Biz uygulamamızı kendi bilgisayarımızda geliştiriyorduk ve sunucuya attığımızda çalışmadı.
  • Geliştirdiğimiz ortamda php apache sürümleri farklı
  • Geliştirdiğimiz ortamda php ve apache için birsürü ayar yapmıştık bu ayarlar sunucuda yok
  • Code tarafında bile localdeki ayarlarımıza göre örneğin domain name “localhost” port “8080” gibi ayarlar yapmıştık.
  • Tüm bu ayarları ayarladık sorunlarla boğuştuk ve uygulamamız çalıştı peki ya uygulamamızı güncellemek istedik ve güncel kodu attık baktık yine problem çünkü bir paket kullanmıştık ve o paket sunucuda yok

Yukarıda saydığımız sorunlar gibi sorunları elbette başınıza gelmiştir. Çünkü sizin geliştirme yaptığınız ortam büyük ihtimalle prod ortamıyla hiçbir zaman aynı olmayacak ve bu sorunları yaşayacaksınız. Ayrıca en büyük sorunlardan biriside şudur ;

diyelim 4 cpu 8 gb ram’e sahip makineniz var. App A için 2 cpu 4 ram ayırdınız App B için de yine 2 cpu 4 ram ayırdınız diyelim. Farkettiyseniz siz 2 uygulama için 2 tane işletim sistemi kurdunuz. Buda demek oluyor ki aslında işletim sistemleride bir kaynak tüketeceği için ayrıca işletim sistemle içinde kaynak ayırmanız gerekmektedir.

Container yapısında bu söylediğimiz senaryoyu yapmamız hem çok kolay hemde yukarıda sıraladığımız sorunlarla uğraşmıyoruz.

Yukarıda görülen şekildeki gibi bizim bir tane işletim sistemimiz oluyor. Biz bu işletim sistemimize docker kuruyoruz. Daha sonra bizim App lerimizi bir paket haline getiriyoruz buna docker image deniliyor. Yani biz aslında uygulamamızı çalışan haliyle image ını alıyoruz. Daha sonra docker kurulu olan herhangi bir bilgisayarda bu image ı kullanarak container ayağa kaldırıp uygulamamızı çalıştırıyoruz. Çalışan containerlar tamamen başka bir containerle izole bir şekilde çalıştığı için herhangi şekilde birbirlerini bozacak bir durum söz konusu değil. Ve siz her uygulama için bir işletim sistemi kurmanıza gerek kalmıyor.

You may also like...

Bir cevap yazın

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