PruneMate: Tool dọn rác Docker an toàn, tự động theo lịch

Anh em sử dụng docker trên ubuntu chạy dự án sau một vài tuần máy tự nhiên đầy ổ, báo lỗi no space left on device. Lúc đó nếu với các bác có kinh nghiệm thì không phải là vấn đề nhưng với anh em newbie thì mò docker system prune -a rất dễ toang, đặc biệt thời đại AI copy paste nhất nhanh, lúc đấy rất dễ bị xoá nhầm volume quan trọng làm mất data.

PruneMate là một web UI gọn nhẹ chạy trên docker giúp anh em newbie giải quyết bài toán dọn mọi thứ Docker an toàn hơn, nó theo kiểu có lịch hẹn giờ, có xem preview sẽ xóa gì, có notify và có thống kê sau mỗi lần dọn.

019bf5b0-9f61-7f5c-bf5a-3f719a646807

PruneMate có thể làm được những gì?

PruneMate chạy như một container, kết nối vào Docker thông qua docker.sock và điều khiển các lệnh prune giúp bạn. Nói dễ hiểu nó là bảng điều khiển dọn rác Docker: bạn chọn dọn cái gì, dọn khi nào, xem trước cho chắc, rồi sau đó xem báo cáo đã dọn được bao nhiêu. Cụ thể nó làm được:

  • Dọn rác Docker theo lịch: hẹn giờ chạy daily / weekly / monthly hoặc để chỉ chạy thủ công khi bạn muốn.
  • Bật/tắt lịch dọn bằng 1 nút: hôm nào không muốn nó tự chạy thì tắt schedule, cần thì bật lại.
  • Prune preview: kiểm tra danh sách trước khi bấm dọn thật tránh xóa nhầm.
  • Chọn đúng loại cần dọn: container, image, network, volume, và build cache (thường là thứ ngốn dung lượng).
  • Xem báo cáo & thống kê: biết mỗi lần dọn xóa gì, reclaim được bao nhiêu, và tổng cộng đã dọn được bao nhiêu từ trước tới giờ.
  • Gửi thông báo khi chạy xong: hỗ trợ Gotify, ntfy.sh, Discord, Telegram.
  • Quản lý nhiều Docker host: gom nhiều máy Docker về một UI (remote host nên đi qua docker-socket-proxy).
  • Đưa số liệu lên dashboard Homepage: có tích hợp để hiển thị stats ngoài dashboard, kể cả khi bật auth.
  • Bật đăng nhập bảo vệ UI: có cơ chế authentication để bảo vệ và Basic Auth fallback cho một số tích hợp.

Hướng dẫn cài đặt

Bước 1: Tạo thư mục lưu config/log

mkdir -p ~/prunemate/{config,logs}
cd ~/prunemate

Bước 2: Chạy PruneMate

docker run -d \
  --name prunemate \
  -p 7676:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v ~/prunemate/logs:/var/log \
  -v ~/prunemate/config:/config \
  -e PRUNEMATE_TZ=Asia/Ho_Chi_Minh \
  -e PRUNEMATE_TIME_24H=true \
  --restart unless-stopped \
  anoniemerd/prunemate:latest

Mở trình duyệt (anh em nhớ thay localhost bằng IP server nhé)

http://localhost:7676/

Trải nghiệm PruneMate

Chuẩn bị ít tài nguyên Docker để test

Nếu máy bạn đang sạch quá thì dọn sẽ không thấy khác biệt. Bạn có thể tạo vài image cơ bản để test:

docker pull alpine:latest
docker pull nginx:latest
docker run --name pm-test-nginx -d nginx:latest
docker stop pm-test-nginx

Tạo build cache:

mkdir -p /tmp/pm-build && cd /tmp/pm-build
cat > Dockerfile <<'EOF'
FROM alpine:latest
RUN echo "hello prunemate" > /hello.txt
EOF

docker build -t pm-cache-test:1 .
docker build -t pm-cache-test:2 .

Prune preview xem cái nào nên xóa

Mục tiêu thấy danh sách trước khi xóa để anh biết xem cái nào nên xóa cái nào không

019bf428-536d-7475-a979-f59ee545915f

Cấu hình dọn rác

Đặt lịch xóa tự động theo Daily/Weekly/Monthly và xóa những thứ gì

019bf372-675c-7486-9933-77b4ecc95277

Thông kê

PruneMate thống kê báo cáo khi quá trình dọn rác được hoàn tất

019bf372-675c-747f-b6fd-db8fd8ed4748

Gửi thông báo khi chạy xong

Web app có hỗ trợ gửi thông báo qua Gotify, ntfy, Discord, Telegram

019bf372-675c-75ef-9581-429a453374a4

Quản lý nhiều Docker host

Chức năng này nó gom nhiều máy Docker về một UI và prune chạy quét qua các host thông qua docker-socket-proxy quá tiện luôn :))

Bạn nhớ triển khai proxy trên mỗi máy remote host nhé (POST=1BUILD=1 nếu muốn prune build cache)

docker run -d \
  --name dockerproxy \
  --restart unless-stopped \
  -p 2375:2375 \
  -e CONTAINERS=1 \
  -e IMAGES=1 \
  -e NETWORKS=1 \
  -e VOLUMES=1 \
  -e BUILD=1 \
  -e POST=1 \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  ghcr.io/tecnativa/docker-socket-proxy:latest
019bf372-675c-7a2e-988f-daed8c031eb9

Authentication

PruneMate còn hỗ trợ tính năng authentication để không ai trong mạng mở UI nghịch lung tung

Tạo password hash base64 bằng tool có sẵn

docker run --rm anoniemerd/prunemate:latest python prunemate.py --gen-hash "your_password"

Restart container với env auth

Stop/remove container cũ:

docker rm -f prunemate

Run lại (thêm 2 biến môi trường):

docker run -d \
  --name prunemate \
  -p 7676:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v ~/prunemate/logs:/var/log \
  -v ~/prunemate/config:/config \
  -e PRUNEMATE_TZ=Asia/Ho_Chi_Minh \
  -e PRUNEMATE_TIME_24H=true \
  -e PRUNEMATE_AUTH_USER=admin \
  -e PRUNEMATE_AUTH_PASSWORD_HASH='' \
  --restart unless-stopped \
  anoniemerd/prunemate:latest

Kết

Nếu anh em đang dùng Docker trên unbuntu mà hay bị đầy ổ thì PruneMate là kiểu tool nhẹ dễ dùng cho người mới: có UI, có preview, có schedule, có notify. Dựng lên 1~2 phút, dùng thử vài lần là bạn sẽ thấy việc dọn rác Docker tiện lợi lợi tránh được việc docker system prune, còn chắc chắn vẫn ưu tiên kỹ năng gõ terminal để hiểu sâu và thao tác chuyên nghiệp rồi :*D

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail

Sự kiện đang hiện hành

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia