Quante CPU utilizza un container Docker?


120

Diciamo che sto eseguendo un servizio multiprocessing all'interno di un container docker che genera più processi, docker userebbe tutti / più core / CPU dell'host o solo uno?


11
Possono essere utilizzate tante CPU quante sono il cgroup in cui si trova. Che, per impostazione predefinita, non è limitato. Vedi --cpuset-cpusse volevi cambiarlo.
Charles Duffy

3
(Un contenitore docker è solo un mucchio di spazi dei nomi privati ​​- poiché non emula CPU, dovrebbe fare di tutto per imporre loro eventuali restrizioni; i kernel Linux forniscono servizi per consentire tale uscita a modo proprio, ma è ancora qualcosa che deve essere effettivamente eseguito esplicitamente).
Charles Duffy

Che ne dici di Docker Toolbox su Windows, che utilizza VirtualBox?
Egor Kraev

Risposte:


111

Come menzionato da Charles, per impostazione predefinita possono essere utilizzati tutti, oppure puoi limitarli per contenitore utilizzando il --cpuset-cpusparametro.

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

Ciò restringerebbe il contenitore a 3 CPU (0, 1 e 2). Per ulteriori dettagli, vedere i documenti di esecuzione di Docker .


Il modo preferito per limitare l'utilizzo della CPU dei contenitori è con un limite frazionario sulle CPU:

docker run --cpus 2.5 myapp:latest

Ciò limiterebbe il tuo contenitore a 2,5 core sull'host.


Infine, se esegui docker all'interno di una VM, inclusi Docker per Mac, Docker per Windows e docker-machine, quelle VM avranno un limite di CPU separato dal tuo laptop stesso. Docker viene eseguito all'interno di quella VM e utilizzerà tutte le risorse fornite alla VM stessa. Ad esempio, con Docker per Mac hai il seguente menu:

Impostazioni avanzate di Docker per Mac


Due contenitori Docker in esecuzione sulla stessa macchina virtuale con 2 CPU influirebbero sulle prestazioni se fossero entrambi processi di spawn? Quindi entrambi generano due processi per un totale di quattro quando ci sono solo 2 CPU sulla VM?
cocoPuffs

@cocoPuffs a meno che non specifichi i limiti della CPU, è lo stesso che se esegui quei processi fuori da un contenitore sullo stesso host. L'aggiunta di limiti di CPU a ciascun contenitore può impedire ai processi in un contenitore di utilizzare tutte le risorse della CPU per se stesso.
BMitch

Roba davvero completa, fantastica
Darragh Enright

7

Forse la tua VM host ha un solo core per impostazione predefinita. Pertanto dovresti prima aumentare il numero di CPU della VM e quindi utilizzare l' opzione --cpuset-cpus per aumentare i core docker. È possibile rimuovere la VM predefinita docker utilizzando il seguente comando, quindi è possibile creare un'altra VM con conteggio CPU e dimensioni della memoria opzionali :

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

Dopo questo passaggio è possibile specificare il numero di core prima di eseguire l'immagine. questo comando utilizzerà 4 core su 8 core totali.

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

Quindi puoi controllare il numero di core disponibili nella tua immagine usando questo comando:

nproc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.