สมมติว่าฉันกำลังเรียกใช้บริการมัลติโปรเซสเซอร์ภายในคอนเทนเนอร์นักเทียบท่าที่วางไข่หลายกระบวนการนักเทียบท่าจะใช้คอร์ / ซีพียูทั้งหมด / หลายคอร์ของโฮสต์หรือเพียงอันเดียว
สมมติว่าฉันกำลังเรียกใช้บริการมัลติโปรเซสเซอร์ภายในคอนเทนเนอร์นักเทียบท่าที่วางไข่หลายกระบวนการนักเทียบท่าจะใช้คอร์ / ซีพียูทั้งหมด / หลายคอร์ของโฮสต์หรือเพียงอันเดียว
คำตอบ:
ตามที่ Charles กล่าวถึงโดยค่าเริ่มต้นสามารถใช้ได้ทั้งหมดหรือคุณสามารถ จำกัด ต่อคอนเทนเนอร์โดยใช้--cpuset-cpus
พารามิเตอร์
docker run --cpuset-cpus="0-2" myapp:latest
ซึ่งจะ จำกัด คอนเทนเนอร์ไว้ที่ CPU 3 ตัว (0, 1 และ 2) ดูนักเทียบท่ารันเอกสารสำหรับรายละเอียดเพิ่มเติม
วิธีที่แนะนำในการ จำกัด การใช้งาน CPU ของคอนเทนเนอร์คือการ จำกัด เศษส่วนของ CPU:
docker run --cpus 2.5 myapp:latest
นั่นจะ จำกัด คอนเทนเนอร์ของคุณไว้ที่ 2.5 คอร์บนโฮสต์
สุดท้ายนี้หากคุณเรียกใช้นักเทียบท่าภายใน VM รวมถึง Docker for Mac, Docker สำหรับ Windows และ Docker-machine VM เหล่านั้นจะมีขีด จำกัด CPU แยกจากแล็ปท็อปของคุณเอง นักเทียบท่าทำงานภายใน VM นั้นและจะใช้ทรัพยากรทั้งหมดที่มอบให้กับ VM เอง เช่นกับ Docker สำหรับ Mac คุณมีเมนูต่อไปนี้:
บางทีโฮสต์ VM ของคุณอาจมีเพียงคอร์เดียวตามค่าเริ่มต้น ดังนั้นคุณควรเพิ่ม VM cpu-count ของคุณก่อนจากนั้นใช้ตัวเลือก--cpuset-cpusเพื่อเพิ่มแกนนักเทียบท่าของคุณ คุณสามารถลบ Docker เริ่มต้น VM โดยใช้คำสั่งต่อไปนี้จากนั้นคุณสามารถสร้าง VM อื่นที่มีจำนวนซีพียูและขนาดหน่วยความจำเสริม :
docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default
หลังจากขั้นตอนนี้คุณสามารถระบุจำนวนคอร์ก่อนที่จะเรียกใช้รูปภาพของคุณ คำสั่งนี้จะใช้ 4 คอร์จากทั้งหมด 8 คอร์
docker run -it --cpuset-cpus="0-3" your_image_name
จากนั้นคุณสามารถตรวจสอบจำนวนแกนที่มีอยู่ในรูปภาพของคุณโดยใช้คำสั่งนี้:
nproc
--cpuset-cpus
ว่าคุณต้องการเปลี่ยนแปลงหรือไม่