Blogchevron_rightSunucu Yönetimichevron_rightDocker Compose Nedir? Kapsamlı Kullanım Rehberi 2024

Docker Compose Nedir? Kapsamlı Kullanım Rehberi 2024

S
Serversium
calendar_today18 Mayıs 2026
schedule5 dk okuma
Docker Compose Nedir? Kapsamlı Kullanım Rehberi 2024

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ı aracılığıyla tüm servisleri, ağları ve hacimleri yapılandırmanıza olanak tanır. Docker konteyner teknolojisi ile birlikte kullanıldığında, geliştirme ve üretim ortamlarında tutarlılık sağlar.

2024 itibarıyla Docker kullanı istatistiklerine göre, kurumsal ortamların %67'si çoklu konteyner dağıtımları için Docker Compose veya benzeri orkestrasyon araçlarını tercih etmektedir. Bu araç, özellikle mikro hizmet mimarilerinde kritik bir öneme sahiptir.

Docker Compose'ın Temel Avantajları

  • Tek Dosya Yönetimi: Tüm servisler tek bir compose dosyasında tanımlanır
  • Hızlı Başlatma: Tek komutla tüm ortamı ayağa kaldırabilirsiniz
  • Ortam Tutarlılığı: Geliştirme, test ve üretim ortamlarında aynı yapılandırma
  • Bağımlılık Yönetimi: Servisler arası bağımlılıkları otomatik olarak çözer
  • Kolay Ölçeklendirme: Servisleri yatay olarak kolayca ölçeklendirebilirsiniz

Docker Compose Kurulumu

Docker Compose'u kullanmadan önce sisteminizde Docker'ın kurulu olması gerekir. Kurulum için aşağıdaki adımları izleyebilirsiniz.

Linux'ta Kurulum

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

Docker Desktop ile Kurulum

Windows veya macOS kullanıyorsanız, Docker Desktop'u indirdiğinizde Docker Compose otomatik olarak kurulur. Bu yöntem en basit kurulum seçeneğidir ve bulut sunucu yönetimi için de önerilir.

Docker Compose Dosya Yapısı (docker-compose.yml)

Docker Compose'un kalbi olan docker-compose.yml dosyası, tüm uygulama yapılandırmasını içerir. Doğru syntax kullanımı, hatasız bir dağıtım için kritiktir.

Temel Yapı ve Sürüm Uyumsuzluğu

version: '3.8'  # Docker Engine sürümüne uygun sürüm seçin
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend-network
  
  app:
    build: .
    environment:
      - NODE_ENV=production
    depends_on:
      - db
    networks:
      - frontend-network
      - backend-network
  
  db:
    image: postgres:15
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secure_password
    networks:
      - backend-network

networks:
  frontend-network:
  backend-network:

volumes:
  postgres-data:

Sürüm uyumsuzluğu hakkında: Docker Compose sürüm 2.x ve 3.x arasında bazı farklılıklar vardır. Güncel olarak Docker Engine 20.x+ için sürüm 3.8 önerilmektedir.

Servis Tanımlama Seçenekleri

Her servis için kullanabileceğiniz temel yapılandırma seçenekleri şunlardır:

Parametre Açıklama Örnek
image Kullanılacak Docker imajı nginx:alpine
build Dockerfile yolu build: ./app
ports Port eşleme "80:8080"
volumes Veri hacmi bağlama ./data:/app/data
environment Ortam değişkenleri NODE_ENV=production
depends_on Servis bağımlılıkları depends_on: db
networks Ağ yapılandırması my-network
restart Yeniden başlatma politikası always

Docker Compose Temel Komutları

Docker Compose ile çalışırken sıklıkla kullanacağınız temel komutları aşağıda bulabilirsiniz.

Servisleri Başlatma ve Durdurma

# Tüm servisleri arka planda başlat
docker-compose up -d

# Belirli bir dosya ile başlat
docker-compose -f custom-compose.yml up -d

# Servisleri yeniden oluştur
docker-compose up -d --force-recreate

# Servisleri durdur ve temizle
docker-compose down

Servisleri İzleme ve Yönetme

# Çalışan servisleri listele
docker-compose ps

# Servis loglarını takip et
docker-compose logs -f

# Belirli bir servisin loglarını görüntüle
docker-compose logs -f web

# Servisleri ölçeklendir
docker-compose up -d --scale web=3

# Servislerde bash komutu çalıştır
docker-compose exec app bash

Bu komutlar, özellikle yük dengeleyici kurulumlarında birden fazla kopya çalıştırırken kritik önem taşır.

Yapılandırma Doğrulama

# YAML dosyasını doğrula
docker-compose config

# Hizmetleri yeniden oluştur
docker-compose build

# Kullanılmayan hacimleri temizle
docker-compose down -v

