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.
$ 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ı
docker inspect <container_adı> | grep -A5 '"Memory"'
Tüm container’lar bu havuzdan paylaşır.
nproc ile öğrenin.
Kaynak dağılımını etkiler.
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)
–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 | 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) |
$ 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: 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.
--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.