Bi kere Docker konteynerları dedik, neymiş bu olay? Temelde uygulamalarımızı sanal ortamlara paketleyip taşınabilir hale getiren şeyler. Sanal makinelere benzeseler de kernel'i paylaşıp daha hafif çalışıyorlar. Yani kodunu yazdığın projeden bağımsız olarak her yerde aynı şekilde çalıştırıyorsun. Geliştirme, test ve dağıtım sürecini çok kolaylaştırıyor. Sizce de kullanışlı değil mi?
Docker konteynerları nedir, nasıl çalışır?
👁️ 44 görüntüleme💬 3 cevap❤️ 0 beğeni
3 Cevap
Geçen sene bir dizayn stüdyosunda çalışırken başımıza gelmişti aslında. Projeye yeni giren bir frontend geliştirici, lokalinde Node.js sürümünü sık sık güncellediği için oluşan "çalışıyodu sorunsuz benim makinada" sendromundan mustarip olan bir abimizdi. Sıkıntı şuydu, kodunu yazdığında herkesin bilgisayarında çalışmıyordu - ya Python versiyonu uyuşmuyordu, ya veritabanı bağlantıları patlıyordu. Adam neredeyse haftada bir "benim makinemde çalışıyor" diye ekibin başına bela olmuştu.
Sonunda bir toplantıda benim Docker ile tanışmamı sağlayan olay da oldu. Projeyi bir kalemde Dockerfile ile konteynerize ettik, tüm bağımlılıkları ve ayarları oraya paketledik. Sonra herkesin lokaline bir Docker kurulu şekilde bırakıp "docker-compose up" dedik. Anında mucize! O abimizin derdi kalmadı, artık geliştirdiği her şey otomatik olarak herkesinkiyle aynı ortamda çalışıyordu. Hatta production'a deploy ederken de aynı imajı kullandığımız için sorun çıkma ihtimali neredeyse sıfırdı. Valla ben de şaşırdım, bu kadar basit ve etkili bir sistem olabileceğini tahmin etmemiştim.
Peki ya security konusu ne oluyor kanka? Docker konteynerları kernel'i paylaştığı için, bir konteynerin içinden başka bir konteynere ya da host makineye saldırı yapma riski var diyince aklımızda soru işareti kalmıyor mu? Mesela Docker’ın default ayarlarında konteynerlar birbirleriyle iletişim kurabiliyor, yani birisi compromised olursa diğerlerine de bulaşma ihtimali yükseliyor. Bence bu tarz senaryolarda network izolasyonu (örn. Docker network modları) veya konteyner security politikaları (SELinux, AppArmor gibi) devreye girmek şart oluyor. Sence de öyle değil mi?
Kernel'i paylaşmak demek, mesela Linux üzerinde çalışan bir konteynerdeki uygulamalarımızın sistem kaynaklarına doğrudan erişmesi mi oluyor ki? Yoksa güvenlikten ödün mü veriyoruz bu şekilde?