Monorepo Docker ile Containerize Etme Rehberi
Bu rehberde ne öğreneceksiniz?
Bu rehberde monorepo yapısındaki bir uygulamayı Docker ile container haline getireceksiniz.
Her servisi izole edip yerel ortamda ve bulut platformunda dağıtıma hazır hale getireceksiniz.
🧠 Teknik Özet
Bu rehber, monorepo mimarisine sahip çok servisli uygulamaların Docker ile containerize edilmesini anlatır.
Amaç, servisleri izole etmek ve bağımsız ölçeklenebilir dağıtım sağlamaktır.
Adımlar: dizin yapısı, Dockerfile’lar, docker-compose, yerel test ve bulut dağıtımı.
Monorepo Mimarisinde Karşılaşılan Problemler
Monorepo, tüm servisleri tek kod havuzunda toplar.
Bu yapı geliştirmeyi kolaylaştırır ama dağıtımı zorlaştırır.
Başlıca sorunlar:
- Servislerin birbirine bağımlı hale gelmesi
- Farklı build gereksinimleri
- Yerel ve prod ortam uyuşmazlığı
- CI/CD süreçlerinin karmaşıklaşması
Çözüm: Container Tabanlı Mikroservis Yapısı
Her servisi Docker container içine almak en etkili çözümdür.
Bu yaklaşım servis izolasyonu ve bağımsız ölçekleme sağlar.
Bu rehberde:
- Her servis için ayrı Dockerfile oluşturulur
- docker-compose ile yerel ortam kurulur
- Servisler bağımsız olarak dağıtılır
Mikroservis Mimarisi Nasıl Çalışır?
- İstekler ilgili servise yönlendirilir
- Servisler bağımsız ölçeklenir
- Loglar ve izleme merkezi yapılara aktarılır
Bu yapı yüksek erişilebilirlik sağlar.
Bu Mimarinin Avantajları
- İzolasyon: Servisler birbirini etkilemez
- Hızlı CI/CD: Sadece değişen servis deploy edilir
- Taşınabilirlik: Ortamlar arası tutarlılık sağlanır
- Ölçeklenebilirlik: Servis bazlı kaynak yönetimi yapılır
- Arıza Toleransı: Bir servis çökse sistem ayakta kalır
1️⃣ Adım: Monorepo Dizin Yapısını Oluşturma
Önce servisleri ayrı klasörlere ayırın.
mkdir -p services/auth-api
mkdir -p services/frontend
mkdir -p services/todos-api
mkdir -p services/users-api
mkdir -p services/log-processor
mkdir -p services/zipkin
- Bu yapı her servisin bağımsız gelişmesini sağlar.
2️⃣ Adım: Her Servise Dockerfile Ekleme
- Her servis kendi Dockerfile dosyasına sahip olmalıdır. Bu dosya container imajının nasıl üretileceğini tanımlar.
Örnek yollar:
-
services/auth-api/Dockerfile
-
services/frontend/Dockerfile
-
services/todos-api/Dockerfile
- Bu yaklaşım dağıtımda tutarlılık sağlar.
3️⃣ Adım: docker-compose ile Yerel Ortam Kurma
- Tüm servisleri tek komutla çalıştırmak için docker-compose kullanılır.
version: "3"
services:
frontend:
build: ./frontend
ports:
- "8080:8080"
depends_on:
- auth-api
- todos-api
auth-api:
build: ./auth-api
ports:
- "8081:8081"
todos-api:
build: ./todos-api
ports:
- "8082:8082"
users-api:
build: ./users-api
ports:
- "8083:8083"
zipkin:
image: openzipkin/zipkin
ports:
- "9411:9411"
redis-queue:
image: redis
- Bu dosya servislerin doğru sırayla başlamasını sağlar.
4️⃣ Adım: Yerel Test
- Tüm servisleri build edip çalıştırın.
docker-compose up --build
- Bu komut tüm stack’i ayağa kaldırır.
Erişim noktaları:
-
Frontend: http://localhost:8080
-
Zipkin: http://localhost:9411
5️⃣ Adım: Git Deposuna Gönderme
- Projeyi bir Git deposuna yükleyin.
git init
git add .
git commit -m "Containerized monorepo"
git remote add origin https://github.com/kullanici/monorepo-app
git push origin main
- Bu adım bulut dağıtımı için gereklidir.
6️⃣ Adım: Bulut Platformuna Dağıtım
- Container imajları, her servis için ayrı bileşen olarak eklenir.
- Her servis bağımsız ölçeklenebilir şekilde tanımlanır.
Bileşen türleri:
1. Web Service: HTTP trafiği alan servisler
2. Worker: Arka plan işlemleri
3. Job: Zamanlanmış görevler
- Platform, dahili ağ ve DNS’i otomatik yönetir.
❓ Sıkça Sorulan Sorular (SSS)
1. Monorepo için Docker şart mı? Prod ortamda güçlü şekilde önerilir.
2. Her servis farklı dil kullanabilir mi? Evet. Docker izolasyon sağlar.
3. Sadece frontend’i public yapabilir miyim? Evet. Diğer servisler private kalabilir.
4. Log ve izleme nasıl yapılır? Zipkin ve merkezi log servisleriyle.
Sonuç
Monorepo yapıyı Docker ile containerize etmek, modern DevOps’un temelidir. Bu mimari hızlı dağıtım ve ölçeklenebilirlik sağlar.
Tüm monorepo ve mikroservis projelerinizi Rabisu Bulut altyapısında güvenle yayına alabilirsiniz 🚀