How-To Guides

Yerel Geliştirmeyi Ustalıkla Yönetme: Docker Compose Kurulumu İçin Kapsamlı Rehber

Modern yazılım geliştirme yaşam döngüsünde, yerel, önizleme (staging) ve üretim ortamları arasındaki tutarlılık hayati önem taşır. Docker konteynerleştirme motorunu sağlarken, Docker Compose çok konteynerli uygulamaları hayata geçiren orkestratördür. Orta ve ileri düzey geliştiriciler için tek konteynerli iş akışlarından güçlü, tanımlanmış bir Compose kurulumuna geçmek sadece bir konfor değil; ölçeklenebilirlik ve işbirliği için bir zorunluluktur.

Bu rehber, Docker Compose kullanarak üretim benzeri bir yerel geliştirme ortamı mimarisi oluşturmanın sürecini, hizmet tanımlama, hacim yönetimi ve ağ yapılandırması konularındaki en iyi uygulamalara odaklanarak adım adım anlatacaktır.

Mimariyi Anlamak

Kod yazmadan önce hizmetleri tanımlamalıyız. Tipik bir web uygulaması bir ön uç uygulaması, bir arka uç API'si ve bir veritabanından oluşabilir. Docker Compose, bu bağımlılıkları tek bir docker-compose.yml dosyasında tanımlamamıza olanak tanır. Bu bildirimsel yaklaşım, ekip içindeki herhangi bir geliştiricinin tüm yığınları tek bir komutla ayağa kaldırmasını sağlayarak "benim makinemde çalışıyor" sorununu ortadan kaldırır.

Hizmetlerinizi Tanımlama

Gerçekçi bir senaryo kuralım: PostgreSQL veritabanına bağlı bir Node.js API'si ve React ön ucu ile sunulan bir uygulama. Yapılandırma dosyamızda üç ayrı hizmet tanımlayacağız. Her hizmet, bir konteyner için bir şablon görevi görür; imajı, build bağlamını, portları ve ortam değişkenlerini belirtir.

Bu bağımlılıkları yöneten sağlam bir docker-compose.yml yapılandırması aşağıdadır:

version: '3.8'

services:
  api:
    build:
      context: ./api
      dockerfile: Dockerfile.dev
    container_name: dev-api
    ports:
      - "4000:4000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
      - NODE_ENV=development
    volumes:
      - ./api:/usr/src/app
      - /usr/src/app/node_modules
    depends_on:
      - db
    networks:
      - dev-net

  db:
    image: postgres:15-alpine
    container_name: dev-db
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - dev-net

  web:
    build:
      context: ./web
      dockerfile: Dockerfile.dev
    container_name: dev-web
    ports:
      - "3000:3000"
    volumes:
      - ./web:/usr/src/app
      - /usr/src/app/node_modules
    depends_on:
      - api
    networks:
      - dev-net

volumes:
  pgdata:

networks:
  dev-net:
    driver: bridge

Temel Yapılandırma Stratejileri

Yukarıdaki örnekte, sorunsuz bir geliştirme deneyimi sağlamak için birkaç kritik desen kullanılmıştır.

Hacim Yönetimi

api ve web hizmetlerinde hacim kullanımına dikkat edin. Yerel kod dizinini (./api:/usr/src/app) bağlayarak sıcak yeniden yükleme (hot-reload) yeteneklerini etkinleştiriyoruz. Yerel olarak bir dosyayı kaydettiğinizde, değişiklikler yeniden derleme gerektirmeden konteyner içinde anında yansıtılır. İkinci hacim olan - /usr/src/app/node_modules, konteyner içindeki node_modules klasörünü etkili bir şekilde maskeleyen adlandırılmış bir hacimdir. Bu, yerel izin sorunlarını önler ve npm install'ın konteyner bağlamı içinde doğru şekilde çalışmasını sağlar.

Ağ İzolasyonu

Varsayılan ağa güvenmek yerine özel bir köprü ağı (dev-net) tanımlıyoruz. Bu, daha iyi izolasyon sağlar ve hizmetlerin DNS adları aracılığıyla birbirini keşfetmesine olanak tanır (örneğin, API veritabanına sadece db ana bilgisayar adını kullanarak erişebilir). Bu, üretim ağ davranışını daha yakından taklit eder.

Bağımlılık Sıralaması

depends_on kullanımı, veritabanı ve API'nin web istemcisinden önce başlamasını sağlar. Compose varsayılan olarak veritabanının bağlantıları kabul etmeye *hazır olmasını* beklemez, ancak konteynerlerin doğru sırada başlamasını sağlar. Üretim hazırlığı için genellikle sağlık kontrolleri (health checks) uygulamanız gerekir, ancak yerel geliştirme için bu basit sıralama genellikle yeterlidir.

Ortamınızı Başlatma

docker-compose.yml dosyanız hazır olduğunda, yığınızı başlatmak oldukça basittir. Projenizin kök dizininde terminalinizi açın ve şu komutu çalıştırın:

docker-compose up --build

--build bayrağı, Dockerfile'larda değişiklik yaptıysanız bunların yeniden oluşturulmasını sağlar. Bunu arka planda (detached mod) çalıştırmak için komuta -d ekleyin.

Sonuç

Yerel geliştirme için Docker Compose kurulumu, ekip verimliliği ve dağıtım güvenilirliği açısından getirisi olan bir yatırımdır. Altyapınızı kod olarak tanımlayarak, işletim sistemine özgü tuhaflıkları soyutlayan tekrarlanabilir bir ortam yaratırsınız. Compose ile daha rahatlaştıkça, bu kurulumu Redis gibi önbellek katmanları, RabbitMQ gibi mesaj kuyrukları veya Nginx gibi ters vekil sunucular dahil edecek şekilde genişletebilirsiniz; tüm bunlar tek bir yapılandırma dosyasından yönetilir.

Basit başlayın, sık sık iterasyon yapın ve Docker Compose'un ağır işlerini üstlenmesine izin vererek harika yazılımlar yazmaya odaklanın.

Share: