วิธีกำหนดหน่วยความจำเพิ่มเติมให้กับ Docker container


118

เมื่อชื่ออ่านฉันพยายามกำหนดหน่วยความจำเพิ่มเติมให้กับคอนเทนเนอร์ของฉัน ฉันใช้รูปภาพจาก Docker hub ชื่อ "aallam / tomcat-mysql" ในกรณีที่เกี่ยวข้อง

เมื่อฉันเริ่มต้นตามปกติโดยไม่มีแฟล็กพิเศษใด ๆ หน่วยความจำมีขีด จำกัด 2GB (แม้ว่าฉันจะอ่านว่าหน่วยความจำนั้นไม่ถูกผูกไว้หากไม่ได้ตั้งค่าไว้)

นี่คือสถิตินักเทียบท่าของฉัน

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
ba57d6c9e9d2        0.22%               145.6 MiB / 1.952 GiB   7.29%               508 B / 508 B       0 B / 6.91 MB       68

ฉันลองตั้งค่าหน่วยความจำแบบชัด ๆ แต่ผลลัพธ์เหมือนกัน

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

ฉันได้อ่านว่า VM อาจเป็นสิ่งที่ จำกัด แต่เหตุใดสถิตินักเทียบท่าจึงแสดงให้เห็นว่าขนาดคอนเทนเนอร์ จำกัด คือ 2GB

คำตอบ:


204

ที่2GBขีด จำกัด ที่คุณเห็นคือหน่วยความจำทั้งหมดของ VM ที่นักเทียบท่าวิ่ง

หากคุณใช้ docker-for-windows หรือ docker-for-mac คุณสามารถเพิ่มได้อย่างง่ายดายจากไอคอน Whale 🐳ในแถบงานจากนั้นไปที่ Preferences -> Advanced:

การตั้งค่า Docker

แต่ถ้าคุณใช้ VirtualBox อยู่ข้างหลังให้เปิด VirtualBox เลือกและกำหนดค่าหน่วยความจำที่นักเทียบท่าเครื่องกำหนด

ดูสิ่งนี้สำหรับ Mac:

https://docs.docker.com/docker-for-mac/#memory

MEMORY ตามค่าเริ่มต้น Docker for Mac ถูกตั้งค่าให้ใช้หน่วยความจำรันไทม์ 2 GB ซึ่งจัดสรรจากหน่วยความจำทั้งหมดที่มีอยู่บน Mac ของคุณ คุณสามารถเพิ่ม RAM บนแอพเพื่อให้ได้ประสิทธิภาพที่เร็วขึ้นโดยตั้งค่าตัวเลขนี้ให้สูงขึ้น (เช่น 3) หรือต่ำกว่า (เป็น 1) หากคุณต้องการให้ Docker สำหรับ Mac ใช้หน่วยความจำน้อยลง

สำหรับ Windows:

https://docs.docker.com/docker-for-windows/#advanced

หน่วยความจำ - เปลี่ยนจำนวนหน่วยความจำที่ Docker สำหรับ Windows Linux VM ใช้


73
คุณจะทำอย่างไรโดยไม่ต้องกุ้ย?
Philippe

13
@ ฟิลิปเป้ใช้เคสอะไรครับ? Docker สำหรับ Windows หรือนักเทียบท่าสำหรับ Mac มาพร้อมกับ guli ฉันคิดว่ากรณีของคุณมีนักเทียบท่าดั้งเดิมบน Linux (โดยไม่มีเครื่องเสมือนใด ๆ ซึ่งเป็นกรณีของระบบการผลิต / คลาวด์) ในกรณีเช่นนี้คุณไม่จำเป็นต้องตั้งค่าหน่วยความจำ VM เนื่องจากนักเทียบท่ามีเครื่องรูสำหรับการใช้งาน
Robert

10
ใช่ฉันคิดออกในภายหลัง ดังนั้นหากฉันต้องการให้คอนเทนเนอร์นักเทียบท่ามี RAM> 4GB ฉันไม่จำเป็นต้องทำอะไรเลยหากฉันพัฒนาบน Linux?
Philippe

3
เป็นไปไม่ได้ส่วนใหญ่เป็นเพราะคุณไม่ได้กำหนดหน่วยความจำให้กับคอนเทนเนอร์นักเทียบท่า แต่คุณจะจำกัดจำนวนหน่วยความจำที่คอนเทนเนอร์สามารถใช้ได้ โปรดทราบว่าคำตอบในปัจจุบันไม่ได้เกี่ยวกับการกำหนดหน่วยความจำให้กับคอนเทนเนอร์ แต่เป็นการกำหนดหน่วยความจำให้กับเครื่องเสมือนที่นักเทียบท่าทำงาน
Robert

2
@SiddharthPant นักเทียบท่าที่รันโดยตรงบนกล่องลินุกซ์จะใช้หน่วยความจำเท่าที่มีอยู่ดังนั้นจึงไม่มีข้อ จำกัด อื่นใดนอกจากฟิสิคัล
Robert

21

จัดสรรหน่วยความจำสูงสุดให้กับเครื่องเทียบท่าของคุณจาก (การตั้งค่านักเทียบท่า -> ล่วงหน้า)

ภาพหน้าจอของการตั้งค่าล่วงหน้า: ภาพหน้าจอของการตั้งค่าล่วงหน้า

สิ่งนี้จะตั้งค่าขีด จำกัด สูงสุดที่นักเทียบท่าใช้ในขณะที่เรียกใช้คอนเทนเนอร์ ตอนนี้เรียกใช้รูปภาพของคุณในคอนเทนเนอร์ใหม่ด้วยแฟล็ก -m = 4g สำหรับแรม 4 กิ๊กขึ้นไป เช่น

docker run -m=4g {imageID}

อย่าลืมใช้การเปลี่ยนแปลงการเพิ่มขีด จำกัด ของ ram รีสตาร์ท Docker และตรวจสอบอีกครั้งว่าขีด จำกัด ของ ram เพิ่มขึ้น นี่อาจเป็นปัจจัยหนึ่งที่คุณไม่เห็นการเพิ่มขีด จำกัด ของ ram ในคอนเทนเนอร์นักเทียบท่า


17

หากคุณต้องการเปลี่ยนคอนเทนเนอร์เริ่มต้นและคุณกำลังใช้ Virtualbox คุณสามารถทำได้ผ่าน commandline / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.