Docker, uygulamaları container'lar içinde paketleyerek "benim makinemde çalışıyor" sorununu ortadan kaldırır. Modern DevOps pratiklerinin temel taşı olan Docker, deployment süreçlerini standartlaştırır ve ölçeklendirmeyi kolaylaştırır.
Docker Temel Kavramları
Image
Uygulamanın çalışması için gereken tüm bağımlılıkları içeren salt-okunur şablon. Dockerfile'dan oluşturulur.
Container
Image'in çalışan örneği. İzole bir ortamda uygulama çalıştırır.
Dockerfile
Image oluşturmak için talimatları içeren metin dosyası.
Docker Compose
Çoklu container uygulamalarını tanımlama ve çalıştırma aracı.
Temel Dockerfile Örneği (Node.js)
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
Docker Compose Örneği
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
- redis
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=secret
redis:
image: redis:7-alpine
volumes:
postgres_data:
Deployment Stratejileri
1. Single Server Deployment
Küçük projeler için: Docker Compose ile tek sunucu üzerinde çalıştırma.
2. Container Orchestration
- Docker Swarm: Docker'ın native orchestration çözümü, basit
- Kubernetes: Endüstri standardı, kompleks ama güçlü
- AWS ECS/EKS: Amazon'un container servisleri
3. Managed Platforms
- Railway, Render: Git push ile deploy
- Fly.io: Edge deployment
- Google Cloud Run: Serverless containers
Best Practices
Image Optimizasyonu
- Multi-stage build kullanın (küçük final image)
- Alpine base image tercih edin
- .dockerignore dosyası oluşturun
- Layer'ları optimize edin (sık değişenler sona)
- Root kullanıcı yerine özel user oluşturun
Güvenlik
- Official image'ları kullanın
- Image'ları düzenli güncelleyin (vulnerability scan)
- Secrets'ı environment variable olarak geçirin
- Read-only filesystem tercih edin
Logging ve Monitoring
- STDOUT/STDERR'a log yazın
- Centralized logging (ELK, Loki)
- Health check endpoint'leri tanımlayın
- Container metrics (Prometheus, Grafana)
CI/CD Entegrasyonu
# GitHub Actions örneği
name: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and push
run: |
docker build -t myapp:${{ github.sha }} .
docker push registry/myapp:${{ github.sha }}
- name: Deploy
run: |
ssh server "docker pull registry/myapp:${{ github.sha }}"
ssh server "docker compose up -d"
Production Checklist
- ☐ Health checks tanımlı
- ☐ Resource limits (CPU, memory) belirli
- ☐ Restart policy yapılandırılmış
- ☐ Logging çözümü entegre
- ☐ SSL/TLS yapılandırılmış
- ☐ Backup stratejisi mevcut
- ☐ Rollback planı hazır
Docker, modern yazılım deployment'ının standart aracı haline geldi. Container teknolojisine hakim olmak, DevOps yeteneklerinizi güçlendirir ve daha güvenilir deployment süreçleri oluşturmanızı sağlar.