• 23-01-2023, 00:49:17
    #1
    Merhabalar herkese,

    İleri seviye programlama ve büyük projeler için önemli olan Docker konusunu gelin beraber inceleyelim. Docker diye bahsetsekte bu aslında ölçekleme ve konteynerleştirme demektir. Docker ise bir üründür. Jeep markasının isimleşmesi gibi düşünebilirsiniz. Öncelikle çok kaba bir anlatımla başlayıp, detaylara değinmek istiyorum.



    Günümüzde PHP projeleri birçok yazılımcı gerçekleştirebiliyor. PHP projeler bildiğiniz gibi hostinglerde çalışabiliyor. Bunun çalışmasının sebebi Apache gibi deployment araçlarından bir tanesinin kurulu olması. Sunucu firmaları sunucuları sanallaştırıp, Apache kurulumları ile beraber size hosting paketleri sağlıyor. Yani bilgisayarlar içinde küçük bilgisayarlar oluşturuyor ve PHP'yi çalışabilecek hale getirip, konfigürasyonları sizin için yapıyorlar.

    Örneğin PHP 5 için konfigüre edilmiş bir hosting'e PHP 7 versiyonla hazırlanmış bir PHP projesi atarsanız çalışmaz. Konfigürasyon 5 için yapıldığından dolayı PHP 7 çalışmayacaktır. Konfigüre edilmesi gerekir. Hosting firmaları bunu sizin için otomatik konfigüre eder genelde.

    Bunlar size bir şey anlatmadıysa biraz daha açalım konuyu. "Benim bilgisayarımda çalışıyordu" cümlesini ortadan kaldırmak içinde Docker kullanılır. Siz lokalinizde bir proje yazmışsınızdır ama sunucuya veya başka bir bilgisayara taşıdığınızda bu çalışmıyorsa konfigüre etmeniz gerekmektedir. Ancak bir konteyner ile çalıştırırsanız, otomatik ortam oluşturulur. Peki nasıl ?



    Güncel geliştirme metodolojilerinin vazgeçilmesi NodeJS'tir. NPM ve Yarn paketleri ile projeler desteklenir. PHP, NodeJS, Python gibi dillerde bu paketler kullanılır veya muadilleri vardır. Örneğin bir NodeJS projeniz mevcut:

    Lokalinizde NodeJS versiyon 14 kurulu. Birde MongoDB versiyon 4 ile projenizi geliştirdiniz. Ancak yeni bir bilgisayarda development sürecinizi gerçekleştirmeniz gerekti. Veya sunucuya deploy etmeniz gerekir. Burada yapmanız gereken yeni bilgisayarınızda NodeJS 14 ve MongoDB 4 kurmanız gerekir. Konteyner burada devreye giriyor artık.

    VMWare kullandıysanız daha öncesinde bilirsiniz. Bilgisayar içinde bilgisayarlar kurabilirsiniz. Bu VDS, VPS gibi sunucularda yapılmıştır. VMWare gibi araçlar kullanılarak size bilgisayar içinde bilgisayarlar veriliyor. Sizde bu bilgisayarları kullanabiliyorsunuz. Sizde bu işlemi kendi bilgisayarına yapabilirsiniz. Örneğin 64 GB Ram, 24 CPU ve 20 TB harddisk'e sahip sunucunuz mevcut. Siz sanallaştırarak 2 GB Ram, 1 TB Harddisk ve 4 CPU ayırıp bir yeni bir bilgisayar oluşturabilirsiniz içeride. Belirlediğiniz sınırlar içerisinde çalışacaktır bu bilgisayar.

    Docker'da aynı mantıkta çalışıyor diyebiliriz. Siz Docker konfigürasyonunuzu hazırlarsınız. Sizin için bir sanallaştırma yapılır ve projeniz burada çalışır. Donanım konfigürasyonunu yaptıktan sonra örneğin NodeJS 14 versiyonu ve MongoDB 4 kurulması gerektiğini belirtirseniz, Docker sizin için bunu otomatik olarak yapıp projenizi deploy edebilir. Bu sayede "benim bilgisayarımda çalışıyordu" problemi ortadan kalkar. Projeniz artık o konteyner içerisinde rahatlıkla çalışır. Bir balığın 24 derecelik akvaryumdan alınıp, tekrar aynı derecelerde ve minerallerdeki akvaryuma aktarılması gibi.



    Peki bunları elle kurabilirim, benim için ne anlamı var derseniz ?

    Evet bunları elle kurabilirsiniz. Sunucuyu kendinizde konfigüre edebilirsiniz. Ancak burada devreye ölçeklendirme devreye giriyor. Büyük projelerin bir yerden sonra ölçeklendirilip, yeni sunuculara ihtiyacı olabilir. Örneğin projeniz 5K trafik alıyordur ve sunucu tüketimleri %85-100 arasında geziyordur. Burada ölçeklendirmeye gidip, ikinci bir sunucu açmanız ve trafiği dağıtmanız gerekir. Buna da basit anlamda ölçeklendirme denir ve yeni sunucu açılır. Burada Docker kullanarak işlemleri otomatikleştirebilirsiniz. Yani sizin sunucularınız sıkışmaya başladığında otomatik olarak yeni sunucu oluşturulur ve trafik yönlendirilmesi paylaştırılır. Bu da konteynerleştirmenin avantajıdır. Trafik azaldığında ise yeni sunucu otomatik kapatılabilir.

    Veya son olarak şu avantajından da bahsedeyim: Projenizi bir Github reposundan dağıttığınızı düşünelim. Bu repoyu güncellediğinizde tek tek sunuculara girip dosyalarınızı çekmeniz gerekir Github'tan. Otomatize edilmiş sistemlerde Github'tan verileri çeker ve güncellemeleri kendisi sağlar. Hatta Docker konfigürasyonunuzu güncellediğinizde de, bu konfigürasyonu alıp otomatik kurulum gerçekleştirir. Siz örneğin bir önceki Github güncellemesinde NodeJS 14 kullanıyorsanız, yeni güncellemede 18 versiyonuna geçtiyseniz ve Docker konfigürasyonunu yaptıysanız bunu otomatik yapar. Mevcut versiyonu ve sanallaştırmayı siler. Güncel repoyu indirir. NodeJS 18'e yükseltir ve çalıştırır.



    1-2 sunucu için belki bunlar anlamsız gelebilir ancak onlarca, yüzlerce sunucuya ulaştığınızda bunun otomatize edilmesi şarttır.

    Umarım konunun doğru anlatımını sağlamışımdır. Docker ileri seviye bir konu olsa da, en azından kulak aşinalığı olması gerekir yazılımla uğraşan kişilerin. İhtiyacınıza göre Docker kullandığınızda, umarım kulaklarım çınlar Çok basit anlamda ve herkesin anlayabileceği şekilde anlatmak istedim. Yanlışım, kusurum varsa affola. Okuduğunuz ve yorumlarınız için teşekkürler
  • 23-01-2023, 00:53:58
    #2
    Güzel anlatmışsınız hocam detayları. Dediğiniz gibi büyük ve profesyonel projeler için kullanılması çok büyük fayda sağlıyor.
  • 23-01-2023, 01:01:55
    #3
    Ellerinize sağlık, başlangıç için güzel bir bilgilendirme olmuş, bundan sonrası için de bilmeyen arkadaşlar için k8s çalışma mantığından bahsedebilirsiniz. Bir de açıkcası kendim docker, k8s teknolojilerini bilip kullansam da çoğu insanın aksine bir hostingin çalışma mantığını tam olarak bilmiyorum, hostinglerde apache bunu sağlıyor demişsiniz ama bunu da detaylandırırsanı sevinirim, benim için de yararlı olur Örneğin apache de konteynırlaştırmaya benzer bir mantıkta mı çalışıyor? eğer öyleyse oluşturduğu bu image ı bir kaç hıstinge birden dağıtarak çalıştırabiliyor muyuz? Deployment sırasında bir problem çıktığında bunu log olarak basıyor mu?
  • 23-01-2023, 01:04:56
    #4
    Hosting sanırım kendi içerisinde bizim dockerfile da verdiğimiz ayarlar gibi ayarlar barındırıyor doğru mu anlamışım?
  • 23-01-2023, 01:27:50
    #5
    DarknessHero adlı üyeden alıntı: mesajı görüntüle
    Güzel anlatmışsınız hocam detayları. Dediğiniz gibi büyük ve profesyonel projeler için kullanılması çok büyük fayda sağlıyor.
    Çok teşekkürler. Evet büyük projeler için geçerli. Forumda zaten ilgi çekici bir konu olmayacağını düşünüyorum

    salperen adlı üyeden alıntı: mesajı görüntüle
    Ellerinize sağlık, başlangıç için güzel bir bilgilendirme olmuş, bundan sonrası için de bilmeyen arkadaşlar için k8s çalışma mantığından bahsedebilirsiniz. Bir de açıkcası kendim docker, k8s teknolojilerini bilip kullansam da çoğu insanın aksine bir hostingin çalışma mantığını tam olarak bilmiyorum, hostinglerde apache bunu sağlıyor demişsiniz ama bunu da detaylandırırsanı sevinirim, benim için de yararlı olur Örneğin apache de konteynırlaştırmaya benzer bir mantıkta mı çalışıyor? eğer öyleyse oluşturduğu bu image ı bir kaç hıstinge birden dağıtarak çalıştırabiliyor muyuz? Deployment sırasında bir problem çıktığında bunu log olarak basıyor mu?
    Tam olarak öyle değil aslında. Sizde hosting sanallaştırması gibi kendi bilgisayarınızda sanallaştırma yapabilirsiniz. Şöyle anlatayım:

    Ufak boyutlarda VDS, VPS gibi sanallaştırma yapılıyor. Daha sonrasında XAMPP, WAMPP gibi bir Apache programı kuruluyor. Daha sonrasında SSH bağlantısı kapatılıp, FTP yolları açılıyor. Siz sadece belirlenen lokasyonlara FTP üzerinden dosya atabiliyorsunuz. Apache kurulu olduğu içinde o klasörlerdeki dosyalar çalıştırılabiliyor. Docker'a benzese de farklı bir yapı var aslında. Bilgisayarınıza XAMPP kurulumu yaparsanız daha net anlayabilirsiniz. Bu arada XAMPP gibi deployment araçları içerisinde MySQL ve PHPMyAdmin gibi araçlarda bulunuyor. K8S'de ölçeklendirmeye dayanıyor. Bir gün ölçeklendirme konusu açarsam, bu önerinizi dikkate alacağımdan emin olabilirsiniz.
  • 23-01-2023, 01:40:28
    #6
    Developer adlı üyeden alıntı: mesajı görüntüle
    Çok teşekkürler. Evet büyük projeler için geçerli. Forumda zaten ilgi çekici bir konu olmayacağını düşünüyorum



    Tam olarak öyle değil aslında. Sizde hosting sanallaştırması gibi kendi bilgisayarınızda sanallaştırma yapabilirsiniz. Şöyle anlatayım:

    Ufak boyutlarda VDS, VPS gibi sanallaştırma yapılıyor. Daha sonrasında XAMPP, WAMPP gibi bir Apache programı kuruluyor. Daha sonrasında SSH bağlantısı kapatılıp, FTP yolları açılıyor. Siz sadece belirlenen lokasyonlara FTP üzerinden dosya atabiliyorsunuz. Apache kurulu olduğu içinde o klasörlerdeki dosyalar çalıştırılabiliyor. Docker'a benzese de farklı bir yapı var aslında. Bilgisayarınıza XAMPP kurulumu yaparsanız daha net anlayabilirsiniz. Bu arada XAMPP gibi deployment araçları içerisinde MySQL ve PHPMyAdmin gibi araçlarda bulunuyor. K8S'de ölçeklendirmeye dayanıyor. Bir gün ölçeklendirme konusu açarsam, bu önerinizi dikkate alacağımdan emin olabilirsiniz.
    Evet eskiden xampp kullanıp projeleri lokalde ayağa kaldırıp geliştirmeler yapıyodum fakat bi süredir sadece büyük projelerde çalıştığım için o taraf eksik kaldı, aslında sorum şuydu, mesela bir hosting php 5e göre configure edilmiş oluyor demişsiniz ya, bu konfigürasyonu yapan yapı nedir? Apache mi? Bir diğer sorum da hostinglerde docker container kurulabiliyor mu?(Düz basit hosting paketinden bahsediyorum sunucu değil) Cevaplarınız için teşekkür ederim bu arada
  • 23-01-2023, 01:45:29
    #7
    salperen adlı üyeden alıntı: mesajı görüntüle
    Evet eskiden xampp kullanıp projeleri lokalde ayağa kaldırıp geliştirmeler yapıyodum fakat bi süredir sadece büyük projelerde çalıştığım için o taraf eksik kaldı, aslında sorum şuydu, mesela bir hosting php 5e göre configure edilmiş oluyor demişsiniz ya, bu konfigürasyonu yapan yapı nedir? Apache mi? Bir diğer sorum da hostinglerde docker container kurulabiliyor mu?(Düz basit hosting paketinden bahsediyorum sunucu değil) Cevaplarınız için teşekkür ederim bu arada
    Orada Apache versiyonunun güncellenmesi gerekiyor işte. Örneğin tamamen farazi konuşuyorum Apache 4 var sunucunuzda. PHP 5'i destekliyor. 7'ye geçmeniz gerekiyor bu sefer Apache 5'e güncellenmesi gerekiyor. Ama versiyon düşmek istiyorsanız bu basit bir konfigürasyonla halledilebiliyor. Geçmişe dönük destekliyor ama yenisi için güncellenmesi gerekiyor aracın. Yani bu konfigürasyonlar Apache ile yapılıyor. Hostinglerde maalesef Docker olmuyor. Hosting'i sadece bir klasörden PHP çalıştırmaya izin veren bir bilgisayar gibi düşünebilirsin.
  • 23-01-2023, 01:52:48
    #8
    Developer adlı üyeden alıntı: mesajı görüntüle
    Orada Apache versiyonunun güncellenmesi gerekiyor işte. Örneğin tamamen farazi konuşuyorum Apache 4 var sunucunuzda. PHP 5'i destekliyor. 7'ye geçmeniz gerekiyor bu sefer Apache 5'e güncellenmesi gerekiyor. Ama versiyon düşmek istiyorsanız bu basit bir konfigürasyonla halledilebiliyor. Geçmişe dönük destekliyor ama yenisi için güncellenmesi gerekiyor aracın. Yani bu konfigürasyonlar Apache ile yapılıyor. Hostinglerde maalesef Docker olmuyor. Hosting'i sadece bir klasörden PHP çalıştırmaya izin veren bir bilgisayar gibi düşünebilirsin.
    Bunu bilmiyodum ve şaşırdım, hostinglerde sadece PHP mi çalışıyor? React projesi vb hostingde çalışmıyor o zaman?
  • 23-01-2023, 01:55:50
    #9
    salperen adlı üyeden alıntı: mesajı görüntüle
    Bunu bilmiyodum ve şaşırdım, hostinglerde sadece PHP mi çalışıyor? React projesi vb hostingde çalışmıyor o zaman?
    Eğer HTML olarak build almazsanız çalışmaz. Mesela NextJS çalıştıramazsınız çünkü bir web sunucusuna ve süreç yöneticisine ihtiyacı vardır. NodeJS'te aynı şekilde. Linux ve Windows olarak hostingler var. PHP için genellikle Linux, C# içinde Windows kullanıyorlar.