Nehmen wir an, ich führe einen Multiprozessor- Dienst in einem Docker-Container aus, der mehrere Prozesse erzeugt. Würde Docker alle / mehrere Kerne / CPUs des Hosts oder nur einen verwenden?
Nehmen wir an, ich führe einen Multiprozessor- Dienst in einem Docker-Container aus, der mehrere Prozesse erzeugt. Würde Docker alle / mehrere Kerne / CPUs des Hosts oder nur einen verwenden?
Antworten:
Wie Charles erwähnt, können standardmäßig alle verwendet werden, oder Sie können sie pro Container mithilfe des --cpuset-cpusParameters begrenzen .
docker run --cpuset-cpus="0-2" myapp:latest
Dies würde den Container auf 3 CPUs (0, 1 und 2) beschränken. Weitere Informationen finden Sie in den Docker-Ausführungsdokumenten .
Der bevorzugte Weg, um die CPU-Auslastung von Containern zu begrenzen, besteht in einem Bruchteil der CPUs:
docker run --cpus 2.5 myapp:latest
Das würde Ihren Container auf 2,5 Kerne auf dem Host beschränken.
Wenn Sie Docker in einer VM ausführen, einschließlich Docker für Mac, Docker für Windows und Docker-Computer, haben diese VMs ein CPU-Limit, das von Ihrem Laptop selbst getrennt ist. Docker wird innerhalb dieser VM ausgeführt und verwendet alle Ressourcen, die der VM selbst zugewiesen wurden. ZB mit Docker für Mac haben Sie folgendes Menü:
Möglicherweise hat Ihre Host-VM standardmäßig nur einen Kern. Daher sollten Sie Ihre VM erhöhen CPU-zählen und dann verwenden --cpuset-CPUs Option Ihre Docker Kerne zu erhöhen. Sie können die Docker-Standard-VM mit dem folgenden Befehl entfernen und dann eine weitere VM mit optionaler CPU-Anzahl und Speichergröße erstellen :
docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default
Nach diesem Schritt können Sie die Anzahl der Kerne angeben, bevor Sie Ihr Image ausführen. Dieser Befehl verwendet 4 Kerne von insgesamt 8 Kernen.
docker run -it --cpuset-cpus="0-3" your_image_name
Anschließend können Sie mit diesem Befehl die Anzahl der verfügbaren Kerne in Ihrem Image überprüfen:
nproc
--cpuset-cpusSie, ob Sie das ändern wollten.