Blogchevron_rightSunucu Yönetimichevron_rightDocker Compose ile Mikroservis Orkestrasyonu Rehberi

Docker Compose ile Mikroservis Orkestrasyonu Rehberi

S
Serversium
calendar_today25 Haziran 2026
schedule5 dk okuma
Docker Compose ile Mikroservis Orkestrasyonu Rehberi

Docker Compose ile Gelişmiş Mikroservis Orkestrasyonu: Kapsamlı Rehber

Mikroservis mimarisi, modern yazılım geliştirme süreçlerinin temel taşlarından biri haline gelmiştir. Docker Compose ise bu mimarinin yönetimini kolaylaştıran güçlü bir araçtır. 2024 itibarıyla kurumsal uygulamaların %78'i container tabanlı mimarilere geçiş yapmış olup (Gartner verilerine göre), Docker Compose bu dönüşümde kritik bir rol üstlenmektedir.

Bu rehberde, Docker Compose kullanarak gelişmiş mikroservis orkestrasyonu tekniklerini, en iyi uygulamaları ve production ortamı için gerekli stratejileri detaylı olarak ele alacağız.

Docker Compose Nedir ve Neden Mikroservisler İçin Kritik Önem Taşır?

Docker Compose, çoklu container uygulamalarını tanımlamak ve çalıştırmak için kullanılan bir YAML tabanlı araçtır. Tek bir komutla tüm servislari başlatabilir, durdurabilir ve ölçeklendirebilirsiniz. Mikroservis mimarisinde her bir servis bağımsız bir container olarak çalışır ve bu containerların koordinasyonu Docker Compose ile sağlanır.

Geleneksel monolitik uygulamalardan mikroservis mimarisine geçişte, sanal sunucu altyapısının doğru yapılandırılması başarının anahtarıdır.

Docker Compose ile Mikroservis Mimarisi Temel Bileşenleri

1. Servis Tanımlama ve Yapılandırma

Docker Compose dosyasında (docker-compose.yml) her mikroservis ayrı bir servis olarak tanımlanır. Aşağıdaki yapı temel bir mikroservis yapılandırmasını göstermektedir:

version: '3.8'
services:
  api-gateway:
    image: nginx:alpine
    ports:
      - "80:80"
    depends_on:
      - auth-service
      - user-service
      - order-service
    networks:
      - microservices-network

  auth-service:
    build: ./auth
    environment:
      - DATABASE_URL=postgresql://db:5432/auth
    depends_on:
      - db

  user-service:
    build: ./user
    environment:
      - DATABASE_URL=postgresql://db:5432/users

  order-service:
    build: ./order
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    volumes:
      - postgres-data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine

networks:
  microservices-network:
    driver: bridge

volumes:
  postgres-data:

2. Ağ Yapılandırması ve Servisler Arası İletişim

Mikroservis mimarisinde servisler arası güvenli iletişim kritik öneme sahiptir. Docker Compose, varsayılan olarak bridge ağ sürücüsünü kullanır, ancak production ortamları için daha gelişmiş ağ yapılandırmaları önerilir.

Servisler birbirleriyle hostname üzerinden iletişim kurabilir. Örneğin, auth-service, user-service'e http://user-service:5000 adresinden erişebilir.

3. Veri Kalıcılığı ve Volume Yönetimi

Mikroservislerde veri kalıcılığı için volume'ların doğru yapılandırılması gerekir. Docker volume yapılandırması konusunda detaylı bilgi almak için ilgili rehberimizi inceleyebilirsiniz.

volumes:
  db-data:
    driver: local
  app-logs:
    driver: local
  cache-data:
    driver: local

Gelişmiş Orkestrasyon Teknikleri

1. Health Check ve Bağımlılık Yönetimi

Production ortamında container'ların sağlık durumlarının izlenmesi kritik önem taşır. Docker Compose, health check yapılandırması ile container durumlarını otomatik olarak izler:

