Skip to main content

Managing Resources in Docker

การจัดการทรัพยากรใน Docker

เมื่อคุณรัน container บน Docker, คุณสามารถจัดการและควบคุมทรัพยากรที่ container ใช้งานได้ เช่น CPU, RAM, disk space และเครือข่าย เพื่อให้แน่ใจว่าแอปพลิเคชันที่รันอยู่ภายใน container ไม่ใช้ทรัพยากรเกินไปและสามารถทำงานได้อย่างมีประสิทธิภาพ Docker ให้เครื่องมือและตัวเลือกต่างๆ ในการจำกัดและจัดสรรทรัพยากรเหล่านี้ให้กับ container เพื่อป้องกันไม่ให้เกิดปัญหาด้านประสิทธิภาพและความเสถียร

การจำกัดการใช้ CPU

Docker มีตัวเลือกในการจำกัดการใช้ CPU ของ container เพื่อให้สามารถควบคุมการใช้งานทรัพยากร CPU ได้ โดยสามารถกำหนดจำนวนของ CPU ที่จะให้ container ใช้งานได้หรือการจำกัดการใช้ CPU แบบจำเพาะเจาะจงได้

การจำกัดการใช้ CPU

  1. กำหนดจำนวน CPU ที่ใช้:

    คุณสามารถจำกัดจำนวน CPU ที่ container ใช้งานโดยใช้ --cpus:

    docker run --cpus="1.5" my-image

    คำสั่งนี้จะจำกัดการใช้ CPU ของ container ให้ไม่เกิน 1.5 CPU cores

  2. การกำหนด CPU shares:

    คุณสามารถกำหนดสัดส่วนการใช้ CPU ของ container ด้วย --cpu-shares. ค่า default คือ 1024 ซึ่งหมายถึง container จะใช้ CPU ตามสัดส่วนที่ตั้งค่าไว้เมื่อมี container อื่นๆ รันอยู่:

    docker run --cpu-shares=512 my-image

    ถ้า container อื่นๆ ใช้ 1024 CPU shares, container นี้จะใช้ครึ่งหนึ่งของการประมวลผล (50%) ของ CPU ที่ container ใช้

  3. การจำกัด CPU cores:

    ใช้ --cpuset-cpus เพื่อกำหนดว่า container จะทำงานบน CPU cores ใด:

    docker run --cpuset-cpus="0,1" my-image

    คำสั่งนี้จะจำกัดให้ container ทำงานบน CPU core 0 และ 1 เท่านั้น

การจำกัดการใช้ Memory

การจำกัดการใช้ memory ของ container สามารถทำได้ผ่านตัวเลือก --memory และ --memory-swap. นี่จะช่วยป้องกันไม่ให้ container ใช้หน่วยความจำเกินกว่าที่กำหนด

การจำกัดการใช้ Memory

  1. จำกัดหน่วยความจำที่ใช้:

    ใช้ --memory เพื่อจำกัดจำนวนหน่วยความจำที่ container สามารถใช้ได้:

    docker run --memory="512m" my-image

    คำสั่งนี้จะจำกัดให้ container ใช้หน่วยความจำไม่เกิน 512 MB

  2. การตั้งค่า memory swap:

    ใช้ --memory-swap เพื่อกำหนดการใช้ swap memory สำหรับ container เมื่อหน่วยความจำหลักไม่เพียงพอ:

    docker run --memory="512m" --memory-swap="1g" my-image

    คำสั่งนี้จะให้ container ใช้หน่วยความจำหลักสูงสุด 512 MB และใช้ swap ได้สูงสุด 1 GB

  3. การตั้งค่า memory reservation:

    ใช้ --memory-reservation เพื่อกำหนดค่าการสำรองหน่วยความจำสำหรับ container:

    docker run --memory-reservation="256m" my-image

    คำสั่งนี้จะตั้งค่าหน่วยความจำที่ใช้ได้ขั้นต่ำที่ 256 MB

การจำกัด Disk I/O

การควบคุมการใช้ disk I/O สำหรับ container สามารถทำได้ด้วยการใช้ตัวเลือก --blkio-weight และ --device-read-bps, --device-write-bps เพื่อจำกัดความเร็วในการอ่านและเขียนข้อมูลบน disk

การจำกัด Disk I/O

  1. การตั้งค่าค่า blkio-weight:

    --blkio-weight เป็นตัวเลือกที่ใช้ในการกำหนดน้ำหนักในการใช้งาน disk I/O ของ container:

    docker run --blkio-weight=500 my-image

    คำสั่งนี้จะตั้งค่าน้ำหนักในการใช้งาน disk I/O ของ container เป็น 500 (ค่าสูงสุดคือ 1000)

  2. การจำกัดอัตราการอ่านและเขียนข้อมูล:

    สามารถใช้ --device-read-bps และ --device-write-bps เพื่อจำกัดอัตราการอ่านและเขียนข้อมูลจาก disk:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb my-image

    คำสั่งนี้จะจำกัดการอ่านและเขียนข้อมูลจาก disk /dev/sda ที่ 1 MB ต่อวินาที

การจัดการเครือข่าย

การจัดการเครือข่ายใน Docker สามารถทำได้ผ่านตัวเลือก --network ซึ่งใช้กำหนดว่า container จะเชื่อมต่อกับเครือข่ายใดบ้าง

การกำหนดเครือข่าย

  1. การกำหนดเครือข่ายสำหรับ container:

    สามารถเชื่อมต่อ container กับเครือข่ายที่กำหนดเองได้:

    docker run --network=my_network my-image

    คำสั่งนี้จะให้ container เชื่อมต่อกับเครือข่ายที่ชื่อว่า my_network

  2. การสร้างเครือข่ายใหม่:

    ใช้คำสั่ง docker network create เพื่อสร้างเครือข่ายใหม่:

    docker network create my_network

    หลังจากนั้นสามารถเชื่อมต่อ container กับเครือข่ายนี้ได้

การใช้ Docker Swarm และ Kubernetes สำหรับการจัดการทรัพยากร

เมื่อทำงานในสภาพแวดล้อมที่ต้องการการจัดการหลายๆ container และคอนเทนเนอร์หลายๆ โฮสต์, Docker Swarm หรือ Kubernetes จะช่วยจัดการการกระจายทรัพยากรและการสเกลการทำงานได้

Docker Swarm

Docker Swarm เป็นฟีเจอร์การจัดการ container ที่ช่วยให้สามารถสร้าง cluster ของ Docker containers และทำให้สามารถจัดการการกระจายงานได้อัตโนมัติ

Kubernetes

Kubernetes เป็นระบบ orchestration ที่รองรับการจัดการ container ขนาดใหญ่และการกระจายงานบนหลายๆ โฮสต์ ทำให้สามารถจัดการทรัพยากรของ container และการสเกลได้อย่างมีประสิทธิภาพ

สรุป

การจัดการทรัพยากรใน Docker เป็นสิ่งสำคัญในการสร้างแอปพลิเคชันที่มีประสิทธิภาพและเสถียร. Docker ให้ตัวเลือกที่หลากหลายในการจำกัดการใช้ CPU, memory, disk I/O, และการจัดการเครือข่าย ซึ่งจะช่วยให้การรัน container เป็นไปอย่างมีประสิทธิภาพและไม่กระทบต่อระบบโดยรวม นอกจากนี้, การใช้ Docker Swarm และ Kubernetes จะช่วยให้การจัดการหลายๆ container ในสภาพแวดล้อมที่มีการกระจายงานเป็นเรื่องง่ายและมีประสิทธิภาพ