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?
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?
Risposte:
Come menzionato da Charles, per impostazione predefinita possono essere utilizzati tutti, oppure puoi limitarli per contenitore utilizzando il --cpuset-cpus
parametro.
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:
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
--cpuset-cpus
se volevi cambiarlo.