Docker konteynerine daha fazla bellek nasıl atanır


118

Başlık okudukça, konteynırıma daha fazla bellek atamaya çalışıyorum. İlgili olması durumunda docker hub'dan "aallam / tomcat-mysql" adlı bir görüntü kullanıyorum.

Normalde herhangi bir özel bayrak olmadan başlattığımda, 2 GB bellek sınırı var (ayarlanmadıysa belleğin sınırsız olduğunu okumama rağmen)

İşte docker istatistiklerim

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
ba57d6c9e9d2        0.22%               145.6 MiB / 1.952 GiB   7.29%               508 B / 508 B       0 B / 6.91 MB       68

Belleği açıkça böyle ayarlamayı denedim ama aynı sonuçlarla

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

Onu kısıtlayan şeyin belki de VM olduğunu okudum. Peki neden docker istatistikleri konteyner boyutu sınırının 2GB olduğunu gösteriyor?

Yanıtlar:


204

Gördüğünüz bu 2GBsınır, docker'ın çalıştığı VM'nin toplam belleğidir.

Windows için docker veya mac için docker kullanıyorsanız, bunu görev çubuğundaki Whale 🐳 simgesinden kolayca artırabilir, ardından Tercihler -> Gelişmiş'e gidin:

Docker Tercihleri

Ancak, arkasında VirtualBox kullanıyorsanız, VirtualBox'ı açın, docker-machine atanmış belleği seçin ve yapılandırın.

Mac için buna bakın:

https://docs.docker.com/docker-for-mac/#memory

BELLEK Varsayılan olarak, Docker for Mac, Mac'inizdeki toplam kullanılabilir bellekten ayrılan 2 GB çalışma zamanı belleği kullanacak şekilde ayarlanmıştır. Mac için Docker'ın daha az bellek kullanmasını istiyorsanız, bu sayıyı daha yükseğe (örneğin 3'e) veya daha düşük (1'e) ayarlayarak daha hızlı performans elde etmek için uygulamadaki RAM'i artırabilirsiniz.

Pencereler için:

https://docs.docker.com/docker-for-windows/#advanced

Bellek - Windows Linux için Docker'ın kullandığı bellek miktarını değiştirin


73
GUI olmadan nasıl yaparsınız?
Philippe

13
@Philippe, kullanım durumunuz nedir? Windows için Docker veya Mac için docker, guli ile birlikte gelir. Durumunuzun Linux üzerinden yerel docker olduğunu düşünüyorum (üretim sistemleri / bulut için geçerli olan herhangi bir sanal makine olmadan). Bu gibi durumlarda, VM belleğini kurmanıza gerek yoktur çünkü docker, kullanımları için delik makinesine sahiptir.
Robert

10
Evet, bunu daha sonra anladım. Yani docker container'ımın> 4GB RAM'e sahip olmasını istiyorsam, Linux üzerinde geliştirirsem hiçbir şey yapmam gerekmez mi?
Philippe

3
Size, liman işçisi kaplarda değil atama hafızayı yapmak yerine, çünkü esas mümkün değildir sınırlamak bir kap kullanabilirsiniz ne kadar bellek. Mevcut cevabın kapsayıcılara bellek atamakla ilgili olmadığını, docker çalıştığı sanal makineye bellek atamakla ilgili olduğunu unutmayın.
Robert

2
@SiddharthPant, doğrudan bir Linux kutusu üzerinde çalışan docker, mevcut bellek miktarı kadar kullanacaktır, dolayısıyla fiziksel olandan başka bir sınır yoktur.
Robert

21

Docker makinenize maksimum bellek ayırın (docker tercihi -> advance)

Gelişmiş ayarların ekran görüntüsü: Gelişmiş ayarların ekran görüntüsü.

Bu, kapsayıcıları çalıştırırken docker tüketen maksimum sınırı belirleyecektir. Şimdi resminizi 4 veya daha fazla ram için -m = 4g bayrağıyla yeni kapsayıcıda çalıştırın. Örneğin

docker run -m=4g {imageID}

Koç sınırı artış değişikliklerini uygulamayı unutmayın. Docker'ı yeniden başlatın ve ram sınırının arttığını iki kez kontrol edin. Bu, docker konteynerlerinde ram limit artışını görmediğiniz faktörlerden biri olabilir.


17

Varsayılan kapsayıcıyı değiştirmek istiyorsanız ve Virtualbox kullanıyorsanız, bunu komut satırı / CLI aracılığıyla yapabilirsiniz:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.