// Konteyner Teknolojileri Eğitimi
Docker ile
Konteyner Dünyası
Kavramlar · Ekosistem · Temel Komutlar
01 / Docker Giriş
02 / Deployment
03 / AWS
3 Derslik Yolculuğumuz
01
Docker Giriş
- VM vs Konteyner
- Image, Container, Dockerfile
- Docker Hub, Compose, Swarm
02
Uygulama
- ML modeli + FastAPI
- Dockerfile yazıyoruz
- Build → Run → Test
03
AWS
- ECR, ECS, Fargate
- Canlıya alma
- Siz test edersiniz
Kavramlar
→
Deployment
→
Bulut
→
Dünyaya Açık
"Benim makinemde çalışıyordu!"
Tanıdık bir senaryo:
Bir model eğittin. Çalışıyor.
Arkadaşına gönderdin.
Arkadaşın çalıştırmaya çalıştı...
ModuleNotFoundError: No module named 'tensorflow'
AttributeError: 'Sequential' has no 'predict_classes'
# TF 2.9 → 2.15 sürüm farkı
Works on
my machine
Yazılımcının en klasik problemi
Neden Çalışmıyor?
Kodun çalışması için tüm katmanların uyumlu olması gerekiyor:
Kodunuz — main.py, model.h5
Kütüphaneler — tensorflow 2.15, numpy 1.26, pillow 10.3
Python Sürümü — 3.11.2
İşletim Sistemi — Ubuntu 22.04 / macOS 14 / Windows 11
Donanım — x86_64 / ARM (Apple Silicon)
Tek sorun ortam uyumsuzluğu değil — klasik çözüm VM ise onun da ciddi bedeli var.
VM ile izole etsek?
- Her VM için tam OS — 2-4 GB RAM overhead
- 10 servis = 10 OS güncellemesi, bakım, lisans
- Yeni VM başlatmak: dakikalar, bazen saatler
- Boşta bile kaynak tüketiyor
Maliyet gerçeği
- 8 mikro servis × VM = yüksek bulut faturası
- Scale etmek yavaş ve pahalı
- DevOps zamanı: patch, güvenlik, lisans
- Küçük ekiplerde sürdürülemez
Docker'ın Cevabı
Eskiden
- requirements.txt gönder, "Python 3.11 kur" de
- CUDA versiyonunu eşleştir — OS farkı, hata
- VM kur: her servis için 2-4 GB RAM overhead
- 10 servis = 10 OS güncellemesi, lisans, bakım
- Ölçekleme yavaş, bulut faturası yüksek
Docker ile
- Image push et →
docker run → bitti
- Linux, Mac, Windows, AWS — aynı image
- Konteyner ≈ MB, VM ≈ GB — kernel paylaşımı
- Yeni konteyner <1 sn,
--scale api=10 tek komut
- Dev → CI → Prod → AWS: ortam farkı sıfır
Sanal Makine (VM) Nedir?
Fiziksel bir sunucunun üzerinde, sanki ayrı bir bilgisayarmış gibi çalışan tam bir işletim sistemi kopyası.
VM 1 — Ubuntu + App A
VM 2 — Windows + App B
Hypervisor (VMware / VirtualBox / KVM)
Host İşletim Sistemi
Fiziksel Sunucu
VM Özellikleri
- Tam izolasyon (ayrı kernel)
- Tam işletim sistemi kopyası
- Boyut: Gigabaytlar
- Başlangıç: Dakikalar
- RAM/CPU ağır
- Güçlü izolasyon
Konteyner Nedir?
Aynı işletim sistemi çekirdeğini paylaşan, izole edilmiş süreçler. Sadece uygulama katmanını paketler.
Konteyner 1 — App A
Konteyner 2 — App B
Konteyner 3 — App C
Docker Engine (Runtime)
Host OS + Kernel — paylaşımlı
Fiziksel Sunucu
Konteyner Özellikleri
- Kernel paylaşır
- Sadece uygulama katmanı paketlenir
- Boyut: Megabaytlar
- Başlangıç: Saniyeler
- Düşük kaynak tüketimi
- Yüksek taşınabilirlik
VM vs Konteyner
| Özellik | Sanal Makine (VM) | Konteyner |
| İzolasyon | Tam (ayrı kernel) | Süreç seviyesi |
| Boyut | Gigabaytlar | Megabaytlar |
| Başlangıç | Dakikalar | Saniyeler |
| Kaynak tüketimi | Yüksek | Düşük |
| Taşınabilirlik | Orta | Çok yüksek |
| Güvenlik izolasyonu | Çok güçlü | İyi |
| Kullanım alanı | Farklı OS gerektiğinde | Uygulama dağıtımı |
Analoji: VM = Ayrı bir bina kiralamak. Konteyner = Aynı binada farklı ofisler.
Docker Nasıl Çalışır?
Docker 3 bileşenden oluşur: Client (komutları gönderir) · Daemon (her şeyi yönetir) · Registry (image'ları depolar). docker run, docker build, docker pull — hepsi bu üçgen üzerinden çalışır.
Docker Image — "Tarif"
Image = Salt okunur şablon. Dockerfile'dan üretilir. Çalışmaz, sadece tarifi içerir.
Bir image içinde ne var?
- Base OS (python:3.11-slim)
- Kütüphaneler (tensorflow, fastapi...)
- Uygulama kodu (main.py, model.py...)
- Başlatma komutu (CMD)
Uygulama Kodu — main.py, model.py
Kütüphaneler — tensorflow, fastapi
Python 3.11
Debian Slim — linux base
Her katman önbelleğe alınır. Değişen katmandan sonrası rebuild edilir.
Image Katman Yapısı
Her Dockerfile satırı yeni bir katman (layer) oluşturur.
Katmanlar read-only'dir, önbelleğe alınır ve container'lar arasında paylaşılır.
Docker Image Nedir?
docker build sonrasında Dockerfile'daki talimatlara göre
read-only, statik yapıda bir image dosyası oluşturulur.
Dockerfile'daki her satıra karşılık Image içinde bir layer oluşur.
Image = katmanlar topluluğudur.
Docker Image Yapısı — Katmanlar
writable — Container Layer
R/W
COPY app/ app/
Image Layer
RUN pip install tensorflow
Image Layer
COPY requirements.txt .
Image Layer
FROM python:3.11-slim
Base Image
Linux Kernel
Host OS
↑ her katman üsttekini referans alır
Container — "Tarif Hayata Geçince"
Container = Image'dan çalışan örnek (instance). Bir image'dan sonsuz container açılabilir.
Image → Container
image-classifier:v1
↓ docker run
● classifier-1 (:8000)
● classifier-2 (:8001)
● classifier-3 (:8002)
Temel Komutlar
# Image listesi
docker images
# Çalışanlar
docker ps
# Çalıştır
docker run -d -p 8000:8000 myapp:v1
# Durdur / Sil
docker stop myapp
docker rm myapp
Dockerfile — "Tarif Defteri"
# 1. Base image
FROM python:3.11-slim
# 2. Çalışma dizini
WORKDIR /app
# 3. Önce bağımlılıklar (cache!)
COPY requirements.txt .
RUN pip install -r requirements.txt
# 4. Sonra uygulama kodu
COPY app/ app/
# 5. Dinlenen port
EXPOSE 8000
# 6. Başlangıç komutu
CMD ["uvicorn", "app.main:app",
"--host", "0.0.0.0", "--port", "8000"]
COPY requirements önce neden?
Kod değiştiğinde sadece son 2 katman rebuild edilir. pip install tekrar çalışmaz → hız!
--host 0.0.0.0 neden?
127.0.0.1 container içine kapanır. 0.0.0.0 dışarıdan port mapping ile erişimi açar.
Dockerfile vs Docker Compose
Dockerfile
- Tek container tarif eder
- Image nasıl inşa edilir?
docker build ile kullanılır
- Tek servis → yeterli
Docker Compose
- Birden fazla servisi yönetir
- API + DB + Cache = tek YAML dosyası
docker compose up ile çalışır
- Geliştirme ortamı için ideal
İkisi birbirini tamamlar. Compose, Dockerfile'ı kullanır.
Docker Hub — "Image Kütüphanesi"
Docker Hub, image'ları saklayıp paylaştığınız merkezi registry'dir.
GitHub nasıl kodun deposuysa, Hub da image'ların deposudur.
Popüler Resmi Image'lar
- python:3.11-slim
- nginx:latest
- postgres:15-alpine
- redis:7-alpine
Temel Komutlar
# İndir
docker pull nginx
# Etiketle
docker tag myapp:v1 user/myapp:v1
# Yükle
docker push user/myapp:v1
AWS karşılığı:
ECR (Elastic Container Registry) — özel, şirket içi registry
Port Mapping & Volume
Port Mapping — -p
docker run -p 8080:8000 myapp
# ↑host ↑container
Tarayıcıdan :8080 → container'ın :8000 portuna.
Birden fazla container:
-p 8001:8000, -p 8002:8000...
Volume — -v
Container silinince veriler gider. Volume ile kalıcı olur.
docker run -v /host/data:/app/data myapp
Kullanım: veritabanı verileri, yüklenen dosyalar, log dosyaları
Docker Compose
version: "3.8"
services:
api:
build: .
ports:
- "8000:8000"
depends_on:
- redis
redis:
image: redis:7-alpine
ports:
- "6379:6379"
Komutlar
docker compose up -d
docker compose logs -f
# 3 api instance
docker compose up --scale api=3
docker compose down
Birden fazla servisi tek dosyayla yönet. Geliştirme ve test için ideal.
Swarm ve Ekosistem
Docker Swarm
Birden fazla sunucuya container dağıtmak için Docker'ın orkestrasyon çözümü.
- Manager + Worker node'lar
- Otomatik yük dağıtımı
--replicas 5 ile ölçekleme
- Kurulumu basit
Kubernetes (K8s)
Endüstri standardı. Swarm'dan güçlü, daha karmaşık. AWS'de EKS olarak gelir.
Ekosistem Haritası
BULUT · AWS ECS / EKS / Azure ACI
ORKESTRASYON · Swarm / Kubernetes
COMPOSE · çoklu container yönetimi
container
container
container
container
compose → yerel · swarm / k8s → prod
Dockerfile
→
Image
→
Registry
Docker Hub / ECR / GHCR
1. Dersi Tamamladık
[ ]
Image
Salt okunur şablon. Dockerfile'dan üretilir.
▶
Container
Image'dan çalışan örnek. Saniyeler içinde başlar.
≡
Dockerfile
Image nasıl inşa edilir? FROM, RUN, COPY, CMD.
Sonraki ders: Gerçek bir ML modelini Docker ile paketleyip çalıştırıyoruz.