بررسی حجم Docker
در Runnerهای CI/CD، افزایش ناگهانی مصرف دیسک معمولا به cache layerها، imageهای موقت و build contextهای بزرگ مربوط است. قبل از پاکسازی، باید بفهمید کدام بخش بیشترین فضا را مصرف کرده است.
docker system df
docker image ls
docker builder lsاستفاده از docker system df
خروجی docker system df نمای کلی imageها، containerها، volumeها و build cache را نشان میدهد. اگر build cache بخش اصلی مصرف دیسک است، پاکسازی کورکورانه imageها مشکل را حل نمیکند.
docker system df -vاستفاده از docker buildx du
برای پروژههایی که از BuildKit استفاده میکنند، دستور docker buildx du دید دقیقتری از cacheها میدهد و کمک میکند cacheهای سنگین یا بدون استفاده را پیدا کنید.
docker buildx du
docker buildx du --verbosecache retention strategy
بهترین رویکرد این است که cache را بر اساس سن، فضای مصرفی و نیاز pipeline نگه دارید. در Runnerهای shared، معمولا retention کوتاهتر و limit حجمی مشخص بهتر از پاکسازی کامل است.
| سیاست | کاربرد | ریسک |
|---|---|---|
| پاکسازی بر اساس سن | Runnerهای پرترافیک | ممکن است buildهای کمتکرار کند شوند |
| محدودیت حجمی | محیطهای با دیسک محدود | نیازمند پایش منظم |
| cache اختصاصی branch اصلی | release pipeline | مصرف دیسک بیشتر |
پاکسازی cacheهای قدیمی
برای حذف cacheهای قدیمی، از فیلترهای زمانی استفاده کنید تا cacheهای فعال و تازه از بین نروند.
docker builder prune --filter until=168h
docker buildx prune --filter until=168h --forceجلوگیری از حذف cacheهای فعال
اگر pipelineها همزمان اجرا میشوند، پاکسازی aggressive میتواند buildهای فعال را کند یا ناپایدار کند. زمانبندی cleanup باید خارج از ساعات اوج و با lock ساده انجام شود.
نکته: قبل از اجرای prune در Runnerهای مشترک، jobهای فعال و queue را بررسی کنید. پاکسازی cache نباید همزمان با deploy یا release اصلی اجرا شود.
flock -n /tmp/docker-cache-cleanup.lock \
docker buildx prune --filter until=168h --forceنمونه commandهای واقعی
این نمونه برای cleanup کنترلشده در انتهای روز مناسب است. مقدارها باید با اندازه repoها و سرعت build سازمان تنظیم شوند.
#!/usr/bin/env bash
set -euo pipefail
echo "Docker usage before cleanup"
docker system df
docker buildx prune --filter until=168h --force
docker image prune --filter until=240h --force
echo "Docker usage after cleanup"
docker system dfچکلیست پایانی
- حجم cache با
docker system dfوdocker buildx duبررسی شده است. - سیاست retention بر اساس سن و حجم تعریف شده است.
- cleanup با lock اجرا میشود.
- cacheهای مربوط به branchهای مهم حذف نمیشوند.
- زمان اجرای cleanup با release pipeline تداخل ندارد.
- اثر cleanup روی زمان build اندازهگیری شده است.
