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 upile 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 -vile 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_URLiçinde host olarakdbkullanı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
.envdosyası kullanın: şifreleri ve portları dosyadan yönetin.- Profil (profiles) ile opsiyonel servisler: örn.
adminer,mailhogsadece ihtiyaçta. - Watch/Hot reload: Node için
nodemon, Python içinuvicorn --reload. - 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.