Blogchevron_rightSunucu Yönetimichevron_rightDocker Compose ile Ortam Ayırma Rehberi: Dev, Test, Prod

Docker Compose ile Ortam Ayırma Rehberi: Dev, Test, Prod

S
Serversium
calendar_today7 Mayıs 2026
schedule5 dk okuma
Docker Compose ile Ortam Ayırma Rehberi: Dev, Test, Prod

Docker Compose ile Geliştirme, Test ve Production Ortamları Ayırma Rehberi

Modern yazılım geliştirme süreçlerinde Docker Compose, uygulamaların farklı ortamlarda tutarlı bir şekilde çalışmasını sağlayan kritik bir araç haline gelmiştir. Docker'ın 2023 raporuna göre, şirketlerin %83'ü container teknolojilerini üretim ortamlarında kullanmakta ve bu oran her yıl artış göstermektedir. Bu makalede, Docker Compose kullanarak geliştirme, test ve production ortamlarını nasıl ayıracağınızı detaylı olarak inceleyeceğiz.

Docker Compose Nedir ve Neden Önemlidir?

Docker Compose, çoklu container 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 volume'ları yapılandırabilirsiniz. Ortam ayrımı yaparken, her ortamın kendine özgü gereksinimlerini karşılamak için farklı compose dosyaları kullanılır.

Ortam Ayrımının Temel Prensipleri

Her ortamın farklı gereksinimleri vardır. Geliştirme ortamında hata ayıklama ve hızlı iterasyon ön planken, production ortamında performans ve güvenlik kritik önem taşır. Bu nedenle ortamları doğru şekilde ayırmak, yazılım kalitesini doğrudan etkiler.

1. Geliştirme Ortamı (Development)

Geliştirme ortamında aşağıdaki özellikler önceliklidir:

  • Hot Reload: Kod değişikliklerinin anında yansıması
  • Detaylı Loglama: Hata ayıklama için kapsamlı log çıktıları
  • Güvenlik gevşemesi: Geliştiricilerin rahatça erişebilmesi
  • Volume bağlama: Kaynak kodun container'a canlı bağlanması

2. Test Ortamı (Testing)

Test ortamı, CI/CD pipeline'ları ile entegre çalışır ve tutarlılık kritiktir. Bu ortamda izole edilmiş sanal sunucu kaynakları kullanılarak gerçekçi test senaryoları çalıştırılır.

3. Production Ortamı

Production ortamında güvenlik, performans ve güvenilirlik en üst seviyededir. Otomatik yeniden başlatma, sağlık kontrolleri ve kaynak sınırları mutlaka yapılandırılmalıdır.

Docker Compose Dosya Yapısı

Temel Dosya Organizasyonu

Docker Compose'da ortam ayrımı için üç farklı yaklaşım kullanılır:

  1. docker-compose.yml: Temel konfigürasyon
  2. docker-compose.override.yml: Yerel geliştirme ayarları
  3. docker-compose.{environment}.yml: Ortama özel dosyalar

Temel docker-compose.yml Yapısı

version: '3.8'

services:
  app:
    image: myapp:latest
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    volumes:
      - ./data:/app/data

  database:
    image: postgres:15
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

Geliştirme Ortamı için Docker Compose Yapılandırması

Geliştirme ortamında docker-compose.override.yml dosyası kullanılarak temel konfigürasyon üzerine eklemeler yapılır. Bu yaklaşım, ana dosyayı değiştirmeden geliştirme spesifik ayarlar eklemenizi sağlar.

docker-compose.override.yml Örneği

version: '3.8'

services:
  app:
    build:
      context: .
      target: development
    environment:
      - NODE_ENV=development
      - DEBUG=true
    volumes:
      - .:/app
      - /app/node_modules
    command: npm run dev
    ports:
      - "3000:3000"
      - "9229:9229"

  database:
    ports:
      - "5432:5432"

Bu yapılandırma ile geliştiriciler, kaynak kodda yaptıkları değişiklikleri anında container'da görebilirler. Nginx Proxy Manager gibi araçlarla entegre ederek local domain'ler üzerinden erişim sağlanabilir.

Test Ortamı için Docker Compose Yapılandırması

Test ortamı için docker-compose.test.yml dosyası oluşturulur. Bu ortamda izole veritabanları ve test için optimize edilmiş kaynaklar kullanılır.

docker-compose.test.yml Örneği

version: '3.8'

services:
  app:
    build:
      context: .
      target: builder
    environment:
      - NODE_ENV=test
      - CI=true
    depends_on:
      - test-db
      - redis
    command: npm test -- --coverage

  test-db:
    image: postgres:15
    environment:
      - POSTGRES_DB=test_db
      - POSTGRES_USER=testuser
      - POSTGRES_PASSWORD=testpass
    tmpfs:
      - /var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    command: redis-server --maxmemory 100mb

