19.01.2026

Docker Compose Nedir? 30 Dakikada Local Ortam Kur

Docker Compose ile çoklu servisleri tek komutla ayağa kaldırın. Postgres + Redis + API örneğiyle 30 dakikada hazır local ortam.

Docker Compose Nedir? 30 Dakikada Local Ortam Kur

Meta Description

Docker Compose ile Postgres, Redis ve API’yi tek komutla çalıştırın. Hızlı local ortam kurun, ekipte “bende çalışıyor” sorununu bitirin.

Giriş (Introduction)

Yeni bir projeye giriyorsunuz: API, veritabanı, cache, queue… Herkeste farklı sürümler, farklı kurulum adımları. Sonuç: “Bende çalışıyor” tartışmaları, kaybolan saatler ve hatalı ortamlar.

Docker Compose tam burada devreye girer: Birden fazla servisi (ör. Node.js API + PostgreSQL + Redis) tek bir dosyada tanımlar, tek komutla ayağa kaldırır. Bu yazıda Docker Compose nedir, nasıl çalışır ve 30 dakikada üretken bir local geliştirme ortamını nasıl kurarsınız adım adım göreceksiniz.


Docker Compose Nedir? (Anahtar kelime)

Docker Compose, bir uygulamayı oluşturan birden fazla container’ı (servis) tek bir compose.yaml dosyasıyla tanımlayıp yönetmenizi sağlayan araçtır.

Neleri çözer?

  • Aynı projeyi ekipte herkesin aynı şekilde çalıştırmasını sağlar
  • Kurulum dokümanı karmaşasını azaltır
  • Servislerin ağını, portlarını, volume’lerini standartlaştırır
  • Local ortamı prod’a daha yakın hale getirir

Gerçek hayat örneği: Yeni başlayan bir geliştirici “Postgres’i nasıl kuracağım, sürüm kaç, Redis lazım mı?” diye uğraşmadan docker compose up ile 2-3 dakikada hazır ortama geçebilir.


Neden Docker Compose Kullanmalıyım?

“Bunu neden yapmalıyım?” sorusunun net cevapları:

  • Tek komutla kurulum: docker compose up -d
  • Tek dosyada altyapı: Postgres, Redis, admin panel, API… hepsi aynı yerde
  • Hızlı reset: Bozuldu mu? docker compose down -v ile temiz başla
  • Çakışmaları azaltır: Farklı projelerde farklı port/sürüm derdi azalır

Aşağıdaki tabloda klasik kurulumla Compose yaklaşımını kıyaslayalım:

Konu Klasik Kurulum Docker Compose
Onboarding Doküman + manuel adımlar Tek komut + aynı dosya
Sürüm uyumu Herkeste farklı olabilir İmaj sürümü sabitlenir
İzolasyon Sisteme bağımlı Container içinde
Temizleme Zor ve dağınık down -v ile net

Docker Compose Temel Kavramlar (Hızlı Öğren)

Servis (service)

Her container “servis” olarak tanımlanır. Örn: api, db, redis.

Ağ (network)

Compose varsayılan olarak servisleri aynı network’e koyar. Bu sayede API, DB’ye db:5432 ile bağlanabilir.

Volume

Veriyi kalıcı tutmak için kullanılır. Postgres verisi container silinse bile kaybolmaz.

Environment değişkenleri

Şifre, port, DB adı gibi ayarlar.


Adım Adım: Postgres + Redis + Node.js API Kurulumu

Aşağıdaki örnekle Docker Compose kullanarak çalışır bir local ortam kuracağız.

1) Proje yapısını oluştur

mkdir compose-demo && cd compose-demo
mkdir api

2) compose.yaml dosyasını yaz

Proje kök dizinine compose.yaml oluşturun:

services:
  db:
    image: postgres:16
    container_name: demo_postgres
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: apppass
      POSTGRES_DB: appdb
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d appdb"]
      interval: 5s
      timeout: 3s
      retries: 10

  redis:
    image: redis:7
    container_name: demo_redis
    ports:
      - "6379:6379"

  api:
    image: node:20-alpine
    container_name: demo_api
    working_dir: /app
    volumes:
      - ./api:/app
    ports:
      - "3000:3000"
    environment:
      PORT: 3000
      DATABASE_URL: postgresql://app:apppass@db:5432/appdb
      REDIS_URL: redis://redis:6379
    command: sh -c "npm install && node index.js"
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

