Blogchevron_rightSunucu Yönetimichevron_rightDocker Compose ile Gelişmiş Stack Yapılandırma Rehberi

Docker Compose ile Gelişmiş Stack Yapılandırma Rehberi

S
Serversium
calendar_today24 Temmuz 2026
schedule5 dk okuma
Docker Compose ile Gelişmiş Stack Yapılandırma Rehberi

Docker Compose ile Gelişmiş Uygulama ve Veritabanı Stack: Kapsamlı Rehber

Modern yazılım geliştirme süreçlerinde konteyner teknolojileri, uygulama dağıtımının temel yapı taşı haline gelmiştir. Docker Compose, çoklu konteyner uygulamalarını tanımlamak ve çalıştırmak için kullanılan güçlü bir araçtır. Bu rehberde, Docker Compose ile gelişmiş uygulama ve veritabanı stack'lerinin nasıl oluşturulacağını detaylı olarak inceleyeceğiz.

Docker'ın 2024 verilerine göre, kurumsal ortamlarda konteyner kullanımı %40 oranında artmış durumda ve Docker Compose en yaygın kullanılan orkestrasyon aracı olarak öne çıkmaktadır.

Docker Compose Nedir ve Neden Kullanılmalıdır?

Docker Compose, birden fazla konteyneri tek bir yapılandırma dosyası ile tanımlamanıza ve yönetmenize olanak tanıyan bir araçtır. Docker Swarm ile karşılaştırıldığında, Compose daha küçük ölçekli projeler için idealdir ve geliştirme ortamlarında hızlı kurulum sağlar.

Gelişmiş docker-compose.yml Yapılandırması

Gelişmiş bir Docker Compose yapılandırması, sadece temel servis tanımlamalarının ötesine geçer. Aşağıda profesyonel bir stack yapılandırması için gerekli bileşenleri inceleyeceğiz.

Temel Yapı ve Servis Tanımlama

version: '3.8'

services:
  app:
    build: 
      context: ./app
      dockerfile: Dockerfile
    container_name: myapp_backend
    restart: unless-stopped
    environment:
      - NODE_ENV=production
      - DB_HOST=postgres
      - REDIS_HOST=redis
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    networks:
      - app-network
    volumes:
      - app-data:/app/data

  postgres:
    image: postgres:15-alpine
    container_name: myapp_postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    networks:
      - app-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin -d myapp"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    container_name: myapp_redis
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3

networks:
  app-network:
    driver: bridge

volumes:
  app-data:
  postgres-data:
  redis-data:

Environment Variables ve Güvenlik

Hassas bilgileri doğrudan compose dosyasında saklamak yerine .env dosyaları kullanılmalıdır. Docker Compose, otomatik olarak proje dizinindeki .env dosyasını okur.

Üretim ortamlarında, bu değişkenlerin harici bir secret yönetim sisteminden çekilmesi önerilir. Sunucu güvenliği açısından AES-256 şifreleme kullanılarak secret'ların yönetilmesi kritik öneme sahiptir.

Veritabanı Konfigürasyonu ve Optimizasyonu

Gelişmiş veritabanı stack'leri, yalnızca veritabanı sunucusunu değil, yedekleme, izleme ve yüksek kullanılabilirlik bileşenlerini de içerir.

PostgreSQL Gelişmiş Yapılandırması

PostgreSQL konteynerinde performans optimizasyonu için aşağıdaki parametreler ayarlanmalıdır:

  • shared_buffers: RAM'in %25'i kadar ayarlanmalı
  • work_mem: Her bir sorgu için 64-256MB arası
  • maintenance_work_mem: Bakım işlemleri için 256MB+
  • max_connections: Uygulama ihtiyaçlarına göre 100-500 arası
  postgres:
    image: postgres:15-alpine
    command: >
      postgres
      -c shared_buffers=256MB
      -c work_mem=16MB
      -c maintenance_work_mem=512MB
      -c max_connections=200
      -c effective_cache_size=1GB
    # Diğer konfigürasyonlar...

Veritabanı Yedekleme Stratejisi

Düzenli yedekleme, veri güvenliğinin temel taşlarından biridir. Aşağıdaki yapılandırma ile otomatik yedekleme sistemi kurulabilir:

  backup:
    image: postgres:15-alpine
    container_name: myapp_backup
    volumes:
      - ./backups:/backups
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_DB=myapp
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    command: >
      /bin/sh -c "
      while true; do
        pg_dump -h postgres -U admin myapp > /backups/backup_$$(date +%Y%m%d_%H%M%S).sql
        find /backups -name '*.sql' -mtime +7 -delete
        sleep 86400
      done"
    depends_on:
      - postgres

Health Checks ve İzleme

