Docker Container ใช้ CPU กี่ตัว?


120

สมมติว่าฉันกำลังเรียกใช้บริการมัลติโปรเซสเซอร์ภายในคอนเทนเนอร์นักเทียบท่าที่วางไข่หลายกระบวนการนักเทียบท่าจะใช้คอร์ / ซีพียูทั้งหมด / หลายคอร์ของโฮสต์หรือเพียงอันเดียว


11
ซีพียูจำนวนมากเท่า cgroup ที่อนุญาตให้ใช้ ซึ่งโดยค่าเริ่มต้นจะไม่ จำกัด ดู--cpuset-cpusว่าคุณต้องการเปลี่ยนแปลงหรือไม่
Charles Duffy

3
(คอนเทนเนอร์นักเทียบท่าเป็นเพียงส่วนหนึ่งของเนมสเปซส่วนตัว - เนื่องจากไม่ได้เลียนแบบซีพียูจึงจำเป็นต้องออกนอกเส้นทางเพื่อกำหนดข้อ จำกัด ใด ๆ เคอร์เนล Linux มีสิ่งอำนวยความสะดวกเพื่อให้สามารถออกไปข้างนอกได้ ทางเดียว แต่ยังคงเป็นสิ่งที่ต้องดำเนินการอย่างชัดเจน)
Charles Duffy

แล้ว Docker Toolbox บน Windows ซึ่งใช้ VirtualBox ล่ะ?
Egor Kraev

คำตอบ:


111

ตามที่ 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 คุณมีเมนูต่อไปนี้:

Docker สำหรับ Mac การตั้งค่าขั้นสูง


คอนเทนเนอร์ Docker สองตัวที่ทำงานบน VM เดียวกันกับ 2 CPU จะส่งผลต่อประสิทธิภาพหรือไม่หากทั้งคู่เป็นกระบวนการวางไข่ ดังนั้นทั้งสองจึงเกิดสองกระบวนการรวมเป็นสี่เมื่อมี CPU เพียง 2 ตัวบน VM?
cocoPuffs

@cocoPuffs เว้นแต่คุณจะระบุขีด จำกัด ของ CPU จะเหมือนกับว่าคุณรันกระบวนการเหล่านั้นนอกคอนเทนเนอร์บนโฮสต์เดียวกัน การเพิ่มขีด จำกัด ของ CPU ในแต่ละคอนเทนเนอร์สามารถป้องกันไม่ให้กระบวนการในคอนเทนเนอร์เดียวใช้ทรัพยากร CPU ทั้งหมดสำหรับตัวมันเอง
BMitch

ครอบคลุมสิ่งที่ยอดเยี่ยมจริงๆ
Darragh Enright

7

บางทีโฮสต์ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.