Tek bir docker-compose.yml ile .NET API'nizi ve SQL Server'ı ayağa kaldırın. Bağlantı dizesi, migration ve sağlık kontrolü dahil, taşınabilir bir geliştirme ortamı için adım adım rehber.

"Bende çalışıyordu" sorununu bitirmenin en temiz yolu, geliştirme ortamını kod olarak tanımlamaktır. Docker Compose ile .NET API'nizi ve SQL Server veritabanını tek komutla ayağa kaldırabilirsiniz. İşte adım adım.

Neden Compose?

Compose, birden çok konteyneri (uygulama + veritabanı) tek bir dosyada tanımlar; docker compose up ile hepsi aynı ağda, doğru sırayla başlar. Ekibe katılan biri tek komutla birebir aynı ortamı elde eder.

docker-compose.yml

services:
  db:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: "Guclu_Parola123!"
    ports:
      - "1433:1433"
    volumes:
      - mssql-data:/var/opt/mssql

  api:
    build: .
    depends_on:
      - db
    environment:
      ConnectionStrings__DefaultConnection: "Server=db,1433;Database=AppDb;User Id=sa;Password=Guclu_Parola123!;TrustServerCertificate=True"
    ports:
      - "8080:8080"

volumes:
  mssql-data:

Bağlantı dizesindeki kritik nokta

Sunucu adı olarak localhost değil, servis adı olan db'yi kullanın; Compose aynı ağdaki servisleri isimleriyle çözer. Ayrıca SQL Server 2022'nin sertifikasına güvenmesi için TrustServerCertificate=True ekleyin, yoksa bağlantı başarısız olur.

Migration ve veritabanı

Uygulamanız açılışta db.Database.Migrate() çağırıyorsa, şema ilk çalıştırmada otomatik oluşur. SQL Server konteynerinin hazır olması birkaç saniye alabilir; uygulamanızda kısa bir yeniden deneme (retry) mantığı bu yarış durumunu çözer.

Pratik ipuçları

  • Veritabanı verisini kalıcı kılmak için mutlaka bir volume kullanın (yukarıdaki mssql-data).
  • Parolaları .env dosyasına taşıyıp docker-compose.yml'de ${VAR} ile referans verin; gizli bilgiyi depoya koymayın.
  • Servisin gerçekten hazır olduğunu anlamak için healthcheck tanımlayın ve depends_on: condition: service_healthy kullanın.

Özet

Tek bir docker-compose.yml ile taşınabilir, tekrarlanabilir bir .NET + SQL Server ortamı elde edersiniz. Kurulum adımları koda döküldüğü için yeni bir makinede çalıştırmak sadece docker compose up demektir.