Docker’da Bellek ve CPU Kullanımını Sınırlama

Docker container remove cpynet

Docker, modern yazılım geliştirme süreçlerinde önemli bir yere sahip. Hafif, taşınabilir, hızlı ve esnek yapısıyla geliştiricilerin işini kolaylaştırıyor. Ancak, konteynerlerin doğru bir şekilde yönetilmesi, sistem kaynaklarının verimli kullanılması açısından büyük önem taşıyor. Bu nedenle, Docker’da bellek ve CPU kullanımını sınırlamak, hem performans hem de güvenilirlik açısından kritik bir konu. Bu yazıda, Docker’da bellek ve CPU sınırlarını nasıl belirleyeceğinizi, hangi araçların işinize yarayacağını ve en iyi uygulamaları detaylı bir şekilde ele alacağız.


1. Docker’da Kaynak Yönetiminin Önemi

Docker konteynerleri, sisteminizde çalışan diğer uygulamalarla aynı donanım kaynaklarını kullanır. Eğer bir konteyner fazla kaynak tüketiyorsa, bu durum diğer konteynerleri veya ana makinedeki uygulamaları olumsuz etkileyebilir. Kaynak sınırları koyarak:

  • Sistem kararlılığını artırabilir,
  • Kaynak tüketimindeki dengesizlikleri önleyebilir,
  • Performansı optimize edebilirsiniz.

2. Docker’da Bellek ve CPU Sınırlandırma Komutları

Docker konteynerlerinin bellek ve CPU kullanımını sınırlandırmak için birkaç temel komut kullanılır. Bu komutları, docker run veya docker-compose.yml dosyaları aracılığıyla belirleyebilirsiniz.

2.1. Bellek Sınırlandırma

Bellek sınırlarını koyarak konteynerlerin belirli bir bellek alanını aşmasını engelleyebilirsiniz.

  • --memory: Maksimum bellek sınırını belirler.
  • --memory-swap: Bellek kullanımının swap ile birlikte maksimum sınırını ayarlar.

Örnek:

docker run --memory=512m --memory-swap=1g my-container

Bu komut, konteynerin 512 MB RAM kullanabileceğini ve toplamda (swap dahil) 1 GB’a kadar çıkabileceğini belirtir.

Swap Nedir?

Swap, fiziksel belleğin yetmediği durumlarda disk üzerinde kullanılan bir alandır. Ancak swap kullanımı performansı düşürebileceği için dikkatli ayarlanmalıdır.


2.2. CPU Sınırlandırma

CPU sınırlandırması, konteynerlerin işlemci çekirdeklerini ne kadar kullanabileceğini belirler.

  • --cpus: CPU kullanımını belirli bir yüzde ile sınırlandırır.
  • --cpu-shares: Konteynerin diğer konteynerlere göre önceliğini belirler.
  • --cpuset-cpus: Konteynerin kullanabileceği belirli çekirdekleri ayarlar.

Örnek:

docker run --cpus=0.5 my-container

Bu komut, konteynerin yalnızca işlemcinin %50’sini kullanabileceğini belirtir.

Çekirdek Ayarı

Eğer belirli çekirdekleri atamak isterseniz:

docker run --cpuset-cpus="0,1" my-container

Bu komut, konteynerin yalnızca birinci ve ikinci çekirdekleri kullanmasını sağlar.


3. Docker Compose ile Kaynak Sınırlandırma

Eğer birden fazla konteynerle çalışıyorsanız, docker-compose.yml dosyasını kullanarak kaynak sınırlarını kolayca belirleyebilirsiniz.

Örnek bir docker-compose.yml:

version: '3.7'
services:
  my-service:
    image: my-image
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'
        reservations:
          memory: 256M
          cpus: '0.25'

Yukarıdaki örnekte:

  • Bellek sınırı 512 MB olarak ayarlanmış,
  • CPU kullanım sınırı %50 olarak belirlenmiştir.

4. En İyi Uygulamalar

Kaynak sınırlandırması yaparken aşağıdaki uygulamalara dikkat etmelisiniz:

4.1. İhtiyaca Göre Ayarlama

Her konteynerin farklı ihtiyaçları olabilir. Uygulamanızın bellek ve CPU tüketim profilini analiz ederek uygun sınırları belirleyin.

4.2. İzleme ve Optimizasyon

Konteynerlerin kaynak kullanımını izlemek için Docker’ın sunduğu izleme araçlarını kullanabilirsiniz:

docker stats

Bu komut, çalışan tüm konteynerlerin CPU, bellek ve ağ kullanımını gerçek zamanlı olarak gösterir.

4.3. Overcommitten Kaçının

Eğer birden fazla konteyner çalıştırıyorsanız, toplam bellek ve CPU sınırlarının ana makinenizin kapasitesini aşmadığından emin olun. Overcommit (aşırı yükleme), sistem kararsızlığına yol açabilir.


5. İleri Düzey Konfigürasyonlar

5.1. cgroup Kullanımı

Docker, Linux cgroups (control groups) kullanarak kaynak yönetimi yapar. Eğer daha gelişmiş bir yapılandırma yapmak istiyorsanız, cgroup parametrelerini manuel olarak düzenleyebilirsiniz.

5.2. Docker Swarm ile Kaynak Yönetimi

Eğer bir Docker Swarm kümesi kullanıyorsanız, kaynak sınırlarını deploy kısmında belirtebilirsiniz.

Örnek:

deploy:
  resources:
    limits:
      memory: 1G
      cpus: "1.0"

5.3. Kubernetes ile Entegrasyon

Eğer Docker konteynerlerinizi Kubernetes ile yönetiyorsanız, kaynak sınırlarını resources kısmında tanımlayabilirsiniz:

resources:
  limits:
    memory: "512Mi"
    cpu: "0.5"

6. Bellek ve CPU Sınırlamanın Avantajları

  • Performans Artışı: Diğer uygulamalara daha fazla kaynak kalmasını sağlar.
  • Kararlılık: Sistem çökmesini önler.
  • Güvenlik: Yanlış çalışan bir konteynerin sistemi bloke etmesini engeller.
  • Maliyet Kontrolü: Özellikle bulut ortamlarında, gereksiz kaynak kullanımını azaltarak maliyetleri düşürür.

7. Örnek Senaryolar

Senaryo 1: Web Sunucusu

Bir NGINX web sunucusu konteynerinin, 1 GB RAM ve %25 CPU kullanmasını sağlamak için:

docker run --memory=1g --cpus=0.25 nginx

Senaryo 2: Yoğun İşlem Gerektiren Uygulama

Bir makine öğrenimi uygulaması için:

docker run --memory=4g --cpus=2 my-ml-app

8. Sonuç

Docker’da bellek ve CPU kullanımını sınırlandırmak, konteynerlerin performansını optimize etmenin ve sistem kaynaklarını verimli kullanmanın önemli bir yoludur. Bu yazıda, temel komutlardan ileri düzey yapılandırmalara kadar her detayı ele aldık. Kaynak sınırlarını belirlerken uygulamanızın ihtiyaçlarını analiz etmeyi, düzenli olarak izlemeyi ve sınırları optimize etmeyi unutmayın.

Docker ile verimli kaynak yönetimi yaparak daha hızlı, kararlı ve güvenilir uygulamalar geliştirebilirsiniz.

Önceki Konu

Değişkenlere Giriş: Python'da Temel Kavramlar | 3

Bültenimize Abone Olun 📬

En son gönderilerimizin doğrudan e-posta kutunuza gelmesi için e-posta bültenimize abone olun.
Düşüncelerinizi özgür bırakın ✨