Ana içeriğe geç

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

  1. Her servis kendi Dockerfile dosyasına sahip olmalıdır. Bu dosya container imajının nasıl üretileceğini tanımlar.

Örnek yollar:

  1. services/auth-api/Dockerfile

  2. services/frontend/Dockerfile

  3. services/todos-api/Dockerfile

  • Bu yaklaşım dağıtımda tutarlılık sağlar.

3️⃣ Adım: docker-compose ile Yerel Ortam Kurma

  1. 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

  1. 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ı:

  1. Frontend: http://localhost:8080

  2. Zipkin: http://localhost:9411


5️⃣ Adım: Git Deposuna Gönderme

  1. 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

  1. 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 🚀