Bộ chứa docker sử dụng bao nhiêu CPU?


120

Giả sử tôi đang chạy một dịch vụ đa xử lý bên trong bộ chứa docker sinh ra nhiều quy trình, liệu docker sẽ sử dụng tất cả / nhiều lõi / CPU của máy chủ hay chỉ một?


11
Cho phép sử dụng bao nhiêu CPU trong nhóm cgroup. Mà, theo mặc định, không bị giới hạn. Xem --cpuset-cpusbạn có muốn thay đổi điều đó không.
Charles Duffy

3
(Bộ chứa docker chỉ là một loạt các không gian tên riêng - vì nó không mô phỏng CPU, nó sẽ cần phải cố gắng áp đặt bất kỳ hạn chế nào đối với chúng; các hạt nhân Linux cung cấp các phương tiện để cho phép những- theo cách của một người, nhưng đó vẫn là thứ cần thực sự được thực hiện rõ ràng).
Charles Duffy

Làm thế nào về Hộp công cụ Docker trên Windows, sử dụng VirtualBox?
Egor Kraev

Câu trả lời:


111

Như Charles đã đề cập, theo mặc định, tất cả đều có thể được sử dụng hoặc bạn có thể giới hạn nó cho mỗi vùng chứa bằng cách sử dụng --cpuset-cpustham số.

docker run --cpuset-cpus="0-2" myapp:latest

Điều đó sẽ giới hạn vùng chứa ở 3 CPU (0, 1 và 2). Xem tài liệu do docker chạy để biết thêm chi tiết.


Cách ưa thích để hạn chế việc sử dụng CPU của các thùng chứa là giới hạn phân số đối với CPU:

docker run --cpus 2.5 myapp:latest

Điều đó sẽ giới hạn vùng chứa của bạn ở 2,5 lõi trên máy chủ.


Cuối cùng, nếu bạn chạy docker bên trong một máy ảo, bao gồm Docker cho Mac, Docker cho Windows và docker-machine, các máy ảo đó sẽ có giới hạn CPU tách biệt với chính máy tính xách tay của bạn. Docker chạy bên trong máy ảo đó và sẽ sử dụng tất cả các tài nguyên được cấp cho chính máy ảo đó. Ví dụ: với Docker cho Mac, bạn có menu sau:

Docker cho Mac Cài đặt nâng cao


Hai bộ chứa docker chạy trên cùng một máy ảo với 2 CPU có ảnh hưởng đến hiệu suất không nếu chúng đều là quá trình sinh sản? Vì vậy, cả hai sinh ra hai tiến trình với tổng số là bốn khi chỉ có 2 CPU trên VM?
cocoPuffs

@cocoPuffs trừ khi bạn chỉ định giới hạn CPU, nó giống như khi bạn chạy các quy trình đó bên ngoài vùng chứa trên cùng một máy chủ. Việc thêm các giới hạn CPU vào mỗi vùng chứa có thể ngăn các quá trình trong một vùng chứa sử dụng tất cả các tài nguyên CPU cho chính nó.
BMitch

Thực sự toàn diện, công cụ tuyệt vời
Darragh Enright

7

Có thể máy chủ lưu trữ của bạn chỉ có một lõi theo mặc định. Do đó, bạn nên tăng số lượng cpu VM của mình trước và sau đó sử dụng tùy chọn --cpuset-cpus để tăng số lõi docker của bạn. Bạn có thể xóa máy ảo mặc định của docker bằng lệnh sau, sau đó bạn có thể tạo một máy ảo khác với số lượng cpu và kích thước bộ nhớ tùy chọn .:

docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default

Sau bước này, bạn có thể chỉ định số lõi trước khi chạy hình ảnh của mình. lệnh này sẽ sử dụng 4 lõi trong tổng số 8 lõi.

docker run -it --cpuset-cpus="0-3" your_image_name

Sau đó, bạn có thể kiểm tra số lượng lõi có sẵn trong hình ảnh của mình bằng lệnh này:

nproc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.