Muharrem Önel

MUHARREM

Önel
Full Stack Developer
|
Blog'a Dön
DevOps4 Temmuz 20269 dk okuma

Docker ile Web Projelerini Production'a Taşıma Rehberi

M
Muharrem ÖnelFull Stack Developer

Docker Nedir ve Neden Kullanmalısınız?

Docker, uygulamalarınızı container adı verilen izole ortamlarda çalıştırmanızı sağlayan bir platformdur. "Benim bilgisayarımda çalışıyor" sorununu kökten çözer.

Geleneksel Deployment vs Docker

Geleneksel yöntemde sunucuya SSH ile bağlanır, bağımlılıkları tek tek kurarsınız. Her sunucu farklı konfigürasyona sahip olabilir ve "works on my machine" problemi kaçınılmazdır.

Docker ile uygulamanız her ortamda — geliştirme, test, production — aynı şekilde çalışır.

Etkili Bir Dockerfile Yazmak

Dockerfile yazarken en önemli konu multi-stage build kullanmaktır:

  • Build stage: Bağımlılıkları yükler ve uygulamayı derler
  • Production stage: Sadece derlenmiş çıktıyı ve runtime bağımlılıkları içerir
  • Sonuç: Çok daha küçük ve güvenli image'lar

Dikkat edilmesi gerekenler:

  • Her RUN komutunu ayrı satırda yazmak yerine && ile birleştirin — layer sayısını azaltır
  • .dockerignore dosyasını mutlaka kullanın — node_modules, .git gibi gereksiz dosyaları dışarıda bırakın
  • Sık değişen katmanları Dockerfile'ın sonuna koyun — cache optimizasyonu sağlar
  • Environment variable'ları build-time yerine runtime'da inject edin

Container Güvenliği

Production'da container güvenliği kritiktir:

  • Root olmayan kullanıcı: Container'larınızı root yetkisiyle çalıştırmayın
  • Read-only filesystem: Mümkünse filesystem'i readonly mount edin
  • Resource limits: CPU ve memory limitleri belirleyin
  • Image scanning: Düzenli olarak güvenlik açığı taraması yapın
  • Minimal base image: Alpine Linux gibi minimal image'lar tercih edin

Docker Compose ile Çoklu Servis Yönetimi

Gerçek dünya uygulamalarında tek bir container yetmez. Tipik bir yapı:

  • App container: Next.js / Node.js uygulamanız
  • Database container: PostgreSQL veya MongoDB
  • Cache container: Redis
  • Reverse proxy: Nginx veya Traefik

Docker Compose ile tüm bu servisleri tek bir dosyada tanımlayıp tek komutla ayağa kaldırabilirsiniz.

CI/CD Pipeline ile Otomatik Deployment

Manuel deployment hata yapma riskini artırır. Otomatik pipeline ile:

  • Git'e push yapıldığında testler otomatik çalışır
  • Testler geçerse Docker image build edilir
  • Image registry'ye push edilir
  • Production sunucuda otomatik güncelleme yapılır

GitHub Actions, GitLab CI veya Jenkins ile bu pipeline'ı kolayca kurabilirsiniz.

Zero-Downtime Deployment

Kullanıcılarınız güncelleme sırasında kesinti yaşamamalıdır:

  • Rolling update: Eski container'lar yenileriyle tek tek değiştirilir
  • Blue-green deployment: Yeni versiyon paralelde ayağa kalkar, trafik anında yönlendirilir
  • Health check: Container'ın sağlıklı çalıştığını doğrulayan endpoint'ler tanımlayın

Monitoring ve Logging

Production'da container'larınızı izlemek zorunludur:

  • Container log'larını merkezi bir sisteme yönlendirin
  • Disk, CPU ve memory kullanımını takip edin
  • Container restart sayısını izleyin — sürekli restart eden bir container sorun işaretidir
  • Log rotation ayarlarını mutlaka yapın — disk dolmasını önleyin

Sonuç

Docker, modern web geliştirmede artık bir tercih değil, standart haline geldi. Doğru yapılandırılmış bir Docker altyapısı, deployment sürecinizi güvenli, hızlı ve tekrarlanabilir hale getirir.

Projeniz için Docker altyapısı kurmak mı istiyorsunuz? İletişime geçin ve birlikte en uygun mimariyi tasarlayalım.

DockerDevOpsDeploymentCI/CDLinuxNginx