Docker Compose ile Yerel Geliştirme Ortamı Kurma
Docker Compose ile Yerel Geliştirme Ortamı Kurma
Yazılım geliştirme sürecinde, yerel makinenizde üretim ortamına benzer bir stack kurmak, sonradan yaşanan sorunları önceden tespit etmenin en etkili yoludur. Docker Compose, bu karmaşık kurulumu basitleştirerek, veritabanı, cache sistemi, mesaj kuyruğu ve mikroservisler gibi bileşenleri tek bir yapılandırma dosyasıyla yönetmenizi sağlar. Bu rehberde, Docker Compose kullanarak gerçekçi bir yerel ortam nasıl kurulacağını, hangi araçları tercih etmeniz gerektiğini ve karar verme sürecinde nelere dikkat etmeniz gerektiğini detaylı olarak inceleyeceğiz.
Docker Compose Nedir ve Neden Gereklidir?
Docker, uygulamalarınızı konteynerleştirerek çalışma ortamından bağımsız hale getirir. Ancak çoğu modern uygulama tek bir konteyner değil, birden fazla bileşenden oluşur. Örneğin bir Node.js backend'i, PostgreSQL veritabanı, Redis cache ve bir Elasticsearch örneği çalıştırmanız gerekebilir. Bu bileşenleri manuel olarak Docker komutlarıyla başlatmak zahmetli ve hataya açıktır.
Docker Compose, bu sorunu çözmek için tasarlanmıştır. YAML formatında yazılı bir `docker-compose.yml` dosyasında tüm servisleri tanımlarsınız ve tek bir komutla (`docker-compose up`) hepsi başlatılır. Ayrıca:
- Servisler arasında otomatik ağ bağlantısı sağlanır
- Başlatma sırasını kontrol edebilirsiniz
- Her servise özel volume'ler atayarak veri kalıcılığını garantileyebilirsiniz
- Ortam değişkenlerini merkezi yerden yönetebilirsiniz
Yerel Geliştirme Ortamında Hangi Bileşenlere İhtiyacınız Olabilir?
Teknoloji seçimine gitmeden önce, ihtiyacınız olan bileşenleri belirlemek önemlidir. İşte sektörde yaygın olarak kullanılan konfigürasyonlar:
| Uygulama Türü | Gerekli Bileşenler | Tercih Edilen Araçlar |
|---|---|---|
| Web Uygulaması (CRUD) | Backend, Veritabanı, Frontend | Node.js, Python, PostgreSQL, Docker Registry |
| Mikroservis Mimarisi | Birden Fazla Servis, Message Queue, Veritabanı | RabbitMQ, Kafka, PostgreSQL, MongoDB |
| Real-time Uygulama | WebSocket Server, Cache, Veritabanı | Redis, PostgreSQL, Node.js |
| Veri İşleme | Python Backend, Veritabanı, Search Engine | Elasticsearch, PostgreSQL, Python |
Yerel ortamda, üretimde kullanacağınız veritabanı ve cache sistemlerinin aynı sürümlerini çalıştırmak, "bende çalışıyor, sunucuda neden çalışmıyor?" sorununu neredeyse tamamen ortadan kaldırır.
Adım Adım Docker Compose Kurulumu
1. Docker ve Docker Compose'u Yükleyin
Docker Desktop'u (Windows, macOS) veya Docker CE + Docker Compose'u (Linux) kurulumunu tamamlayın. Kurulum sonrası `docker --version` ve `docker-compose --version` komutlarıyla kontrol edin.
2. Proje Yapısını Oluşturun
Proje kökünde bir `docker-compose.yml` dosyası oluşturun. Tipik bir yapı şöyle görünür:
- Backend hizmeti (uygulamanızın ana kodu)
- PostgreSQL veritabanı hizmeti
- Redis cache hizmeti
- Nginx ters proxy hizmeti (opsiyonel)
3. Servisleri Tanımlayın
Her servis için image seçimini ve konfigürasyonunu belirleyin. Image seçerken resmi Docker Hub imajlarını tercih edin (postgres:15, redis:7 vb.). Kendi Dockerfile'ınız varsa, `build` direktifini kullanarak yerel derlemesini sağlayabilirsiniz. Önemli noktalar:
- Her servise meaningful bir isim verin (veritabanı hizmeti için `db`, cache için `cache` gibi)
- Port eşlemelerini açıkça tanımlayın (örn: `5432:5432` PostgreSQL için)
- Environment değişkenlerini `.env` dosyasında merkezi yönetin
- Volume'ler sayesinde veri kaybolmasını önleyin
4. Çalıştırın ve Test Edin
Terminalde `docker-compose up` komutu çalıştırdıktan sonra, tüm servisler başlatılır. Log çıktıları gerçek zamanlı olarak görüntülenir. Başka bir terminal penceresinde `docker-compose ps` ile çalışan servisleri doğrulayabilirsiniz.
Karar Verme Noktaları: Ne Zaman Kompleks Hale Getirebilir?
Yerel ortamın karmaşıklığını arttırırken dikkat edilmesi gereken hususlar:
- Performans vs. Gerçekçilik: Üretimde kullanılan tüm servisleri yerel ortamda çalıştırmak öğretici olsa da, makinenizin kaynağını tüketebilir. Geliştirme aşamasında kritik olmayan servisleri yorum satırına alabilirsiniz.
- Veritabanı Sürümü Seçimi: En son sürüm yerine, üretim ortamının kullandığı sürümü belirtin. Sürüm farkları ciddi sorunlara yol açabilir.
- Bağımlılık Yönetimi: Servisler arasında başlatma sırası önemli olabilir. `depends_on` ve `healthcheck` direktifleri kullanarak bu sorunu çözebilirsiniz.
Docker Compose, ekip içinde standardize edilmiş bir ortam sağlayarak, "bende çalışıyor" sorununu neredeyse tamamen ortadan kaldırır. Tüm geliştiriciler aynı bileşenlerin aynı sürümlerini çalıştırdığından, ortam kaynaklı hataların sayısı dramatik biçimde azalır.
Sonuç: Doğru Yaklaşımı Seçmek
Docker Compose ile yerel geliştirme ortamı kurmak, başlangıçta biraz zaman yatırımı gerektirse de, ileride elde ettiğiniz kazanç çok daha fazladır. Standartlaştırılmış ortam, daha hızlı debugging, kolaylaştırılmış onboarding ve sunucu taşıma işlemlerinde önemli bir avantajdır. Özellikle mikroservis mimarisinde çalışan veya ekip içinde geliştirme yapan projeler için Docker Compose kullanımı neredeyse zorunlu hale gelmiştir.
İlk kurulumu yaptıktan sonra, `docker-compose.yml` dosyasını versiyon kontrol sisteminde saklayıp proje repository'sine dahil edin. Bu sayede yeni bir takım üyesi projeye başladığında, sadece `git clone` ve `docker-compose up` komutlarıyla tam bir geliştirme ortamını dakikalar içinde kurabilir.