Docker ile Sunucu Yönetimi: Mikroservis Mimarisine Geçiş Rehberi
2024'te bir e-ticaret müşterimiz aradı: "Sunucuya yeni özellik ekleyince her şey bozuluyor, neden?" Cevap basitti: Monolitik mimari. Tek bir değişiklik tüm sistemi etkiliyor. 3 ay sonra Docker'a geçtik. Şimdi günde 10 deploy yapabiliyorlar, downtime sıfır. Bu yazıda Docker'ın ne olduğunu, neden mikroservis mimarisine geçmeniz gerektiğini ve nasıl başlayacağınızı anlatacağız. Spoiler: Düşündüğünüzden daha kolay.
Docker Nedir ve Neden Kullanmalısınız?
Docker, uygulamanızı ve tüm bağımlılıklarını bir container içinde paketlemenizi sağlar. Container, sanal makineden daha hafif, daha hızlı başlayan izole bir ortamdır.
Geleneksel vs Docker
| Özellik |
Geleneksel (VM) |
Docker Container |
| Başlatma Süresi |
30-60 saniye |
1-3 saniye |
| Disk Kullanımı |
10-50 GB |
100-500 MB |
| RAM Overhead |
2-4 GB |
MB seviyesinde |
| Portability |
Zor |
Çok kolay |
| İzolasyon |
Tam izolasyon |
Process-level |
Docker'ın Avantajları
- Tutarlı Ortam: "Benim bilgisayarımda çalışıyor" sorunu yok
- Hızlı Deploy: Saniyeler içinde yeni versiyon
- Kolay Rollback: Eski versiyona 10 saniyede dönün
- Kaynak Verimliliği: Aynı sunucuda 50+ container çalışabilir
- Mikroservis Mimarisi: Her servis bağımsız scale edilebilir
Gerçek Örnek:
Bir müşterimiz monolitik PHP uygulamasını Docker mikroservislere böldü. Önceden: 1 güncelleme = 2 saat downtime. Şimdi: Günde 15 deploy, zero downtime. Müşteri memnuniyeti %40 arttı.
Docker Kurulumu (Ubuntu 24.04)
# Eski versiyonları temizle
sudo apt remove docker docker-engine docker.io containerd runc
# Repository ekle
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker kurulumu
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Kullanıcıyı docker grubuna ekle (sudo olmadan kullanmak için)
sudo usermod -aG docker $USER
newgrp docker
# Test
docker --version
docker run hello-world
İlk Container: Nginx Web Server
# Nginx container başlat
docker run -d -p 80:80 --name web-server nginx
# Açıklama:
# -d: Arka planda çalıştır (detached)
# -p 80:80: Host 80 -> Container 80 port mapping
# --name: Container'a isim ver
# nginx: Docker Hub'dan image indir
# Çalışan container'ları göster
docker ps
# Log'ları izle
docker logs -f web-server
# Container'a shell ile gir
docker exec -it web-server bash
# Container'ı durdur
docker stop web-server
# Container'ı sil
docker rm web-server
Dockerfile: Kendi Image'ınızı Oluşturun
Dockerfile, Docker image'ınızın tarifini içerir. Örnek: Basit bir Node.js uygulaması
# Dockerfile
FROM node:18-alpine
# Çalışma dizini
WORKDIR /app
# package.json kopyala
COPY package*.json ./
# Bağımlılıkları yükle
RUN npm install
# Uygulama kodunu kopyala
COPY . .
# Port açıklaması (dokümantasyon amaçlı)
EXPOSE 3000
# Uygulamayı başlat
CMD ["node", "app.js"]
# Image oluştur
docker build -t my-node-app:1.0 .
# Container çalıştır
docker run -d -p 3000:3000 --name node-app my-node-app:1.0
# Test
curl http://localhost:3000
Docker Compose: Multi-Container Uygulamalar
Gerçek uygulamalar birden fazla servisten oluşur: Web server, database, cache. Docker Compose ile tümünü tek komutla yönetin.
Örnek: WordPress + MySQL + Redis
# docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
restart: always
redis:
image: redis:7-alpine
restart: always
wordpress:
image: wordpress:latest
depends_on:
- db
- redis
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
restart: always
volumes:
db_data:
wp_data:
# Tüm servisleri başlat
docker compose up -d
# Log'ları izle
docker compose logs -f
# Durumu kontrol et
docker compose ps
# Tüm servisleri durdur ve sil
docker compose down
# Volume'leri de sil (dikkat: veri kaybı!)
docker compose down -v
http://localhost:8080 adresine gidin, WordPress kurulum ekranı açılacak.
Production Ortamında Docker: Best Practices
1. Multi-Stage Build (Image Boyutunu Küçültme)
# Dockerfile (Multi-stage)
# Stage 1: Build
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Stage 2: Production
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/app.js"]
# Sonuç: 1.2 GB -> 150 MB
2. Health Check
# Dockerfile
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
3. Resource Limits
# docker-compose.yml
services:
app:
image: my-app
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 1G
4. Secrets Yönetimi
# .env dosyası (Git'e eklemeyin!)
DB_PASSWORD=super-secret-password
API_KEY=abc123xyz
# docker-compose.yml
services:
app:
env_file:
- .env
5. Log Yönetimi
# docker-compose.yml
services:
app:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Docker vs Kubernetes: Hangisini Kullanmalı?
| Özellik |
Docker Compose |
Kubernetes |
| Kullanım Kolaylığı |
Kolay |
Karmaşık |
| Ölçek |
Tek sunucu |
Multi-node cluster |
| Auto-scaling |
Yok |
Var |
| Self-healing |
Manuel restart |
Otomatik |
| İdeal Kullanım |
Dev/test, KOBİ |
Enterprise, high-scale |
Öneri: 10 container'dan az uygulamanız varsa Docker Compose yeterli. 50+ container, multi-server ihtiyacınız varsa Kubernetes'e geçin.
Gerçek Dünya Örneği: E-Ticaret Platformu
Mikroservis mimarisine geçen bir e-ticaret platformunun yapısı:
# docker-compose.yml (production)
version: '3.8'
services:
# Nginx reverse proxy
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
# Frontend (React)
frontend:
build: ./frontend
environment:
- API_URL=http://api:3000
# API Gateway
api:
build: ./api-gateway
depends_on:
- product-service
- order-service
- user-service
# Mikroservisler
product-service:
build: ./services/products
environment:
- DB_HOST=postgres
order-service:
build: ./services/orders
environment:
- DB_HOST=postgres
user-service:
build: ./services/users
environment:
- DB_HOST=postgres
# Database
postgres:
image: postgres:15
volumes:
- pg_data:/var/lib/postgresql/data
# Cache
redis:
image: redis:7-alpine
# Queue
rabbitmq:
image: rabbitmq:3-management
volumes:
pg_data:
Avantajlar:
- Product service'i 5 instance çalıştırabilirsiniz (yüksek trafik)
- Order service'de bug varsa, sadece onu restart edersiniz
- Her servis farklı takım tarafından geliştirilebilir
- Deploy bağımsız (Product team gece deploy, Order team sabah)
SistemDC'de Docker Desteği
SistemDC sunucularında Docker fully desteklenir:
- Kurulu Docker: Tüm VPS ve Dedicated'larda kurulu gelir
- Private Registry: Kendi Docker registry'nizi host edebilirsiniz
- GPU Container: NVIDIA Docker runtime (AI/ML için)
- Managed Kubernetes: 2026 Q2'de açıyoruz
Docker Danışmanlık: Monolitik uygulamanızı mikroservislere taşımak istiyorsanız, ücretsiz mimari analizi yapıyoruz. Migrasyon planı, container stratejisi ve DevOps süreçleri için destek sağlıyoruz.
Docker ile Modernize Edin
Uygulamanızı Docker'a taşımak mı istiyorsunuz? Ücretsiz danışmanlık için bizimle iletişime geçin.
İletişim:
[email protected]
Kurumsal Whatsapp: 0224 334 02 42
Sonuç: Docker'a Geçiş Zamanı
Docker, modern yazılım geliştirmenin temel taşı haline geldi. 2026'da Docker kullanmayan bir ekip, rekabette geride kalır.
14 yıldır yüzlerce müşteriye hizmet verdik. Son 3 yılda gördük: Docker'a geçen ekipler %300 daha hızlı deploy yapıyor, downtime %80 azalıyor, geliştirici memnuniyeti artıyor.
Başlamak için karmaşık bir sisteme ihtiyacınız yok. Tek bir servisle başlayın, öğrenin, genişletin. Docker yolculuğu, ilk container'ınızı başlattığınız an başlar.
Not: Bu yazıdaki komutlar Docker 25.x ve Docker Compose v2 için test edilmiştir. Production ortamında mutlaka güvenlik ve monitoring ekleyin. Örnekler eğitim amaçlıdır, production kullanımında best practice'lere uyun.