Production ortamlarında health check'ler, servislerin sağlığını izlemek ve otomatik yeniden başlatma mekanizmalarını tetiklemek için kritik öneme sahiptir. System load değerlerini izlemek için kullanılan araçlar ile entegre edilebilir.

Comprehensive Health Check Örneği

services:
  app:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
      start_interval: 5s

  postgres:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin -d myapp && pg_health_check"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  redis:
    healthcheck:
      test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 15s
      timeout: 5s
      retries: 3

Ağ Yapılandırması ve İzolasyon

Docker Compose'da ağ izolasyonu, güvenlik açısından büyük önem taşır. Her stack için ayrı ağlar oluşturulması, servisler arası iletişimin kontrol altında tutulmasını sağlar.

İleri Düzey Ağ Konfigürasyonu

networks:
  frontend:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16
  
  backend:
    driver: bridge
    ipam:
      config:
        - subnet: 172.29.0.0/16
  
  database:
    driver: bridge
    internal: true
    ipam:
      config:
        - subnet: 172.30.0.0/16

services:
  nginx:
    networks:
      - frontend
      - backend
  
  app:
    networks:
      - backend
      - database
  
  postgres:
    networks:
      - database

Bu yapılandırma ile veritabanı ağı tamamen izole edilir ve sadece uygulama sunucusu bu ağa erişim sağlar.

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

Veri kalıcılığı, özellikle veritabanı ve dosya sistemi gerektiren uygulamalarda kritik öneme sahiptir. Hosting çözümlerinde volume yönetimi doğru yapılandırılmalıdır.

Named Volumes ve Bind Mounts

Volume TipiKullanım AmacıÖrnek
Named VolumesVeritabanı verileri, kalıcı uygulama verileripostgres-data:/var/lib/postgresql/data
Bind MountsKonfigürasyon dosyaları, geliştirme kodları./config:/app/config:ro
tmpfsGeçici, hassas verilertmpfs:/run/secrets

Volume Backup Stratejisi

  backup-tool:
    image: alpine:latest
    container_name: volume_backup
    volumes:
      - postgres-data:/source:ro
      - ./backups:/destination
    command: >
      /bin/sh -c "
      tar czf /destination/postgres_backup_$$(date +%Y%m%d).tar.gz -C /source ."

Yük Dengeleme ve Ölçeklendirme

Docker Compose, tek başına yük dengeleme sağlamaz; ancak Nginx gibi bir reverse proxy ile entegre edilerek yük dengeleme yapılabilir. Nginx vs Caddy karşılaştırması bu noktada önemli bir referans kaynağıdır.

Nginx ile Yük Dengeleme

  nginx:
    image: nginx:alpine
    container_name: myapp_nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - app
    networks:
      - frontend
    healthcheck:
      test: ["CMD", "nginx", "-t"]
      interval: 30s
      timeout: 10s
      retries: 3
upstream app_backend {
  least_conn;
  server app:3000 weight=3;
  server app2:3000 weight=2;
  keepalive 32;
}

server {
  listen 80;
  server_name example.com;
  
  location / {
    proxy_pass http://app_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

Log Yönetimi ve Merkezi logging

Production ortamlarında log yönetimi, hata ayıklama ve sistem izleme için vazgeçilmezdir. Docker Compose, çeşitli log sürücülerini destekler.

JSON Log Çıktısı ve Fluentd Entegrasyonu

services:
  app:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    
  postgres:
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: postgres.{{.Name}}

Production Ortamına Geçiş

Geliştirme ortamından production ortamına geçiş, dikkatli bir planlama gerektirir. Aşağıdaki kontrol listesi bu geçiş için rehber niteliğindedir:

  1. Environment Değişkenleri: Tüm hassas bilgiler .env dosyasından çekilmeli
  2. Health Checks: Tüm servislerde health check tanımlanmalı
  3. Restart Policies: unless-stopped veya always kullanılmalı
  4. Resource Limits: CPU ve bellek sınırları belirlenmeli
  5. Log Rotation: Log dosyaları için boyut sınırları ayarlanmalı
  6. SSL/TLS: Güvenli bağlantılar için sertifikalar yapılandırılmalı

Resource Limits Örneği

services:
  app:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M
  
  postgres:
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 4G
        reservations:
          cpus: '0.25'
          memory: 1G

Docker Compose Alternatifleri ile Karşılaştırma

ÖzellikDocker ComposeDocker SwarmKubernetes
Kurulum KolaylığıÇok KolayOrtaZor
ÖlçeklenebilirlikLimitedOrtaYüksek
Otomatik Yük DengelemeYokVarVar
Self-HealingKısmiVarVar
Learning CurveDüşükOrtaYüksek

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