Docker ne işe yarar?
Docker, uygulamanızı bağımlılıklarıyla birlikte izole bir konteynerde çalıştırmanızı sağlar. “Benim makinemde çalışıyordu” sorununu azaltır; aynı imaj geliştirme, staging ve üretimde tekrarlanır.
Klasik LAMP/LEMP kurulumunda paketler doğrudan işletim sistemine kurulur. Docker’da ise Nginx, uygulama ve veritabanı ayrı konteynerler olabilir; sürüm çakışması azalır. Bu, LAMP’ın yerini her zaman almaz — basit tek site için klasik stack hâlâ geçerlidir. Çok servisli veya mikroservis adımlarında Compose öne çıkar.
VDS ihtiyacı: root erişim, yeterli RAM (ör. app + Postgres + Redis için pratikte 4–8 GB ve üzeri) ve NVMe disk. 1 GB RAM’lik bir makinede birden fazla konteyner hızlıca swap’e düşer.
Kurulum taslağı (Linux VDS)
Aşağıdaki adımlar genel bir outline’tır; dağıtıma göre paket adları değişebilir. Üretimde resmi Docker dokümantasyonundaki dağıtımınıza özel talimatı izleyin. Örnek akış Ubuntu/Debian ailesi içindir.
1) Sistemi güncelleyin: apt update && apt upgrade. 2) Gerekli CA ve araç paketlerini kurun. 3) Docker’ın resmi apt deposunu ekleyip docker-ce, docker-ce-cli, containerd.io paketlerini kurun (veya dağıtımınızın desteklenen yolunu kullanın). 4) Servisi açın: systemctl enable --now docker. 5) Kullanıcınızı docker grubuna ekleyin: usermod -aG docker $USER — ardından oturumu yenileyin.
Doğrulama: docker version ve docker run --rm hello-world. hello-world imajı indikten sonra kısa bir başarı mesajı görürsünüz. Hata alırsanız önce daemon durumuna (systemctl status docker) ve disk doluluğuna bakın. Windows VDS’te Docker Desktop veya konteyner özelliği farklı lisans/hypervisor gereksinimleri taşır; üretim Linux VDS daha yaygındır.
İlk konteyner ve volume
Stateless bir Nginx örneği: docker run -d --name web -p 8080:80 nginx:stable. Tarayıcıdan http://SUNUCU_IP:8080 ile kontrol edin. Bitince docker stop web && docker rm web.
Veriyi konteyner içinde bırakmayın. Named volume veya bind mount kullanın: örneğin -v pgdata:/var/lib/postgresql/data. Volume’leri yedekleme planınıza dahil edin; yalnızca imajı yedeklemek veritabanını kurtarmaz.
Güvenlik: konteyneri mümkünse non-root kullanıcıyla çalıştırın, gereksiz capability vermeyin, --network host’u yalnızca bilinçli kullanın. Özel registry şifrelerini veya API anahtarlarını imaja gömmeyin; ortam değişkeni veya secret dosyası kullanın (bu rehberde sahte proprietary secret örneği yoktur).
Docker Compose ile çoklu servis
Compose, birden fazla servisi tek YAML ile ayağa kaldırır. Tipik desen: app + db + redis. Proje kökünde docker-compose.yml (veya compose.yaml) tutarsınız; docker compose up -d ile başlatır, docker compose logs -f ile izler, docker compose down ile durdurursunuz.
Üretimde her servise memory/cpu limit koyun (deploy.resources veya mem_limit alanları sürümünüze göre değişir). Restart politikası (unless-stopped) kısa kesintilerde işe yarar. Sağlık kontrolü (healthcheck) ile bağımlı servislerin hazır olmasını bekleyin.
Deploy akışı: imajı CI’da build edip registry’ye push etmek veya VDS’te git pull sonrası compose build yapmak. Basit Git deploy ve Node.js süreç yönetimi için ilgili rehberlere bakın; Compose ile PM2’yi aynı iş için karıştırmayın — birini seçin.
| Bileşen | Örnek rol | Kaynak ipucu | Yedekleme |
|---|---|---|---|
| app | API / web süreci | 2–4 GB RAM başlangıç | İmaj + env dosyası |
| db | Postgres / MySQL | RAM + hızlı NVMe | Volume dump (pg_dump vb.) |
| redis | Önbellek / kuyruk | 256–1024 MB sık yeter | AOF/RDB politikası |
| proxy | Nginx / Caddy | Düşük CPU | Konfig dosyası Git’te |
Üretim ve kaynak hijyeni
Kullanılmayan imaj ve konteynerler diski doldurur: docker system df ile bakın, bilinçli prune yapın (docker system prune -a veriyi silmez ama kullanılmayan imajları siler — production’da dikkat). Log sürücüsünü ve max-size’ı sınırlayın; aksi halde tek konteyner onlarca GB log üretebilir.
İzleme: docker stats ile anlık CPU/RAM, host’ta free -h ve df -h. Swap’e düşüyorsanız konteyner sayısını azaltın veya VDS RAM yükseltin. Paralel build ve çok konteyner için Ryzen gibi çok çekirdekli hatlar genelde daha rahattır.
Güvenlik güncellemeleri: hem host OS hem temel imajları (node:20-alpine vb.) düzenli yenileyin. Eski base image CVE biriktirir. Firewall’da yalnızca publish ettiğiniz portları açın; Compose’un iç ağı dışarıya otomatik açılmaz, -p ile publish ettiğiniz portlar açılır.
Emriva üzerinde sonraki adım
Geliştirme ve Compose denemeleri için yeterli RAM’li bir VDS seçin; yoğun paralel işlerde Ryzen VDS hatlarına bakabilirsiniz. Klasik PHP stack düşünüyorsanız LAMP/LEMP rehberi, Node süreci için Node.js deploy rehberi tamamlayıcıdır.
Sipariş sonrası SSH ile yukarıdaki outline’ı uygulayın. Takıldığınızda dağıtım adınızı, docker version çıktısını ve hata satırını destek talebine ekleyin — genel “çalışmıyor” mesajından daha hızlı ilerlenir.
