Gerçek dünya uygulamaları nadiren tek bir container’dan ibarettir: bir API sunucusu, bir veritabanı, belki bir Redis cache ve bir reverse proxy — hepsini ayrı ayrı docker run komutlarıyla yönetmek hızla karmaşıklaşır. Docker Compose, bu servisleri tek bir YAML dosyasında tanımlayıp tek komutla ayağa kaldırmanızı sağlar.
Docker Compose ile WordPress nasıl kurulur? (WordPress + MySQL örneği)
Bu portalın kendisinin de kurulumunda kullanılabilecek klasik bir örnek — WordPress ve veritabanını birlikte tanımlayan bir docker-compose.yml:
services:
db:
image: mariadb:10.11
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
MYSQL_ROOT_PASSWORD: rootpass
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
Tüm stack’i ayağa kaldırmak tek bir komut:
docker compose up -d
Dosyanın anatomisi
- services: Her biri kendi container’ında çalışacak parçaları tanımlar (
db,wordpress). - depends_on: Başlatma sırasını belirtir —
wordpress,db‘den sonra başlar (ama veritabanının hazır olduğunu garanti etmez, sadece container’ın başladığını). - environment: Container içine enjekte edilen ortam değişkenleri.
- volumes: Container silinse bile verinin kalıcı olmasını sağlayan isimlendirilmiş diskler.
- ports: Host makinenin portunu container’ın portuna eşler (
host:container).
Servisler arası iletişim
Compose, aynı dosyada tanımlı servisler için otomatik olarak bir ağ (network) oluşturur. Bu sayede wordpress servisi, veritabanına localhost yerine doğrudan servis adıyla (db) ulaşabilir — Docker’ın dahili DNS çözümlemesi bunu otomatik halleder.
Ortam değişkenlerini ve parolaları doğrudan docker-compose.yml içine yazmak yerine, production’da bir .env dosyası veya Docker secrets kullanmak güvenlik açısından önerilir. Bu konuyu Güvenlik bölümünde detaylı işliyoruz.
Sık kullanılan komutlar
docker compose up -d # servisleri arka planda başlat
docker compose ps # çalışan servisleri listele
docker compose logs -f wordpress # belirli bir servisin loglarını takip et
docker compose down # servisleri durdur ve kaldır
docker compose down -v # + isimlendirilmiş volume'leri de sil
Tek makinede birden fazla servisi yönetmeyi öğrendiğinize göre, artık bunu Podman gibi alternatiflerle veya çok makineli orkestrasyon araçlarıyla nasıl karşılaştıracağınıza bakabiliriz.