Blogchevron_rightSunucu Yönetimichevron_rightDocker Compose ile Gelişmiş Konteyner Orkestrasyonu: Kapsamlı Rehber

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

S
Serversium
calendar_today28 Mayıs 2026
schedule5 dk okuma
Docker Compose ile Gelişmiş Konteyner Orkestrasyonu: Kapsamlı Rehber

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

Docker Compose, modern yazılım geliştirme süreçlerinin temel taşlarından biri haline gelmiştir. İstatistiklere göre, container tabanlı uygulama geliştiren ekiplerin %78'i Docker Compose'u aktif olarak kullanmaktadır (Docker Developer Survey 2023). Bu rehberde, Docker Compose ile gelişmiş konteyner orkestrasyonunun tüm yönlerini detaylı olarak inceleyeceğiz.

Docker Compose Nedir ve Neden Kullanılır?

Docker Compose, çoklu konteyner uygulamalarını tanımlamak ve çalıştırmak için kullanılan bir araçtır. Tek bir YAML dosyası ile tüm servisleri, ağları ve volumeleri yapılandırabilirsiniz. Geleneksel manuel konteyner yönetimine kıyasla %60'a varan zaman tasarrufu sağlar.

Docker Compose'un temel avantajları şunlardır:

  • Tek Dosya Yönetimi: Tüm konfigürasyonlar tek bir docker-compose.yml dosyasında
  • Hızlı Dağıtım: Tek komutla tüm servisleri başlatma
  • Ortam Bağımsızlığı: Geliştirme, test ve üretim ortamları arasında kolay geçiş
  • Servis Bağımlılıkları: Otomatik servis sıralaması ve başlatma

Docker Compose Temel Yapısı ve Kurulum

Docker Compose'u kullanmaya başlamak için öncelikle sisteminizde Docker'ın kurulu olması gerekir. Ubuntu veya Debian tabanlı sistemlerde kurulum için Docker CI/CD Rehberi'mizi inceleyebilirsiniz.

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend
  app:
    build: .
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://db:5432/app
    networks:
      - frontend
      - backend
  db:
    image: postgres:15
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - backend

networks:
  frontend:
  backend:

volumes:
  db_data:

Gelişmiş Özellikler ve Yapılandırma Seçenekleri

1. Health Check Yapılandırması

Production ortamlarında konteynerlerin sağlık durumunu izlemek kritik önem taşır. Docker Compose,.healthcheck özelliği ile bu işlevi sunar:

services:
  api:
    image: node:18-alpine
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

Bu yapılandırma, konteynerin sağlık durumunu 30 saniye aralıklarla kontrol eder ve 3 başarısız denemeden sonra sağlıksız olarak işaretler.

2. Resource Limits ve CPU Yönetimi

Sunucu kaynaklarını verimli kullanmak için limitler belirlemek önemlidir. Özellikle sanal sunucu kaynak limitleri planlanırken bu ayarlar kritik rol oynar:

services:
  database:
    image: postgres:15
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 4G
        reservations:
          cpus: '1.0'
          memory: 2G

3. Otomatik Yeniden Başlatma

Production ortamlarında konteynerlerin otomatik olarak yeniden başlatılması için restart_policy yapılandırması kullanılır:

services:
  webapp:
    image: myapp:latest
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

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

Birçok geliştirici, Docker Compose ile Kubernetes arasında seçim yapmakta zorlanır. Aşağıdaki karşılaştırma tablosu karar vermenize yardımcı olacaktır:

Özellik Docker Compose Kubernetes
Kurulum Karmaşıklığı Düşük Yüksek
Ölçeklendirme Manuel Otomatik
Yük Dengeleme Temel Gelişmiş
Öğrenme Eğrisi Düşük Yüksek
Uygun Kullanım Geliştirme/Test Production
Self-Healing Sınırlı Gelişmiş

Kubernetes'in daha gelişmiş özellikler sunduğu durumlar olsa da, küçük ve orta ölçekli uygulamalar için Docker Compose genellikle yeterlidir ve daha hızlı bir geliştirme deneyimi sağlar.

Ağ Yapılandırması ve İzolasyon

Docker Compose'ta ağ izolasyonu, uygulamaların güvenliğini sağlamak için temel birzelliktir. Özellikle sunucu güvenliği açısından doğru ağ yapılandırması kritik önem taşır.

networks:
  frontend:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16
  backend:
    driver: bridge
    internal: true
  database_network:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: br-db

Bu yapılandırma ile frontend ağı dışarıya açık, backend ağı internal ve database ağı izole edilmiş olur.

Çoklu Ortam Yönetimi

Geliştirme, staging ve production ortamları için farklı yapılandırma dosyaları kullanmak yaygın bir pratiktir:

# docker-compose.yml (base)
services:
  app:
    image: myapp:${TAG:-latest}
    
# docker-compose.dev.yml
services:
  app:
    environment:
      - NODE_ENV=development
      - DEBUG=true
    volumes:
      - ./src:/app/src
    
# docker-compose.prod.yml  
services:
  app:
    environment:
      - NODE_ENV=production
    deploy:
      replicas: 3
    restart_policy:
      condition: on-failure

