Docker Compose deyince çoğu kişinin aklına tek bir şey geliyor: “Bir docker-compose.yml yazayım, işler yürüsün.” Keşke o kadar düz olsaydı (ilk duyduğumda inanamadım). Pratikte iş biraz daha dağınık; veritabanı ayrı dert, önbellek ayrı dert, lokal yapay zeka modeli bambaşka bir dert (en azından benim deneyimim böyle). Hani bir projeye başlarsınız da ilk iki saat kod yazmak yerine altyapı kurarsınız ya, işte Compose şablonları tam o noktada hayat kurtarıyor.
Geçen ay Kadıköy’de küçük bir SaaS ekibiyle konuşurken bunu çok net gördüm. İki geliştirici, bir ürün sahibi ve sonsuz sayıda “sadece hızlıca ayağa kaldıralım” cümlesi… Sonunda düzgün bir Compose düzeni kurunca hem onboarding süresi kısaldı hem de yerel testler daha az saç baş yoldurdu. Açık konuşayım: bu tür şablonlar kulağa sıkıcı geliyor. Ama ilk kriz anında değeri ortaya çıkıyor.
Hmm, bunu nasıl anlatsamdı…
Neden Hazır Compose Şablonu Kullanılır?
İşin aslı şu: çoğu ekip aynı temel sorunları tekrar tekrar yaşıyor. Bir gün PostgreSQL ekleniyor, ertesi — itiraz edebilirsiniz tabi — gün Redis gerekiyor, sonra araya admin paneli giriyor… Her seferinde sıfırdan dosya yazmak zaman kaybı. İlginç, değil mi? Hazır şablonlar burada Lego kutusu gibi çalışıyor — parçalar belli, birleşme biçimi belli, sen sadece oturuyorsun ve birleştiriyorsun.
Bunu 2023’te kendi yan projemde denemiştim; Berlin’de uzaktan çalışan üç kişilik ufak bir ekip için geliştirdiğimiz uygulamada her ortamı elle kuruyorduk ve inanılmaz yorucuydu, ciddi söylüyorum. Sonra Compose tarafını — kendi adıma konuşayım — kalıba oturttuk ve en basitinden yeni gelen geliştiricinin projeyi çalıştırma süresi yarıya indi. Küçük gibi duruyor. Ama günlük akışta bayağı fark ediyor.
Gel gelelim hazır şablon kullanmanın bir riski de var: herkesin gözünü kapatıp kopyaladığı dosyalar zamanla şişebiliyor, gereksiz servisler birikebiliyor, port karmaşası baş gösterebiliyor ve isimlendirme tam bir felakete dönüşebiliyor. Yani şablon faydalı. Ama kutsal değil. İlginç, değil mi? Biraz budamak gerekiyor.
| Kullanım Senaryosu | Şablonun Faydası | Dikkat Edilecek Nokta |
|---|---|---|
| Küçük startup | Hızlı başlangıç ve düşük bakım yükü | Aşırı servis eklememek |
| Orta ölçekli ekip | Tutarlı geliştirme ortamı | Sürüm sabitleme yapmak |
| Enterprise proje | Yerel testlerde gerçekçi mimari simülasyonu | Sekret yönetimini dışarıda tutmak |
CMS Kurulumu İçin Temiz Bir Başlangıç
WordPress benzeri senaryolar neden hâlâ önemli?
Bak şimdi, E-ticaret ya da içerik odaklı projelerde CMS kurulumları hâlâ çok yaygın. Evet, bazıları bunu eski moda buluyor — anlıyorum, ben de zaman zaman öyle düşünüyorum — ama müşteri tarafında hız gerekiyorsa WordPress tabanlı yapıların hâlâ yeri var, bu tartışmaya kapalı bence. Docker Compose burada özellikle işe yarıyor çünkü veritabanı ile uygulamayı aynı nefeste ayağa kaldırıyorsunuz. Bu konuyla ilgili Find Your Words: Oyunda Daha Önce Görmediğim Bir Dil yazımıza da göz atmanızı tavsiye ederim.
Editör masasında bu konuyu görünce hemen test ettim. Geçen hafta Şişli’de hazırladığım demo ortamında iki servisli basit bir yapı kurdum ve açıkçası beklediğimden temiz çıktı. Nginx reverse proxy ile uğraşmadan sadece PHP-FPM + MySQL hattını döndürmek bile rahatlatıcıydı, şaşırdım biraz.
services:
wordpress:
image: wordpress:latest
ports:
— "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wpdb
db:
image: mysql:8
environment:
MYSQL_DATABASE: wpdb
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
MYSQL_ROOT_PASSWORD: rootpass
Tabii bu kadar basit örnek güzel. Ama prod’a birebir taşımak doğru olmaz — özellikle kalıcı depolama. Güvenlik tarafında ek ayar şart, bu konuda şaka yok. Yoksa demo pırıl pırıl görünürken canlı sistem ilk yeniden başlatmada suratınıza bakar. Butterfly CSS: 2026’da Dikkat Çeken Hafif Bir Seçenek yazımızda bu konuya da değinmiştik.
Web Uygulamaları İçin Servisleri Yan Yana Dizmek
Bazen mesele kod değil orkestrasyon oluyor
Diyelim React ön yüzünüz var, arkada Node.js API çalışıyor ve ikisinin arasında da Nginx oturacak. İşte Compose burada devreye girip “tamam kardeşim, hepsini birlikte başlatıyorum” diyor. Bu ne anlama geliyor? Geliştirme sırasında bu düzen ciddi rahatlık sağlıyor çünkü frontend ile backend artık birbirini localhost üstünden kovalamıyor, herkes kendi işini yapıyor. PDF Dünyasında Bir Nefes: Ücretsiz ve Limitsiz Araçlar yazımızda bu konuya da değinmiştik.
Lafı gevelemeden söyleyeyim. Bu tip yapıların en büyük artısı takım içi uyumdur; frontend geliştiricisi API’nin hazır olup olmadığını beklemek zorunda kalmaz, backend geliştiricisi de tarayıcı ayarlarıyla boğuşmaz. Fena değil yani. Leapmotor T03 Ticari Versiyonuyla Avrupa’ya Açılıyor: Ucuzluk Yetiyor mu? yazımızda bu konuya da değinmiştik. Bu konuyla ilgili Subnautica 2’de Sessiz Kopuş: Krafton Gidiyor mu? yazımıza da göz atmanızı tavsiye ederim.
Peki eksik tarafı ne? Çok katman eklendikçe hata ayıklama zorlaşıyor — sorun Nginx’te mi, API’da mı, yoksa ağ köprüsünde mi diye bakarken vakit akıp gidebiliyor. Hani masanın altına düşen anahtarı aramak gibi; orada bir yerde ama tam olarak nerede, onu bulmak biraz alıyor.
Veritabanları ve Önbellekler İçin Ayrılmış Kalıp
Redis ile PostgreSQL aynı anda nasıl yönetilir?
Tuhaf ama, Küçük projelerde herkes önce uygulamayı düşünür. Birkaç hafta sonra veritabanı backup’ı, cache stratejisi ve bağlantı limitleri gündeme gelir. O yüzden veri katmanını erken oturtmak iyi fikir; PostgreSQL + Redis kombinasyonu neredeyse klasik oldu artık ve compose şablonu da buna uygun olmalı.
Bakın, burayı atlarsanız yazının kalanı anlamsız kalır.
Tuhaf ama, Kendi not defterimde İstanbul ofisinde yaptığım kısa testlerde gördüğüm şey şu oldu: yalnızca uygulamayı değil veriyi de kapsayan compose yapıları uzun vadede daha huzurlu oluyor, çünkü migration koşarken ayrı terminal açma derdi azalıyor. Log takibi de tek yerde toplanıyor. Küçük detay gibi görünüyor. Ama bir daha bozuk migration’ı iki ayrı terminalle takip etmeye çalışın, anlarsınız.
Compose dosyanızda veriyi “sonradan eklenen detay” gibi görmeyin; veri katmanı iyi tasarlanmazsa geri kalan her şey geçici dekor gibi kalır.
Ha bu arada enterprise tarafta başka ihtiyaçlar çıkıyor tabii — replikasyon denemeleri, farklı sürümlerle uyumluluk testi ve yedekleme senaryoları devreye giriyor. Küçük startup için tek node yeterken büyük ekiplerde daha disiplinli bir yaklaşım şart oluyor (kendi tecrübem). Bu iki dünya birbirinden gerçekten farklı.
Python Backend İçin Daha Sade Ama Düzenli Yapılar
Django veya FastAPI kullananlar ne yapmalı?
Python dünyasında compose kullanımı genelde iki sebeple öne çıkıyor: sanal ortam kavgasını azaltmak ve bağımlılıkları paketlemek. İlginç, değil mi? Django ile çalışan biriyseniz PostgreSQL’i yanında görmek istersiniz; FastAPI kullanıyorsanız bazen sadece API servisi bile yeterli olur ama test veritabanını yine koyarsınız işte, kaçış yok.
Bence Python projelerinde en güzel nokta şu oluyor: komutlar standardize edilebiliyor. “docker compose up” deyince herkes aynı şeyi görüyor. Kimse “pip install yapmayı unuttum” diye dolaşmıyor, kimse “Postgres localde yoktu” diye sızlanmıyor. Bu kadar basit bir şey ama takımda ne kadar huzur sağlıyor, deneyimleyen bilir.
- Küçük proje: API + DB + opsiyonel mail servisi yeterli olabilir.
- Ekip işi proje: Test worker’larını ayrıca tanımlamak mantıklı olur.
- Büyüyen ürün: Log toplama ve queue sistemi sonradan eklenebilir ama yerleri önceden düşünülmeli.
Yani, Neyse uzatmayayım. Python tarafında sadelik önemli ama aşırı sade olmak da bazen tuzak yaratıyor; özellikle Celery gibi arka plan işleri varsa onları sonradan yamamak yerine en baştan düşünmek çok daha akıllıca oluyor. Sonradan yamak diyince… hmm, bu ayrı bir yazı konusu aslında.
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.



