Docker Compose ile web uygulaması ve veritabanı ortamı kurmak
"Benim bilgisayarımda çalışıyordu" sorununu çözmenin en pratik yolu, geliştirme ortamını Docker Compose ile tanımlamak. Bu rehberde bir web uygulaması ile PostgreSQL veritabanını birlikte ayağa kaldıran basit bir yapı kuracağız.
Dosya yapısı
proje/
├── compose.yaml
├── .env
└── app/
├── Dockerfile
└── ... (uygulama kodu)
compose.yaml
services:
app:
build: ./app
ports:
- "8080:8080"
environment:
DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:16
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
interval: 5s
retries: 10
restart: unless-stopped
volumes:
db-data:
.env
DB_USER=uygulama
DB_PASSWORD=guclu-bir-sifre
DB_NAME=uygulama
.env dosyasını Git'e ekleme; yerine örnek değerlerle .env.example paylaş.
Önemli noktalar
- Servis adı = adres. Uygulama veritabanına
localhostile değil,dbadıyla bağlanır. Compose, servisleri aynı ağa koyar ve isimle çözer. - Volume şart.
db-dataolmadan konteyner silinince veritabanı da silinir. - depends_on + healthcheck. Sadece
depends_onveritabanının başladığını garanti eder, hazır olduğunu değil. Healthcheck koşulu bu farkı kapatır. - Veritabanı portunu dışarı açma. Uygulama zaten iç ağdan erişiyor. Bilgisayarından bağlanman gerekiyorsa
127.0.0.1:5432:5432şeklinde sadece yerel arayüze aç.
Sık kullanılan komutlar
docker compose up -d # arka planda başlat
docker compose logs -f app # uygulama loglarını izle
docker compose exec db psql -U uygulama # veritabanına bağlan
docker compose down # durdur (veriler kalır)
docker compose down -v # durdur ve volume'ları SİL
Üretimde
Bu yapı geliştirme için ideal. Üretimde ek olarak: önünde bir ters vekil (Nginx, Caddy, Traefik) ve TLS, şifreleri ortam dosyası yerine secret yönetimi, imaj sürümlerini sabitleme ve veritabanı için düzenli yedek planla.
Compose ile kurduğunuz yapılarda karşılaştığınız sorunları bu başlıkta paylaşabilirsiniz.