services:
  api-service:
    image: myapi:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

Bu yapılandırma, servislerin sağlıklı çalışıp çalışmadığını kontrol eder ve bağımlı servislerin sadece hazır olduklarında başlatılmasını sağlar.

2. Ortam Değişkenleri ve Yapılandırma Yönetimi

Mikroservis mimarisinde farklı ortamlar (dev, staging, production) için farklı yapılandırmalar kullanılmalıdır:

services:
  user-service:
    env_file:
      - .env.common
      - .env.${ENV:-development}
    environment:
      - NODE_ENV=${ENV:-development}
      - LOG_LEVEL=${LOG_LEVEL:-info}

Bu yaklaşım ile tek bir docker-compose dosyası ile farklı ortamlarda çalışabilirsiniz.

3. Ölçeklendirme ve Yük Dengeleme

Docker Compose, servislerin horizontal ölçeklendirmesini destekler:

docker-compose up --scale order-service=3 -d

Bu komut order servisini 3 instance olarak çalıştırır. Ancak production ortamında bu yaklaşım yeterli değildir; VDS sunucu altyapısı üzerinde Kubernetes gibi orkestrasyon araçları kullanmanızı öneririz.

Production Ortamı İçin En İyi Uygulamalar

Güvenlik Yapılandırması

Production ortamında güvenlik en üst düzeyde tutulmalıdır. Aşağıdaki önlemler alınmalıdır:

  • Root kullanıcı kullanmaktan kaçının: Her servis için ayrı kullanıcı tanımlayın
  • Secret yönetimi: Hassas bilgileri environment variable olarak değil, Docker secrets olarak saklayın
  • Network izolasyonu: Servisleri ayrı ağlarda çalıştırın
  • Image güvenliği: Sadece güvenilir kaynaklardan image kullanın
services:
  api-service:
    user: "1000:1000"
    read_only: true
    tmpfs:
      - /tmp
    security_opt:
      - no-new-privileges:true

Kaynak Limitleri ve Performans

Sunucu kaynaklarının doğru yönetimi için limitler belirlenmelidir. Sunucu kaynak limitleri ve performans testleri hakkında detaylı bilgi almak için ilgili makalemizi inceleyebilirsiniz.

services:
  heavy-service:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M

Loglama ve İzleme

Merkezi loglama ve izleme, mikroservis mimarisinin olmazsa olmazıdır. JSON formatında loglama yapılandırması:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

Production ortamında ELK stack (Elasticsearch, Logstash, Kibana) veya Prometheus + Grafana kullanmanızı öneririz.

Docker Compose vs Kubernetes: Karşılaştırma

Mikroservis orkestrasyonu için Docker Compose ve Kubernetes arasındaki temel farkları bilmek doğru karar vermenizi sağlar:

Özellik Docker Compose Kubernetes
Kurulum Kolaylığı Kolay (tek makine) Karmaşık (çoklu node)
Ölçeklendirme Manuel/Basit Otomatik/Advanced
Self-Healing Sınırlı Tam destek
Load Balancing Temel Gelişmiş
Service Discovery Docker DNS Internal DNS + Ingress
Rolling Updates Manuel Otomatik
Use Case Dev/Test/Small Prod Production/Enterprise

Küçük ve orta ölçekli projeler için Docker Compose yeterli olabilirken, büyük production ortamları için Kubernetes tabanlı çözümler daha uygundur.

Mikroservis Pattern'leri ve Docker Compose Uygulamaları

1. API Gateway Pattern

API Gateway, tüm istemci isteklerini tek bir noktadan yönetir ve uygun mikroservislere yönlendirir. Nginx reverse proxy olarak kullanılabilir:

services:
  api-gateway:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "80:80"
      - "443:443"

2. Circuit Breaker Pattern

Bir servisin başarısız olması durumunda kaskad etkileri önlemek için circuit breaker kullanılır. Bu, Resilience4j veya Hystrix gibi kütüphanelerle implementasyon gerektirir.

