Docker Container Resource Hesaplayıcı

Container türü, RAM ve CPU bilgilerine göre --memory, --cpus, --memory-swap ve restart policy değerlerini hesaplar. docker run ve docker-compose.yml formatında kopyalamaya hazır çıktı üretir.

📋 Host sunucu bilgilerini öğrenmek için
$ nproc # CPU çekirdek sayısı $ free -m | awk '/Mem:/ {print $2}' # Toplam RAM (MB) $ docker info | grep -E 'CPUs|Memory' # Docker'ın gördüğü kaynaklar $ docker stats --no-stream # Çalışan container'ların kaynak kullanımı
Mevcut container limitlerini görmek için: docker inspect <container_adı> | grep -A5 '"Memory"'
Host Sunucu Kaynakları
MB

Tüm container’lar bu havuzdan paylaşır.

core

nproc ile öğrenin.

Container Tanımı
adet

Kaynak dağılımını etkiler.

Hesaplama Sonuçları

–memory
RAM limiti
–memory-swap
RAM + swap toplam
–cpus
CPU kotası
–cpu-shares
göreli CPU ağırlığı
–memory-reservation
yumuşak RAM limiti
–restart
restart policy
Host RAM Kalan
OS + diğerleri için
Host CPU Kalan
OS + diğerleri için
docker run komutu

    
docker-compose.yml

    

Docker Kaynak Limitleri Rehberi

Docker varsayılan olarak container’lara sınırsız kaynak erişimi tanır. Limit tanımlanmazsa tek bir container tüm host RAM’ini tüketip diğer servisleri çökertebilir. Üretim ortamında her container için mutlaka kaynak limiti belirleyin.

Temel Hesaplama Mantığı

Kullanılabilir RAM = Host RAM − OS rezervi (genellikle %15-20)
Container RAM      = Kullanılabilir RAM ÷ container sayısı × ağırlık faktörü
--memory-swap      = --memory × 2  (swap dahil toplam limit; -1 = sınırsız swap)
--cpus             = Host CPU ÷ container sayısı  (ondalıklı değer kabul eder)
--cpu-shares       = 1024 (varsayılan ağırlık; yüksek değer = yüksek öncelik)
Temel Direktifler
🧠

–memory ve –memory-swap

--memory RAM limitini belirler. --memory-swap ise RAM + swap toplamıdır. --memory-swap = --memory ise swap hiç kullanılmaz. -1 değeri swap limitini kaldırır.

⚙️

–cpus ve –cpu-shares

--cpus 1.5 container’ın 1,5 çekirdek eşdeğeri CPU kullanabileceği anlamına gelir. --cpu-shares göreli ağırlıktır — CPU boştaysa limit aşılabilir, yük altında orantılı dağıtılır.

🪣

–memory-reservation

Yumuşak limittir. Host bellek baskısı altındayken Docker bu değere kadar geri çekmeye çalışır. --memory değerinden düşük olmalıdır. Kritik servisler için garanti edilmiş minimum RAM gibi düşünün.

🔄

Restart Policy

unless-stopped en yaygın production tercihidir — manuel durdurulana kadar her koşulda yeniden başlar. on-failure ise sadece sıfır olmayan exit code’larda tetiklenir, maksimum deneme sayısı belirtilebilir.

Container Türüne Göre Tipik Limitler
Container Minimum RAM Önerilen RAM CPU Not
Nginx 32m 128–256m 0.25–0.5 Çok az RAM tüketir, CPU limiti yeterli
PHP-FPM 256m 512m–2g 0.5–2 Worker sayısına göre değişir
MySQL 512m 1g–4g 1–2 innodb_buffer_pool RAM’in %70’i olmalı
Redis 64m 256m–1g 0.25–0.5 maxmemory container limitinden düşük tutun
Node.js 128m 256m–1g 0.5–2 –max-old-space-size ile heap limiti de belirleyin
Python 128m 256m–1g 0.5–1 Worker sayısı = CPU × 2 + 1 (gunicorn)
İzleme Komutları
$ docker stats # Tüm container'ların anlık kaynak kullanımı $ docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.CPUPerc}}" $ docker inspect <name> | grep -A10 '"HostConfig"' # Mevcut limitler $ docker update --memory 1g <name> # Çalışan container'ı güncelle
⚠ OOMKilled Uyarısı Container RAM limitini aşarsa Docker onu anında öldürür (OOMKilled: true). Bunu docker inspect <name> | grep OOMKilled ile kontrol edin. Bu durumla sık karşılaşıyorsanız --memory değerini artırın veya uygulamayı optimize edin.
💡 Redis + Docker Notu Redis container’ı için --memory limitini Redis’in kendi maxmemory değerinden en az %20 yüksek tutun. Redis maxmemory’ye ek olarak overhead bellek kullanır — bu fark hesaba katılmazsa container OOMKilled olabilir.