Ortam değişkenlerini yönetmek için .env dosyası kullanabilirsiniz:

# .env dosyası
TAG=1.0.0
COMPOSE_PROJECT_NAME=myapp
DATABASE_PASSWORD=secure_password_here

Farklı ortamlarda çalıştırmak için:

# Development ortamı
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

# Production ortamı
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Veri Yönetimi ve Persistent Storage

Konteyner verilerini kalıcı hale getirmek için volume yapılandırması kullanılır. S3 uyumlu depolama çözümleri ile entegre edebilirsiniz:

services:
  db:
    image: postgres:15
    volumes:
      - db_data:/var/lib/postgresql/data
      - ./backups:/backups
    environment:
      - POSTGRES_PASSWORD=${DB_PASSWORD}

volumes:
  db_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /mnt/data/postgres

Backup stratejileri için sunucu taşıma ve veri kaybı önleme rehberimize göz atabilirsiniz.

Compose ile Ölçeklendirme ve Load Balancing

Docker Compose'un deploy özelliği ile yatay ölçeklendirme yapabilirsiniz:

services:
  api:
    image: myapi:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: rollback
      restart_policy:
        condition: on-failure
    ports:
      - "3000:3000"
    networks:
      - backend
    
networks:
  backend:
    driver: overlay
    attachable: true

Önemli: Overlay ağ kullanmak için öncelikle Docker Swarm modunu etkinleştirmeniz gerekir:

docker swarm init
docker stack deploy -c docker-compose.yml myapp

Build ve Build Arg Kullanımı

Custom image build etmek için build context kullanılır:

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.prod
      args:
        - NODE_ENV=production
        - BUILD_DATE=${BUILD_DATE}
    environment:
      - NODE_ENV=production
    labels:
      - "app.backend=api"
      - "version=1.0"

Build arg'leri .env dosyasından çekmek için:

# .env
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%MZ")

Log Yönetimi ve İzleme

Production ortamlarında log yönetimi kritik öneme sahiptir. Docker Compose ile log yapılandırması:

services:
  app:
    image: myapp:latest
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    labels:
      - "com.app.name=myapp"

Harici log yönetimi için Fluentd veya Elasticsearch entegre edilebilir:

services:
  app:
    logging:
      driver: "fluentd"
      options:
        fluentd-address: fluentd:24224
        fluentd-async: "true"
        fluentd-buffer-limit: "8m"
        fluentd-retry-wait: "1s"
        fluentd-max-retries: "10"

Docker Compose ve Veritabanı Bağlantı Havuzu

Yüksek performanslı uygulamalar için veritabanı bağlantı havuzu configuration'ı önemlidir. Connection pooling konseptini doğru uygulamak, uygulama performansını önemli ölçüde artırır:

services:
  api:
    image: myapi:latest
    environment:
      - DB_HOST=postgres
      - DB_POOL_SIZE=20
      - DB_MAX_OVERFLOW=10
      - DB_TIMEOUT=30
    depends_on:
      postgres:
        condition: service_healthy
        
  postgres:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U appuser"]
      interval: 10s
      timeout: 5s
      retries: 5

Docker Compose Best Practices

Production ortamında Docker Compose kullanırken dikkat edilmesi gereken en iyi pratikler:

  1. Always Specify Tags: Her zaman spesifik image tag'leri kullanın (latest yerine 1.0.0 gibi)
  2. Use Health Checks: Tüm servisler için health check tanımlayın
  3. Set Resource Limits: Production için mutlaka kaynak limitleri belirleyin
  4. Secret Management: Hassas bilgiler için Docker secrets veya harici secret yöneticileri kullanın
  5. Labels for Orchestration: Servisleri izlemek için anlamlı label'lar ekleyin
  6. Multi-stage Builds: Image boyutunu optimize etmek için multi-stage build kullanın
  7. Exit Codes: Konteyner crash durumlarını izlemek için exit code log'larını takip edin

Secret ve Config Yönetimi

Docker Compose'da hassas bilgileri güvenli şekilde yönetmek için secret ve config özellikleri kullanılır:

services:
  db:
    image: postgres:15
    secrets:
      - db_password
    environment:
      - POSTGRES_PASSWORD_FILE=/run/secrets/db_password
      
configs:
  nginx_config:
    file: ./nginx.conf

secrets:
  db_password:
    file: ./secrets/db_password.txt

Bu yaklaşım, hassas bilgilerin environment variable'larda plaintext olarak saklanmasını önler.

Performance Optimizasyonu

Docker Compose performansını artırmak için PHP OPcache gibi araçları yapılandırabilirsiniz. PHP OPcache yapılandırma rehberimiz konteyner içi optimizasyonlar için faydalı bilgiler içerir.

services:
  php:
    image: php:8.2-fpm
    volumes:
      - ./app:/var/www/html
    environment:
      - PHP_OPCACHE_ENABLE=1
      - PHP_OPCACHE_MEMORY_CONSUMPTION=256
      - PHP_OPCACHE_MAX_ACCELERATED_FILES=10000

Monitoring ve Alerting

Docker Compose servislerini izlemek için Prometheus ve Grafana kullanabilir

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