3. Event-Driven Architecture

Mikroservisler arası asenkron iletişim için message broker kullanılır:

services:
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"
  
  order-service:
    build: ./order
    depends_on:
      - rabbitmq
    environment:
      - RABBITMQ_HOST=rabbitmq

CI/CD Pipeline Entegrasyonu

Modern mikroservis deployment'ları için CI/CD pipeline kritik öneme sahiptir. Aşağıda tipik bir GitLab CI veya GitHub Actions yapılandırması örneği verilmiştir:

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - docker-compose build
    - docker-compose push $IMAGE_REGISTRY

test:
  stage: test
  script:
    - docker-compose up -d
    - docker-compose run --rm test-service

deploy:
  stage: deploy
  script:
    - docker-compose -f docker-compose.prod.yml up -d
  only:
    - main

Sık Yapılan Hatalar ve Çözümleri

1. Tüm Servisleri Tek Compose Dosyasında Tutma

Büyük projelerde tüm servisleri tek dosyada tutmak yönetimi zorlaştırır. Bunun yerine override dosyaları kullanın:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

2. Sağlık Kontrollerini Atlama

Health check eklenmemiş container'lar, bağımlı servislerin erken başlamasına neden olabilir. Her zaman health check tanımlayın.

3. Volume'ları Unutma

Veri kalıcılığı için volume tanımlamazsanız, container silindiğinde veriler kaybolur. Sunucularda disk alanı dolu hatası çözümleri için ilgili makalemizi inceleyebilirsiniz.

4. Environment Variable'ları Hardcode Etme

Hassas bilgileri (şifreler, API anahtarları) doğrudan compose dosyasına yazmayın. .env dosyaları veya secret management araçları kullanın.

Nginx ile Reverse Proxy Yapılandırması

Birden fazla mikroservisi tek bir domain altında sunmak için Nginx reverse proxy kullanılır:

upstream auth {
    server auth-service:5000;
}

upstream user {
    server user-service:5001;
}

server {
    location /auth/ {
        proxy_pass http://auth/;
        proxy_set_header Host $host;
    }
    
    location /user/ {
        proxy_pass http://user/;
        proxy_set_header Host $host;
    }
}

Nginx önbelle

library_booksBenzer İçerikler

Cloud Sunucu Nedir? Avantajları ve Detaylı Rehber
Sunucu Yönetimi
calendar_today5 Nisan 2026
schedule5 dk

Cloud Sunucu Nedir? Avantajları ve Detaylı Rehber

Cloud sunucular, dinamik kaynak dağıtımıyla işletmelerin kesintisiz büyümesini sağlar. Avantajlardan karşılaştırmalara tüm detaylar bu rehberde yer alıyor.

S
Serversiumarrow_forward
Linux vs Windows Sunucu: Hangisi Projeye Uygun?
Sunucu Yönetimi
calendar_today6 Nisan 2026
schedule5 dk

Linux vs Windows Sunucu: Hangisi Projeye Uygun?

Linux ve Windows Sunucu arasındaki teknik farkları, maliyet avantajlarını ve proje uyumluluğunu detaylı olarak karşılaştırıyoruz. Yazılım stack'inize en uygun işletim sistemini seçmek için kapsamlı rehberimizle doğru altyapı kararını verin.

S
Serversiumarrow_forward
Plesk Kurulumu - Ubuntu 24 Üzerinde Adım Adım Rehber
Sunucu Yönetimi
calendar_today16 Nisan 2026
schedule5 dk

Plesk Kurulumu - Ubuntu 24 Üzerinde Adım Adım Rehber

Ubuntu 24 üzerinde Plesk kurulumunu adım adım öğrenin. Bu rehberde sistem gereksinimleri, kurulum adımları ve temel yapılandırma ayarlarını bulabilirsiniz.

S
Serversiumarrow_forward