Test ortamında tmpfs kullanarak veritabanı verileri memory'de tutularak test hızı artırılır. Bu yaklaşım, her test run'ında temiz bir veritabanı sağlar.

Production Ortamı için Docker Compose Yapılandırması

Production ortamı maximum güvenlik ve performans gerektirir. docker-compose.prod.yml dosyası bu gereksinimleri karşılamak için dikkatli yapılandırılmalıdır.

docker-compose.prod.yml Örneği

version: '3.8'

services:
  app:
    build:
      context: .
      target: production
    restart: unless-stopped
    environment:
      - NODE_ENV=production
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  database:
    image: postgres:15
    restart: unless-stopped
    environment:
      - POSTGRES_DB=proddb
      - POSTGRES_USER=produser
    volumes:
      - db-data:/var/lib/postgresql/data
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1G

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - app
    restart: unless-stopped

Ortam Karşılaştırma Tablosu

Özellik Geliştirme Test Production
Kaynak Kod Etkileşimi Canlı volume bağlama Build edilmiş image Build edilmiş image
Log Seviyesi DEBUG (Detaylı) INFO WARN/ERROR
Veritabanı Local port erişimli İzole, tmpfs Persistent volume, yedeklemeli
Güvenlik Düşük Orta Yüksek (SSL, secrets)
Kaynak Sınırları Yok Orta Katı (CPU/RAM limit)
Restart Policy no on-failure unless-stopped
Health Check İsteğe bağlı Zorunlu Zorunlu

Ortam Değiştirme Komutları

Docker Compose ile ortamlar arası geçiş yapmak için aşağıdaki komutlar kullanılır:

Geliştirme Ortamını Başlatma

docker-compose up -d

Bu komut önce docker-compose.yml, ardından docker-compose.override.yml dosyalarını okuyarak birleştirir.

Test Ortamını Başlatma

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

Production Ortamını Başlatma

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

Production'da --build flag'i kullanılarak image'ın yeniden build edilmesi sağlanır. Bu sayede en güncel kodun deploy edilmesi garanti altına alınır.

Çevre Değişkenleri Yönetimi

Güvenli ortam yönetimi için çevre değişkenleri doğru şekilde yapılandırılmalıdır. Production'da hassas bilgiler (API anahtarları, veritabanı şifreleri) asla YAML dosyalarında plaintext olarak saklanmamalıdır.

.env Dosyası Kullanımı

# .env dosyası (gitignore'a eklenmeli)
DB_PASSWORD=super_secret_password
API_KEY=your_api_key_here
JWT_SECRET=your_jwt_secret
# docker-compose.yml
services:
  app:
    environment:
      - DB_PASSWORD=${DB_PASSWORD}
      - API_KEY=${API_KEY}

Docker secrets kullanarak daha güvenli bir yapı oluşturulabilir. Özellikle production ortamında siber güvenlik önlemleri kapsamında bu kritik öneme sahiptir.

Multi-Stage Build Kullanımı

Her ortam için optimize edilmiş Docker image'ları oluşturmak için multi-stage build'ler kullanılır:

# Dockerfile
FROM node:18-alpine AS base
WORKDIR /app
COPY package*.json ./

FROM base AS builder
RUN npm ci --only=production
COPY . .
RUN npm run build

FROM base AS development
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

FROM builder AS production
USER node
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/main.js"]

Bu yapı ile aynı Dockerfile'dan farklı ortamlar için optimize edilmiş image'lar oluşturulabilir.

En İyi Uygulamalar ve İpuçları

1. Dockerignore Kullanımı

Build süresini hızlandırmak ve image boyutunu küçültmek için .dockerignore dosyası oluşturun:

node_modules
.git
*.md
.env
docker-compose*.yml
.DS_Store
coverage
dist

2. Ağ İzolasyonu

Her ortam için ayrı Docker ağları oluşturarak servis izolasyonu sağlanır:

networks:
  dev-network:
    driver: bridge
  prod-network:
    driver: bridge

3. Health Check Yapılandırması

Tüm kritik servislerde health check kullanılmalıdır:

services:
  app:
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s

4. CI/CD Entegrasyonu

Otomatik test ve deployment için CI/CD pipeline'larında ortam bazlı compose dosyaları kullanılır. GitHub Actions, GitLab CI veya Jenkins gibi araçlarla entegre edilebilir.

Sonuç ve Öneriler

Docker Compose ile ortam ayrımı, yazılım geliştirme süreçlerinde tutarlılık, güvenlik ve verimlilik sağlar. Geliştirme ortamında hız ve esneklik, test ortamında izolasyon ve tutarlılık, production ortamında ise güvenlik ve performans öncelik

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