Teknoloji ipuçlarını kendin uygula
İçerik
Son yazılar
Biz kimiz
Yazılım Atölyesi, adım adım teknoloji rehberleriyle kendi başına öğrenip uygulama yapmak isteyenlere yardımcı olur. Pratik ipuçları, araç önerileri ve çözümler bulacaksınız.

Docker Compose ile Çoklu Konteyner Kurulum

Tek bir konteyner çalıştırmak kolay. İşin zorlaştığı yer, uygulamanın yanına bir veritabanı, bir önbellek ve belki bir ters proxy eklediğiniz an. Her biri için ayrı ayrı docker run komutu yazmak, portları ve ağ isimlerini hatırlamak zamanla dayanılmaz olur. Docker Compose tam bu noktada devreye girer: tüm servisleri tek bir YAML dosyasında tanımlarsınız, tek komutla ayağa kaldırırsınız.

Aşağıdaki adımları kendi makinenizde uygulayarak ilerleyin. Konteyner mantığına yeniyseniz önce temel kavramları (imaj, konteyner, volume) tazelemeniz işinizi kolaylaştırır.

Compose Dosyasını Sıfırdan Kurmak

Compose, proje kökündeki compose.yaml (veya eski adıyla docker-compose.yml) dosyasını okur. Dosya, servislerin listesinden oluşur. Her servis bir imajdan türeyen bir konteynerdir.

Dizin yapısı ve ilk servis

Basit bir web + veritabanı senaryosu için şu yapıyı kurun:

YAML dosyasında girintiler boşlukla verilir, sekme karakteri hata üretir. Kök seviyede services anahtarı bulunur. Altına servis adını yazarsınız: örneğin web ve db. Servis adı aynı zamanda ağ içindeki host adıdır. Yani uygulamanız veritabanına db:5432 adresiyle bağlanır, localhost ile değil. Yeni başlayanların en sık takıldığı yer burasıdır.

Sık kullanılan anahtarlar

AnahtarNe yapar
imageHazır imajı çeker (örn. postgres:16)
buildBelirtilen dizindeki Dockerfile'ı derler
portsHost portunu konteyner portuna bağlar (8080:80)
environmentOrtam değişkenlerini geçirir
volumesKalıcı veri veya kod bağlar
depends_onBaşlatma sırasını belirler
restartÇökme sonrası davranış (unless-stopped)

Veritabanı servisine mutlaka adlandırılmış bir volume verin. Aksi halde konteyneri sildiğinizde veriler de gider. Kök seviyeye ayrı bir volumes bloğu ekleyip orada volume adını tanımlarsınız.

Gizli bilgileri .env dosyasına taşımak

Parolayı YAML içine gömmeyin. .env dosyasına DB_PASSWORD=... şeklinde yazın, YAML içinde ${DB_PASSWORD} olarak kullanın. Compose bu dosyayı otomatik okur. .env dosyasını da .gitignore listesine ekleyin; şifre saklama alışkanlıklarını ciddiye almak, sürüm geçmişine sızmış bir parolayı temizlemekten çok daha kolaydır.

Günlük Kullanım ve Sorun Giderme

Dosya hazır olduğunda iş komutlara geçer. Compose komutlarının tamamı, dosyanın bulunduğu dizinde çalıştırılır.

Temel komut seti

  1. docker compose up -d — servisleri arka planda başlatır.
  2. docker compose ps — hangi servis ayakta, hangi port açık gösterir.
  3. docker compose logs -f web — tek servisin loglarını canlı izler.
  4. docker compose exec db psql -U postgres — çalışan konteynerin içine girip komut çalıştırır.
  5. docker compose down — konteynerleri ve ağı kaldırır, volume'lara dokunmaz.
  6. docker compose down -v — volume'ları da siler. Sıfırdan başlamak istediğinizde kullanın.

Kod değiştirdiğinizde docker compose up -d --build demeniz gerekir. Sadece up yazarsanız Compose eski imajı kullanmaya devam eder ve "değişikliğim neden görünmüyor" sorusuna saatler harcarsınız.

Bağımlılık ve sağlık kontrolü

depends_on yalnızca konteynerin başlatılmasını bekler; içindeki servisin hazır olmasını beklemez. Veritabanı henüz bağlantı kabul etmiyorken uygulama ayağa kalkar ve çöker. Çözüm iki katmanlı:

Tipik hatalar ve hızlı çözümler