Để kiểm soát tài nguyên của Container trong Docker, chúng ta thường sử dụng lệnh docker stats có sẵn khi cài đặt Docker. Khi bạn chạy lệnh docker stats nó sẽ hiển thị dữ liệu theo thời gian thực thông số và tình trạng sử dụng tài nguyên của các container trong hệ thống của bạn.
Kiểm tra thông tin và tình trạng sử dụng tài nguyên trên của Docker Container
Lấy thông tin sử dụng tài nguyên CPU, RAM, Network I/O, Disk I/O của container realtime!
docker stats
Trong đó:
- CONTAINER ID: là ID duy nhất của container
- NAME: Tên của container
- CPU %: Phần trăm sử dụng CPU
- MEM USAGE / LIMIT: Số lượng bộ nhớ sử dụng của container / Tổng bộ nhớ được phép sử dụng (Bộ nhớ của máy host cài docker)
- MEM %: Phần trăm sử dụng bộ nhớ
- NET I/O: Dữ liệu mạng I=INPUT dữ liệu đi vào container và O=OUTPUT là dữ liệu đi ra khỏi container.
- BLOCK I/O: Lượng dữ liệu mà container đã đọc và ghi từ các thiết bị khối (disk) trên máy host.
Bạn tham khảo cách dùng của lệnh docker stats ở đây
Kiểm tra giới hạn CPU / Memory của docker containers
Đầu tiên chúng ta cần hiểu docker container là vùng chứa để chạy các dịch vụ riêng biệt, chứ không phải là máy ảo hoàn chỉnh nên thông tin về CPU, bộ nhớ, ổ cứng mà chúng ta check bằng các cách thông thường thì nó sẽ trả về máy Host cài Docker.
Tuy vậy, nhưng chúng ta hoàn toàn có thể cài đặt giới hạn sử dụng tài nguyên của các container. Tất cả giới hạn đều được kiểm soát bởi cgroup. Vì vậy chúng đơn giản là chạy lệnh cat để lấy các thông tin trong đó
$ cat /sys/fs/cgroup/memory.current 503808 $ cat /sys/fs/cgroup/memory.max 1073741824 $ cat /sys/fs/cgroup/cpu.stat usage_usec 58384 user_usec 23602 system_usec 34782 nr_periods 37 nr_throttled 0 throttled_usec 0 $ cat /sys/fs/cgroup/cpu.max 150000 100000
VD: Lấy thông tin giới hạn bộ nhớ.
docker exec -it <container_name> /sys/fs/cgroup/cpu.max
Tất cả các file chứa thông tin của container ở thư mục này trong container: /sys/fs/cgroup/
Đặt giới hạn CPU, bộ nhớ cho Docker Containers
Set 1GB RAM và 1 core CPU cho container đã có
docker update --memory "1g" --cpuset-cpus "1" <container_name>
Set cho container lúc tạo
docker run -m 512m --memory-reservation=256m nginx docker run --cpus=2 --cpu-shares=2000 nginx
Hoặc với docker composer
service: image: nginx mem_limit: 512m mem_reservation: 128M cpus: 1 ports: - "80:80"
Để kiểm tra lại chúng ta sử dụng lại lệnh docker stats
Chúng ta nghiên cứu kỹ hơn cách quản lý tài nguyên theo tài liệu của Docker ở đây.
Kết luận
Việc quản lý tài nguyên container tốt sẽ giúp cho hệ thống hoạt động ổn định. Hy vọng với bài viết trên sẽ giúp bạn có thêm kiến thức về Docker, cũng như Devops.
Nguồn: vinasupport.com