Corant
Blog'a Dön

Docker ile Konteynerlestirme: Uygulamanizi Uretime Tasiyan Pratik Rehber

Web9 dakikalık okuma

Bir uygulamanin gelistiricinin bilgisayarinda calisip uretim sunucusunda calismamasi, yazilim ekiplerinin en klasik sorunudur. Docker ve konteynerlestirme tam olarak bu problemi cozmek icin ortaya cikti: uygulamanizi, bagimliliklarini ve calisma ortamini tek bir tasinabilir birime paketleyerek her ortamda ayni sekilde calismasini saglar. Bu rehberde Docker'in temel mantigini ve uretime hazir konteynerler uretmenin pratik yontemlerini ele aliyoruz.

Konteyner ile Sanal Makine Arasindaki Fark

Sanal makineler her uygulama icin tam bir isletim sistemi calistirirken, konteynerler ana makinenin cekirdegini paylasir. Bu, konteynerlerin saniyeler icinde baslamasi, cok daha az bellek tuketmesi ve ayni sunucuda onlarca izole servisi bir arada calistirabilmesi anlamina gelir.

  • Hafiflik: Bir konteyner imaji genellikle megabaytlar seviyesinde kalirken, bir sanal makine gigabaytlarca yer kaplar.
  • Hiz: Konteynerler anlik baslar, bu da olceklemeyi ve dagitimi hizlandirir.
  • Tekrar edilebilirlik: Ayni imaj, gelistirici dizustu bilgisayarindan uretim sunucusuna kadar bit bazinda ayni calisir.

Dockerfile Anatomisi

Her sey bir Dockerfile ile baslar. Bu dosya, imajinizin nasil insa edilecegini adim adim tanimlayan bir tariftir. Temel bir Dockerfile bir base imaj secer, bagimliliklari yukler, uygulama kodunu kopyalar ve baslangic komutunu belirler.

Iyi bir Dockerfile yazmanin puf noktasi katman onbellegini dogru kullanmaktir. Docker her komutu ayri bir katman olarak sakladigindan, sik degisen adimlari (uygulama kodu kopyalama) en sona, nadiren degisen adimlari (bagimlilik kurulumu) basa koymalisiniz. Boylece kod degistiginde bagimliliklar yeniden yuklenmez ve build sureniz dakikalardan saniyelere iner.

Cok Asamali Build ile Imaj Boyutunu Kucultme

Uretim imajlariniza derleme araclarini, test kutuphanelerini ve gecici dosyalari dahil etmek hem guvenlik riski hem de gereksiz bir yuktur. Cok asamali (multi-stage) build yaklasimi bu sorunu zarif bir sekilde cozer.

Ilk asamada uygulamanizi tum derleme baglaminda insa eder, ikinci ve nihai asamada ise yalnizca calismasi icin gereken ciktileri kopyalarsiniz. Bu yontemle bir Node veya Go uygulamasinin imaj boyutunu yuzlerce megabayttan onlarca megabayta indirmek mumkundur. Kucuk imajlar daha hizli deploy edilir, daha az saldiri yuzeyi sunar ve registry maliyetlerinizi dusurur.

Guvenlik ve Iyi Uygulamalar

Konteyner guvenligi cogu ekibin gec fark ettigi bir konudur. Birkac basit kural riskinizi ciddi olcude azaltir:

  • Root ile calistirmayin: Dockerfile'da ayri bir kullanici tanimlayip uygulamayi onunla baslatin.
  • Sabit imaj etiketleri kullanin: latest yerine surum numarasi veya digest belirtin ki dagitimlariniz ongorulebilir olsun.
  • .dockerignore ekleyin: node_modules, .git ve gizli anahtar dosyalarinin imaja sizmasini engelleyin.
  • Imajlari tarayin: Trivy veya benzeri araclarla bilinen zafiyetleri build asamasinda yakalayin.

Docker Compose ile Yerel Gelistirme

Gercek uygulamalar nadiren tek konteynerden olusur; genellikle bir veritabani, onbellek katmani ve arka plan islemcisi de gerekir. Docker Compose, tum bu servisleri tek bir YAML dosyasinda tanimlamaniza ve tek komutla ayaga kaldirmaniza olanak tanir. Yeni bir gelistiricinin projeye katilip birkac dakika icinde tum ortami calistirabilmesi, ekip verimliligi acisindan buyuk bir kazanctir.

Uretime Gecerken Dikkat Edilecekler

Yerel Compose kurulumu gelistirme icin idealdir, ancak uretimde saglik kontrolleri, kaynak limitleri ve loglama stratejisi tanimlamaniz gerekir. Konteynerlerinize CPU ve bellek limitleri koymak, bir servisin tum sunucuyu tuketmesini engeller. Loglarinizi standart cikisa yazmak ise merkezi log toplama sistemleriyle uyumlu calismanizi saglar.

Konteynerlestirme, modern yazilim dagitiminin temel tasidir ve dogru kurulunca ekibinizin dagitim hizini kalici olarak artirir. Kucuk bir servisi Docker'a tasiyarak baslayin; kazandiginiz ongorulebilirlik ve hiz, tum altyapinizi bu yone tasima kararini kolaylastiracaktir.