CodeGym /Các khóa học /Docker SELF /Quản lý tài nguyên container

Quản lý tài nguyên container

Docker SELF
Mức độ , Bài học
Có sẵn

6.1 Lý do cần giới hạn tài nguyên của container

Docker làm rất tốt trong việc quản lý tài nguyên container, điều này giúp phân phối hiệu quả sức mạnh của hệ thống và tránh các xung đột không đáng có giữa các container. Điều này đặc biệt quan trọng để đảm bảo rằng ứng dụng trong một container không "ăn hết" tài nguyên và làm chậm hiệu suất của các dịch vụ khác. Giới hạn các tài nguyên như CPU và bộ nhớ sẽ giúp tránh tình trạng quá tải, duy trì ổn định cho hệ thống và đảm bảo tất cả các ứng dụng hoạt động một cách dự đoán được. Trong bài giảng này, tụi mình sẽ tìm hiểu cách đặt giới hạn cho việc sử dụng CPU và bộ nhớ để hệ thống vẫn năng suất ngay cả khi tải cao.

Tại sao việc giới hạn tài nguyên container lại quan trọng:

  1. ổn định: Ngăn chặn tình huống mà một container chiếm hết tài nguyên, dẫn đến việc các container khác hoặc chính hệ thống bị chậm lại.
  2. hiệu quả: Phân phối tài nguyên tốt hơn giữa các container, để tận dụng tối đa sức mạnh của hệ thống.
  3. bảo vệ: Giới hạn tài nguyên giúp tránh các vấn đề với container có thể vô tình hoặc cố ý làm quá tải hệ thống.

6.2 Giới hạn sử dụng CPU

Docker cung cấp một vài cách để giới hạn việc sử dụng CPU của các container.

Quan trọng! Ở đây CPU được hiểu là 1 lõi của bộ xử lý, không phải toàn bộ bộ xử lý. Bộ xử lý 4 lõi sẽ có 4 CPU.

1. Giới hạn mức chia sẻ CPU (--cpu-shares)

Tham số --cpu-shares đặt giá trị ưu tiên tương đối cho việc sử dụng CPU của container. Giá trị mặc định là 1024. Đây là một giá trị tương đối, nghĩa là container với --cpu-shares=512 sẽ có một nửa mức ưu tiên so với container với --cpu-shares=1024.

Ví dụ sử dụng:

Trong ví dụ này, container high_priority_container sẽ có mức độ ưu tiên sử dụng CPU cao hơn so với low_priority_container.

Terminal

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. Giới hạn số lượng CPU (--cpus)

Tham số --cpus đặt số lượng chính xác CPU khả dụng cho container. Ví dụ, giá trị 1.5 có nghĩa là container có thể sử dụng 1.5 CPU.

Ví dụ sử dụng:

Ví dụ này giới hạn container limited_cpu_container không sử dụng nhiều hơn 1.5 CPU.

Terminal


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. Giới hạn thời gian sử dụng CPU (--cpu-quota và --cpu-period)

Tham số --cpu-quota--cpu-period cho phép cấu hình chi tiết hơn việc sử dụng CPU. --cpu-period đặt khoảng thời gian trong micro giây (mặc định là 100000), còn --cpu-quota đặt thời gian tối đa cho phép sử dụng CPU trong khoảng thời gian đó.

Ví dụ sử dụng:

Trong ví dụ này, container custom_cpu_quota_container sẽ sử dụng không quá 50% CPU (25000/50000).

Terminal


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 Giới hạn sử dụng RAM

Giới hạn RAM cho phép kiểm soát container có thể sử dụng bao nhiêu bộ nhớ RAM. Điều này giúp tránh được tình trạng một container chiếm hết bộ nhớ, làm ảnh hưởng đến các tiến trình và container khác.

1. Giới hạn dung lượng RAM tối đa (--memory)

Tham số --memory đặt giới hạn trên của RAM mà container có thể sử dụng. Nếu container vượt quá giới hạn này, hệ thống sẽ dừng nó lại.

Ví dụ sử dụng:

Ví dụ này giới hạn container limited_memory_container chỉ sử dụng tối đa 512 MB RAM.

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. Giới hạn dung lượng bộ nhớ swap (--memory-swap)

Tham số --memory-swap đặt giới hạn tổng cho RAM và swap. Ví dụ, nếu --memory được đặt là 512 MB và --memory-swap là 1 GB, container có thể sử dụng tối đa 512 MB RAM và thêm 512 MB swap.

Ví dụ sử dụng:

Ví dụ này giới hạn container swap_limited_container sử dụng 512 MB RAM và 512 MB swap.

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. Giới hạn sử dụng RAM không dùng swap (--memory-swap=-1)

Để cấm sử dụng swap, hãy đặt tham số --memory-swap thành giá trị -1.

Ví dụ sử dụng:

Ví dụ này giới hạn container no_swap_container 512 MB RAM mà không dùng swap.

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 Tình huống thực tế

1. Chạy các tác vụ ưu tiên cao và ưu tiên thấp

Nếu trên một server có các tác vụ quan trọng và tác vụ phụ, tham số --cpu-shares giúp phân bố tài nguyên sao cho các tác vụ quan trọng nhận được nhiều CPU hơn.

Terminal

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. Giới hạn tài nguyên để kiểm thử

Để kiểm thử ứng dụng trong điều kiện tài nguyên bị giới hạn, có thể đặt ra các giới hạn chặt chẽ về CPU và bộ nhớ. Điều này giúp hiểu rõ ứng dụng sẽ hoạt động ra sao trong các giới hạn này.

Terminal

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. Bảo vệ khỏi việc cạn kiệt tài nguyên

Để tránh tình huống một container sử dụng tất cả tài nguyên của hệ thống, có thể thiết lập giới hạn về bộ nhớ và CPU cho tất cả các container.

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION