Docker Kubernetes e-ticaret altyapısı, modern yazılım geliştirme dünyasında neredeyse standart hale gelmiştir. Konteynerizasyon teknolojisi, uygulamaları ortam bağımsız biçimde paketleyerek geliştirme, test ve prodüksiyon ortamları arasındaki tutarsızlıkları ortadan kaldırır. Bu kapsamlı rehberde Docker ve Kubernetes'i e-ticaret perspektifinden ele alıyor, pratik uygulama rehberliği sunuyoruz.
Konteynerizasyon Nedir ve Neden Önemlidir?
Konteyner, uygulamayı ve tüm bağımlılıklarını (kütüphaneler, runtime, konfigürasyon) tek bir paket içinde barındıran hafif izolasyon birimidir. Sanal makinelerden farklı olarak işletim sistemi çekirdeğini paylaşır, bu nedenle çok daha az kaynak tüketir ve saniyeler içinde başlar. 'Benim makinemde çalışıyor' sorununu tamamen ortadan kaldıran konteynerler, geliştirme sürecini ve production deployment'larını dramatik biçimde kolaylaştırır.
- Ortam Tutarlılığı: Geliştirici laptopundan CI/CD sistemine, test ortamından production'a kadar aynı container image çalışır. Node.js versiyon uyumsuzlukları, eksik kütüphaneler veya farklı işletim sistemi davranışları gibi sorunlar tamamen ortadan kalkar.
- Hızlı Deployment: Container image'lar saniyeler içinde başlatılır. Yeni bir servis versiyonu, eski versiyonla paralel çalıştırılarak sorunsuz geçiş sağlanabilir. Bu, özellikle yoğun kampanya dönemlerinde kritik önem taşır.
- Kaynak Verimliliği: Bir sunucu üzerinde onlarca container çalıştırılabilir. Sanal makine overhead'i olmadığından aynı donanımla çok daha fazla iş yükü işlenir ve altyapı maliyetleri düşer.
- Mikroservis Uyumu: Her mikroservis bağımsız container olarak paketlenir ve deploy edilir. Servisler arası bağımlılık yönetimi çok daha temiz bir hal alır.
Docker Temel Kavramlar ve Dockerfile Yazımı
Docker ekosistemin üç temel kavramı image, container ve registry'dir. Image, uygulamanın çalıştırılabilir anlık görüntüsüdür; salt okunur katmanlardan oluşur. Container, image'ın çalışan örneğidir; yazılabilir katman eklenmiş halidir. Registry ise image'ların depolandığı ve paylaşıldığı merkezi depodur; Docker Hub kamuya açık registry'nin en yaygın örneğidir, ECR (AWS), GCR (Google) ve ACR (Azure) ise yönetimli özel seçeneklerdir.
E-Ticaret Node.js Uygulaması için Örnek Dockerfile
İyi bir Dockerfile yazımı hem güvenlik hem de image boyutu açısından optimize edilmelidir. Multi-stage build kullanarak build araçlarını final image'a dahil etmeyin; bu, image boyutunu yüzde 60-80 küçültebilir. Non-root kullanıcı ile çalıştırın: root kullanıcı ile çalışan container, bir güvenlik açığı durumunda tüm host sistemi tehlikeye girebilir. Specific tag kullanın; 'latest' tag'i production ortamında belirsizliğe yol açar. Layer caching'den yararlanmak için package.json'ı kaynak koddan önce kopyalayın; bağımlılıklar değişmediğinde cache geçerliliğini korur ve build süresi kısalır. .dockerignore dosyası ile node_modules, .git ve test dosyalarını image'dan dışlayın.
Docker Compose ile Multi-Service Setup
Docker Compose, birden fazla servisi tanımlayan ve tek komutla başlatan bir araçtır. E-ticaret geliştirme ortamı için docker-compose.yml içinde web uygulaması, PostgreSQL veritabanı, Redis cache, Elasticsearch ve Nginx reverse proxy tanımlanabilir. docker compose up -d komutu tüm servisleri başlatır. Depends_on ile servis başlatma sırası belirlenir. Named volume'lar ile veritabanı verisi container yeniden başlatmalarında korunur. Geliştirici, projeyi klonlayıp tek komutla tam ortamı ayağa kaldırabilir; bu, onboarding sürecini dramatik biçimde kısaltır.
Kubernetes: Konteyner Orkestrasyon Platformu
Kubernetes (K8s), konteyner yönetimini büyük ölçekte otomatikleştiren açık kaynaklı bir platformdur. Google tarafından geliştirilen ve 2014'te açık kaynak olarak yayımlanan Kubernetes, bugün CNCF bünyesinde devam etmektedir. Birden fazla sunucu üzerinde containerized uygulamaları dağıtmayı, ölçeklendirmeyi ve yönetmeyi otomatize eder. Pod, Deployment, Service, ConfigMap, Secret, Ingress ve Namespace temel Kubernetes kaynaklarıdır.
- Pod: En küçük deploy birimi olup bir veya birden fazla container barındırır. Sidecar pattern ile ana container yanına log collector veya proxy container eklenebilir. Pod'lar geçicidir; öldüğünde Deployment tarafından yeniden oluşturulur.
- Deployment: İstenen replica sayısını yönetir ve rolling update ile sıfır kesintili güncelleme sağlar. Rollback mekanizması ile sorunlu güncellemeler hızla geri alınabilir. E-ticaret ürün servisi için minimum 3 replica önerilir.
- Service: Pod'ların önüne sabit bir DNS adı ve IP adresi koyar. ClusterIP (iç trafik), NodePort ve LoadBalancer tipleri mevcuttur. Kube-proxy, gelen trafiği sağlıklı pod'lara yönlendirir.
- Ingress: HTTP/HTTPS trafiğini yönetir, SSL termination ve path-based routing sağlar. Nginx Ingress Controller, en yaygın kullanılan implementasyondur.
Horizontal Auto-Scaling ve Kaynak Yönetimi
Kubernetes HPA (Horizontal Pod Autoscaler), CPU ve memory metriklerine göre pod sayısını otomatik olarak artırıp azaltır. E-ticaret kampanya dönemlerinde sipariş servisinin replica sayısı 3'ten 50'ye otomatik çıkabilir; kampanya bittiğinde minimum seviyeye döner. Custom metrics ile istek sayısı, kuyruk uzunluğu veya uygulama özel metrikler üzerinden de ölçekleme tanımlanabilir. KEDA (Kubernetes Event-Driven Autoscaling), Kafka mesaj sayısı gibi olay tabanlı ölçekleme için güçlü bir seçenektir. VPA (Vertical Pod Autoscaler) ise CPU/memory request değerlerini otomatik önerir. Resource request ve limit tanımlamak hem adil kaynak paylaşımı hem de QoS güvencesi açısından zorunludur.
CI/CD Pipeline Entegrasyonu
Modern e-ticaret altyapısında her kod değişikliği otomatik olarak test edilmeli, konteyner image'ı oluşturulmalı ve Kubernetes'e deploy edilmelidir. GitHub Actions ve GitLab CI, bu süreçlerin en popüler otomasyon platformlarıdır. Tipik bir pipeline şu adımları içerir: kod push edilir, unit ve integration testler çalışır, Docker image build edilir ve registry'e push edilir, staging ortamına otomatik deploy yapılır, smoke test geçildikten sonra production'a canary veya blue/green deploy uygulanır. GitOps yaklaşımında ArgoCD veya Flux, Git repository'yi gerçek doğruluk kaynağı olarak kullanır ve cluster durumunu otomatik senkronize eder.
- GitHub Actions Örneği: on push to main trigger'ı ile docker/build-push-action kullanılarak image build ve push otomatize edilir. kubectl rollout restart veya Helm upgrade ile deployment güncellenir. Secrets, GitHub Secrets aracılığıyla güvenli şekilde yönetilir.
Managed Kubernetes: EKS, GKE ve AKS
Kubernetes control plane'i yönetmek ciddi uzmanlık ve efor gerektirir. Managed Kubernetes servisleri bu yükü bulut sağlayıcısına devreder. AWS EKS (Elastic Kubernetes Service), GKE (Google Kubernetes Engine) ve AKS (Azure Kubernetes Service) en popüler managed seçeneklerdir. GKE, Kubernetes'i geliştiren Google tarafından sunulduğundan en olgun managed deneyimi sağlar ve Autopilot modu ile node yönetimini de tamamen üstlenir. EKS, AWS ekosistemiyle derin entegrasyon sunarken AKS, Azure DevOps ve Active Directory entegrasyonuyla kurumsal kullanım için uygundur. Managed Kubernetes ile yalnızca worker node maliyeti ödersiniz; control plane genellikle ücretsiz veya düşük maliyetlidir.
Sık Sorulan Sorular
Docker öğrenmeden Kubernetes kullanılır mı?
Teorik olarak mümkün olsa da pratikte önce Docker'ı anlamak şiddetle önerilir. Container kavramları, image yapısı ve Docker Compose deneyimi, Kubernetes öğrenimini çok daha anlamlı kılar. Docker Desktop ile lokal ortamda başlayın, ardından Docker Compose ile multi-service setup deneyin. Bu temeli oluşturduktan sonra Minikube veya Kind ile lokal Kubernetes'e geçin.
E-ticaret sitemi Kubernetes'e taşımam gerekiyor mu?
Küçük ölçekli e-ticaret siteleri için Kubernetes aşırı karmaşıklık yaratabilir. Docker Compose veya tek sunucu üzerinde containerized deployment ile başlayın. Günlük on binlerce sipariş alıyor, mikroservis mimarisine geçiş planlıyor veya farklı bölgelerde yüksek erişilebilirlik ihtiyacınız varsa Kubernetes ciddi değer sağlar. Managed Kubernetes (EKS, GKE, AKS) operasyonel yükü önemli ölçüde azaltır.
Kubernetes güvenliğini nasıl sağlamalıyım?
Network Policy ile pod'lar arası trafiği kısıtlayın; varsayılan olarak tüm pod'lar birbirleriyle iletişim kurabilir. RBAC (Role-Based Access Control) ile minimum yetki prensibini uygulayın. Pod Security Standards ile privileged container çalıştırılmasını engelleyin. Secret yönetimi için Vault veya AWS Secrets Manager kullanın; Kubernetes Secret'lar base64 ile encode edilmiş olup şifrelenmemiştir. Image vulnerability scanning (Trivy, Snyk) CI pipeline'ına entegre edin.
Kubernetes de CI/CD pipeline maliyetli midir?
GitHub Actions ücretsiz katmanı küçük projeler için yeterlidir; public repo'larda sınırsız dakika, private repo'larda aylık 2.000 dakika ücretsiz sunulur. GitLab CI, self-hosted runner ile pratik olarak ücretsizdir. Jenkins, tam kontrol ve esneklik sunar ancak kendi altyapısında barındırılır. Managed runner maliyetleri dakika bazında hesaplanır; tipik bir e-ticaret pipeline'ı 5-10 dakika sürer. Caching stratejileri ile build süreleri kısaltılarak maliyet optimize edilebilir.
Sonuç
Docker Kubernetes e-ticaret altyapısı, modern ve ölçeklenebilir bir platform kurmak isteyen e-ticaret işletmeleri için güçlü bir teknoloji yığını oluşturur. Docker ile geliştirme ortamı tutarlılığını sağlayın, Kubernetes ile production'da ölçeklenebilir ve güvenilir altyapı kurun, CI/CD pipeline ile kod değişikliklerini güvenle ve hızla deploy edin. Toserof Tech. olarak yazılım altyapısı projeleriniz için iletişime geçin.