Pratik Örnek: LAMP Stack Kurulumu

Gerçek bir senaryo olarak, Docker Compose ile tam teşekküllü bir LAMP (Linux, Apache, MySQL, PHP) stack kuralım.

Proje Yapısı

project/
├── docker-compose.yml
├── html/
│   └── index.php
└── mysql/
    └── init.sql

docker-compose.yml İçeriği

version: '3.8'

services:
  web:
    image: php:8.2-apache
    ports:
      - "80:80"
    volumes:
      - ./html:/var/www/html
    depends_on:
      - db
    networks:
      - lamp-network
  
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: myapp
      MYSQL_USER: appuser
      MYSQL_PASSWORD: apppass
    volumes:
      - mysql-data:/var/lib/mysql
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - lamp-network
  
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
    ports:
      - "8080:80"
    depends_on:
      - db
    networks:
      - lamp-network

networks:
  lamp-network:
    driver: bridge

volumes:
  mysql-data:

index.php Örneği

<?php
$host = 'db';
$db   = 'myapp';
$user = 'appuser';
$pass = 'apppass';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$pdo = new PDO($dsn, $user, $pass);

echo "<h1>Docker Compose ile LAMP Stack</h1>";
echo "<p>Veritabanı bağlantısı başarılı!</p>";
?>

Kurulum ve Çalıştırma

# Projeyi başlat
docker-compose up -d

# Servislerin durumunu kontrol et
docker-compose ps

# Web arayüzüne erişim
# Tarayıcıda http://localhost:80 adresine gidin

# phpMyAdmin erişimi  
# Tarayıcıda http://localhost:8080 adresine gidin

Ortam Değişkenleri ve Yapılandırma

Güvenli ve esnek bir yapılandırma için ortam değişkenlerini doğru şekilde kullanmalısınız.

.env Dosyası Kullanımı

# .env dosyası
COMPOSE_PROJECT_NAME=myapp
COMPOSE_FILE=docker-compose.yml

# Veritabanı
DB_ROOT_PASSWORD=secure_root_password
DB_PASSWORD=secure_user_password

# Uygulama
APP_ENV=production
LOG_LEVEL=error

docker-compose.yml'de .env Kullanımı

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    env_file:
      - .env

Bu yöntem, kurumsal e-posta sunucuları gibi hassas veriler içeren uygulamalarda güvenlik açısından önemlidir.

Ağ Yönetimi ve İzolasyon

Docker Compose'ta ağ yapılandırması, servisler arası iletişimi ve izolasyonu yönetmek için kullanılır.

Ağ Türleri

td>Ağ bağlantısı yok
Ağ Türü Açıklama Kullanım Senaryosu
bridge Varsayılan ağ sürücüsü, konteynerler arası iletişim Standart uygulamalar
host Host makineyle aynı ağ namespace'i Performans kritik uygulamalar
overlay Çoklu Docker host arası ağ Swarm modu
none Güvenlik kritik izolasyon

Özel Ağ Yapılandırması

networks:
  frontend:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16
  
  backend:
    driver: bridge
    internal: true  # Harici erişimi engeller

services:
  web:
    networks:
      - frontend
  
  api:
    networks:
      - frontend
      - backend
  
  database:
    networks:
      - backend

Veri Hacimleri ve Kalıcılık

Konteynerler geçici yapılar olduğundan, veri kalıcılığı için hacimleri doğru şekilde yapılandırmalısınız.

Named Volumes

services:
  db:
    image: postgres:15
    volumes:
      - pgdata:/var/lib/postgresql/data
    volumes:
      - ./backups:/backups  # Host'tan bağlama

volumes:
  pgdata:  # Named volume

Volume Yönetimi

# Hacimleri listele
docker volume ls

# Hacim bilgilerini görüntüle
docker volume inspect project_pgdata

# Kullanılmayan hacimleri temizle
docker volume prune

Bu yapılandırma, depolama sunucusu çözümleriyle entegre edilebilir.

Docker Compose ve Docker Swarm Entegrasyonu

Büyük ölçekli dağıtımlar için Docker Swarm ile entegrasyon kritik öneme sahiptir.

Swarm Modunda Deploy

# Swarm'ı başlat
docker swarm init

# Stack olarak deploy et
docker stack deploy -c docker-compose.yml myapp

# Stack'leri listele
docker stack ls

# Stack servislerini görüntüle
docker stack services myapp

# Stack'i kaldır
docker stack rm myapp

Deployment Yapılandırması

services:
  web:
    image: nginx:alpine
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: rollback
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
    placement:
      constraints:
        - node.role == worker

İleri Düzey Yapılandırma

Health Check Tanımlama

services:
  web:
    image: nginx:alpine
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://localhost/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
  
  db:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

Resource Limits

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