volumes:
  pgdata:

Neden böyle?

  • depends_on + healthcheck: API, DB hazır olmadan başlamaya çalışıp hata vermesin diye.
  • volumes: Postgres verisi kalıcı olsun diye.
  • DATABASE_URL içinde host olarak db kullanıyoruz; bu, Compose servis adıdır.

3) Node.js API’yi ekle (minimum örnek)

api/index.js oluşturun:

import http from "http";

const port = process.env.PORT || 3000;

const server = http.createServer(async (req, res) => {
  if (req.url === "/health") {
    res.writeHead(200, { "Content-Type": "application/json" });
    return res.end(JSON.stringify({ ok: true }));
  }

  res.writeHead(200, { "Content-Type": "text/plain" });
  res.end("API ayakta. Compose çalışıyor.\n");
});

server.listen(port, () => {
  console.log(`API listening on :${port}`);
  console.log("DATABASE_URL=", process.env.DATABASE_URL);
  console.log("REDIS_URL=", process.env.REDIS_URL);
});

api/package.json oluşturun:

{
  "name": "compose-demo-api",
  "type": "module",
  "dependencies": {}
}

4) Çalıştır

docker compose up -d

Loglara bakmak için:

docker compose logs -f api

Test:

curl http://localhost:3000/health

5) Durdur / temizle

docker compose down

Tam temiz reset (volume’ler dahil):

docker compose down -v

Compose ile En Sık Yapılan Hatalar (ve Çözümleri)

1) “localhost” ile DB’ye bağlanmaya çalışma

Container içinden localhost container’ın kendisi demektir. DB host’u olarak db yazmalısınız.

  • Yanlış: postgresql://app:pass@localhost:5432/appdb
  • Doğru: postgresql://app:pass@db:5432/appdb

2) Port çakışmaları

Makinenizde 5432 doluysa:

ports:
  - "5433:5432"

3) Volume yüzünden “eski data” ile uğraşma

Şema değişti, data karıştı:

docker compose down -v

4) depends_on her şeyi çözmez

depends_on sadece sırayı etkiler; bu yüzden healthcheck kritik. Yukarıdaki örnekte bu yüzden ekledik.


İleri Seviye: Local Geliştirmeyi Profesyonelleştiren 4 İpucu

  1. .env dosyası kullanın: şifreleri ve portları dosyadan yönetin.
  2. Profil (profiles) ile opsiyonel servisler: örn. adminer, mailhog sadece ihtiyaçta.
  3. Watch/Hot reload: Node için nodemon, Python için uvicorn --reload.
  4. Multi-stage Dockerfile + Compose: API’yi image olarak paketleyip CI’da aynı şekilde koşturun.

Sık Sorulan Sorular (FAQ)

1) Docker Compose nedir, Docker’dan farkı ne?

Docker tek bir container’ı çalıştırmaya odaklanır; Docker Compose birden fazla container’ı tek uygulama gibi yönetir.

2) Compose dosyası adı docker-compose.yml mi olmalı?

Hayır. Güncel kullanımda compose.yaml veya compose.yml yaygın. docker compose komutu otomatik bulur.

3) Compose prod ortam için uygun mu?

Basit senaryolarda kullanılabilir; ama ölçekleme, rollout, self-healing gibi ihtiyaçlarda genelde Kubernetes/benzeri orkestrasyon tercih edilir.

4) down -v ne yapar?

Container’ları kapatır ve volume’leri siler. Postgres gibi kalıcı verileriniz de gider; dikkatli kullanın.


Sonuç

Docker Compose ile local ortam kurulumunu standardize eder, ekipteki sürüm/kurulum farklarını azaltır ve geliştirme hızını ciddi şekilde artırırsınız. Bu yazıda Docker Compose nedir sorusunu cevapladık; Postgres + Redis + Node.js API örneğiyle tek komutla çalışan bir geliştirme ortamını kurduk.

Şimdi siz de kendi projenize uyarlayın: compose.yaml dosyanıza servislerinizi ekleyin ve bir onboarding kâbusunu kalıcı olarak bitirin. Takıldığınız yer olursa yorumlara kullandığınız stack’i (Node/Python/Go, DB türü) yazın; birlikte netleştirelim.