İbrahim Halil Sezgin
Docker ile Mikro Servis Mimarisi Kurma Rehberi - İbrahim Halil Sezgin

Docker ile Mikro Servis Mimarisi Kurma Rehberi

Docker ile Mikro Servis Mimarisi Kurma Rehberi

Mikro servis mimarisi, modern uygulamaların modular, ölçeklenebilir ve bağımsız olarak dağıtılabilir yapılar oluşturmasını sağlar. Bu rehberde, Docker konteynerleri kullanarak mikro servis tabanlı bir uygulama oluşturmanın adımlarını adım adım anlatacağız. Aşağıdaki konuları kapsayan kapsamlı bir yol haritası bulacaksınız.

1. Neden Docker?

Docker, uygulama bağımlılıklarını kapsülleyerek ortamlar arası tutarsızlık sorunlarını ortadan kaldırır. Tek bir Dockerfile ile geliştiriciler, test uzmanları ve operasyon ekipleri aynı konteyneri kullanır, "Özümde çalışıyor" gibi sıkıntıların önüne geçer. Ayrıca CI/CD süreçlerini otomatikleştirme, sürüm yönetimi ve güvenlik yamalarının uygulama hâllerini hızla güncellemesi gibi avantajlar sağlar.

2. Proje Kök Yapısı

Bir mikro servis projesi, tek bir repository içinde birden fazla servisin barındırılması yerine her bir servisin kendi repository içinde sürdürülmesiyle yönetilebilir. Ancak, örnek amaçlı tek bir repo içinde dört basit servis (Auth, Products, Orders, Notifications) yerini alacak iki klasör yapısı önerilmektedir:

/auth-service
├── Dockerfile
├── src/
└── pom.xml
/products-service
├── Dockerfile
├── src/
└── pom.xml
orders-service
── …
notifications-service
── …
Docker-compose.yml

3. Dockerfile Örneği

Her servis için standart bir Java Spring Boot uygulaması varsayalım. Dockerfile şu şekilde olacaktır:

# Base Image
FROM eclipse-temurin:21-jdk-alpine
# Set work directory
WORKDIR /app
# Copy Maven dependencies first for caching
COPY pom.xml ./
RUN ./mvnw dependency:go-offline
# Copy source code
COPY src ./src
# Build the jar
RUN ./mvnw spring-boot:repackage
# Expose port and run
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/*.jar"]

4. Docker Compose ile Multi-Container Yönetimi

İlgili servisleri tek bir komutla başlatmak için docker-compose.yml dosyası kullanılır. Örnek yapı:

version: '3.8'
services:
  auth:
    build: ./auth-service
    ports:
      - '8081:8080'
    environment:
      - SPRING_DATASOURCE_URL=jdbc:h2:mem:authdb
  products:
    build: ./products-service
    ports:
      - '8082:8080'
    environment:
      - SPRING_DATASOURCE_URL=jdbc:h2:mem:productdb
  orders:
    build: ./orders-service
    ports:
      - '8083:8080'
    environment:
      - SPRING_DATASOURCE_URL=jdbc:h2:mem:ordersdb
  notifications:
    build: ./notifications-service
    ports:
      - '8084:8080'
    environment:
      - SPRING_DATASOURCE_URL=jdbc:h2:mem:notifydb

5. Ağ ve Hizmet Keşfi

Docker Compose, servis adlarını otomatik olarak DNS girişlerine dönüştürür. Örnek: orders-service URL’si http://orders:8080 şeklinde diğer servisler tarafından erişilebilir. Böylece her bir servis kendi bağlantı dizelerini kendi iç konfigürasyonlarından çıkarır.

6. CI/CD ile Otomatik Deployment

GitHub Actions, GitLab CI veya Jenkins ile şu adımları çalıştırabilirsiniz:

  1. Docker image’ı build edin.
  2. Container registry (Docker Hub, GitHub Packages, Google Container Registry vb.)’a push edin.
  3. Kubernetes ya da benzeri orchestrator’da ilgili kaynak tanımlarını güncelleyin.
  4. Başlıyor!

7. Güvenlik ve Secret Yönetimi

Docker Compose ortam değişkenleri ile basit çözümler yeterli değildir. Kubernetes Secrets, HashiCorp Vault veya Spring Cloud Vault gibi araçlar kullanarak JWT sekreleri, veri tabanı şifreleri gibi kritik bilgileri güvenli saklayabilirsiniz.

8. İzleme ve Loglama

Standard output’larınız tek bir yerde toplandığında (örn. ekibinizin observability yığınında Elasticsearch-Logstash-Kibana, Grafana Loki) hata izleme, performans analizi ve kapasiteli planlama daha kolaydır. Her konteyner kendi loglarını /var/log/app içinde tutabilir.

9. Ölçekleme Stratejileri

Kubernetes ile horizontal pod autoscaler, Istio gibi servis mesh'ler ile trafikleri dinin. Tek bir microservice’yi ölçeklendirmek istiyorsanız, deployment yaml’inde replica sayısını artırmak yeterlidir. Örneğin:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-deployment
spec:
  replicas: 5
  template:
    spec:
      containers:
        - name: auth
          image: docker.io/yourrepo/auth:latest

10. Sonuç

Docker ile mikro servis mimarisi kurmak, geliştirme sürecinizi hızlandırır, operasyonel karmaşıklığı azaltır ve ölçeklenebilirliği artırır. Bu rehberde anlatılan adımları uyguladığınızda, hızlıca ninoticar bir servis seti elde eder, CI/CD pipeline’larınızı optimize eder ve büyük ölçekli, modüler sistemler inşa edebilirsiniz.

17 Kasım 2025 20:14