Docker container kaç CPU kullanır?


120

Ben çalıştırıyorum Diyelim çoklu işlem , tüm / çoklu çekirdek / konağın işlemcileri ya da sadece birini kullanmak liman işçisi olacak çoklu süreçleri yumurtlama bir liman işçisi kabın içine hizmet?


11
İçinde bulunduğu cgroup kadar CPU kullanmasına izin verilir. Varsayılan olarak sınırlı değildir. --cpuset-cpusBunu değiştirmek isteyip istemediğine bak .
Charles Duffy

3
(Docker konteyneri sadece bir grup özel ad alanıdır - CPU'ları taklit etmediği için, onlara herhangi bir kısıtlama getirmek için kendi yolundan çıkması gerekir; Linux çekirdekleri, bu türden çıkışlara izin vermek için olanaklar sağlar. tek yönlü, ancak bu yine de açıkça yapılması gereken bir şey).
Charles Duffy

VirtualBox kullanan Windows üzerinde Docker Toolbox'a ne dersiniz?
Egor Kraev

Yanıtlar:


111

Charles'ın bahsettiği gibi, varsayılan olarak tümü kullanılabilir veya --cpuset-cpusparametreyi kullanarak kapsayıcı başına sınırlayabilirsiniz .

docker run --cpuset-cpus="0-2" myapp:latest

Bu, konteyneri 3 CPU (0, 1 ve 2) ile sınırlar. Daha fazla ayrıntı için docker run belgelerine bakın.


Kapsayıcıların CPU kullanımını sınırlamanın tercih edilen yolu, CPU'larda kesirli bir sınırdır:

docker run --cpus 2.5 myapp:latest

Bu, konteynırınızı ana bilgisayarda 2,5 çekirdek ile sınırlar.


Son olarak, Docker for Mac, Docker for Windows ve docker-machine dahil olmak üzere bir VM içinde docker çalıştırırsanız, bu VM'lerin dizüstü bilgisayarınızın kendisinden ayrı bir CPU limiti olacaktır. Docker, bu sanal makinenin içinde çalışır ve sanal makinenin kendisine verilen tüm kaynakları kullanır. Örneğin, Mac için Docker ile aşağıdaki menüye sahipsiniz:

Mac için Docker Gelişmiş ayarları


Aynı VM üzerinde 2 CPU ile çalışan iki docker container, ikisi de spawing işlemi ise performansı etkiler mi? Öyleyse, sanal makinede yalnızca 2 CPU varken, her ikisi de toplamda dört olmak üzere iki işlem üretir?
cocoPuffs

@cocoPuffs, CPU limitlerini belirtmediğiniz sürece, bu işlemleri aynı ana bilgisayardaki bir konteynerin dışında çalıştırmanızla aynıdır. Her kapsayıcıya CPU sınırları eklemek, bir kapsayıcıdaki işlemlerin tüm CPU kaynaklarını kendisi için kullanmasını engelleyebilir.
BMitch

Gerçekten kapsamlı, harika içerik
Darragh Enright

7

Belki ana sanal makinenizin varsayılan olarak yalnızca bir çekirdeği vardır. Bu nedenle, önce VM cpu-sayınızı artırmalı ve ardından docker çekirdeklerinizi artırmak için --cpuset-cpus seçeneğini kullanmalısınız . Aşağıdaki komutu kullanarak docker varsayılan sanal makinesini kaldırabilir, ardından isteğe bağlı cpu-count ve bellek boyutu ile başka bir VM oluşturabilirsiniz :

docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default

Bu adımdan sonra görüntünüzü çalıştırmadan önce çekirdek sayısını belirleyebilirsiniz. bu komut toplam 8 çekirdekten 4 çekirdek kullanacaktır.

docker run -it --cpuset-cpus="0-3" your_image_name

Ardından bu komutu kullanarak görüntünüzdeki mevcut çekirdek sayısını kontrol edebilirsiniz:

nproc
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.