- چرا پاکسازی Docker برای سرورهای ابری و VPS حیاتی است؟
- روش کلی و ایمن برای پاکسازی کانتینرها، ایمیجها و ولومها
- مراحل اصلی پاکسازی
- مثالهای عملی و سناریوها
- نکات ایمنی و بهترین شیوهها
- اجرای پاکسازی در حالت production — چکلیست
- ابزارها و اسکریپتهای مفید
- نکات مربوط به زیرساخت ابری، VPS و خدمات شرکت
- خطاهای رایج و نحوه رفع
- جمعبندی
- تماس با پشتیبانی و هماهنگی نگهداری
چرا پاکسازی Docker برای سرورهای ابری و VPS حیاتی است؟
پاکسازی منظم Docker باعث جلوگیری از پر شدن پارتیشن root (/)، بهبود عملکرد CI/CD و رانرها و کاهش حملهپذیری میشود. در سرورهای ابری هزینههای ذخیرهسازی و IOPS میتواند افزایش یابد، بنابراین آزادسازی فضای دیسک موجب صرفهجویی هزینهای و سهولت مدیریت میشود.
روش کلی و ایمن برای پاکسازی کانتینرها، ایمیجها و ولومها
در ادامه مراحل گامبهگام با تاکید بر ایمنی و تهیه بکاپ آمده است. قبل از هر عملیات در محیط تولید، از تهیه پشتیبان و برنامهریزی نگهداری مطمئن شوید.
مراحل اصلی پاکسازی
۱. بررسی وضعیت فعلی
ابتدا وضعیت کانتینرها، ایمیجها، ولومها و مصرف دیسک Docker را بررسی کنید تا تصمیمگیری امنتری داشته باشید.
docker ps
docker ps -a
docker images -a
docker system df
docker volume ls۲. بکاپگیری (ضروری قبل از حذف ولومها)
اگر ولومها شامل دادههای مهم هستند، حتماً بکاپ بگیرید یا از snapshotهای Block Storage در پنل ارائهدهنده استفاده کنید.
docker run --rm -v my_volume:/data -v $(pwd):/backup alpine tar czf /backup/my_volume_backup.tar.gz -C /data .۳. توقف کانتینرها قبل از حذف
کانتینرها را بهصورت ایمن متوقف کنید؛ در صورت نیاز از حذف اجباری با احتیاط استفاده کنید.
docker stop <container_id>
docker rm -f <container_id>۴. حذف کانتینرها
میتوانید کانتینرهای منفرد یا همه کانتینرهای متوقف را حذف کنید.
docker rm <container_id>
docker container prune
# یا:
docker rm $(docker ps -a -q)۵. حذف ایمیجها
ایمیجهای استفاده نشده یا dangling را پاک کنید. در صورت نیاز از force استفاده کنید اما مراقب وابستگیها باشید.
docker rmi <image_id_or_tag>
docker rmi $(docker images -a -q)
docker image prune۶. حذف ولومها
حذف ولومها ممکن است دادههای دائمی را از بین ببرد. قبل از حذف ولومها، بکاپ یا snapshot تهیه کنید.
docker volume rm <volume_name>
docker volume prune
docker system prune --volumes۷. حذف شبکههای غیرضروری
docker network prune۸. حذف همه چیز برای آزادسازی حداکثری فضا
اگر نیاز به بازگردانی حداکثر فضای ممکن دارید از دستور زیر استفاده کنید، اما بسیار محتاطانه عمل کنید.
docker system prune -a --volumes
مثالهای عملی و سناریوها
سناریو ۱ — پاکسازی ایمن در سرور توسعه (local/test)
برای حذف همه منابع ساختهشده توسط docker-compose از دستور زیر استفاده کنید.
docker-compose down --rmi all -v --remove-orphansتوضیح: –rmi all ایمیجهای ساختهشده توسط Compose را حذف میکند، -v ولومها را حذف میکند و –remove-orphans کانتینرهای orphan را پاک مینماید.
سناریو ۲ — رانرهای GitLab CI و پاکسازی خودکار
بهتر است در پایان jobها یا از طریق کرون، پاکسازی دورهای انجام شود تا رانرها با فضای کافی کار کنند.
docker system prune -a --volumes -f0 3 * * * root /usr/bin/docker system prune -a --volumes -f >/dev/null 2>&1سناریو ۳ — سرور GPU/AI با تصاویر سنگین
ایمیجهای ML معمولاً حجیماند؛ نگهداری تنها نسخههای ضروری و استفاده از snapshot برای مدلها توصیه میشود. همچنین در Dockerfile از لایهبندی مناسب و پاکسازی کشها استفاده کنید.
RUN apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/*
نکات ایمنی و بهترین شیوهها
در اینجا جمعبندی نکات عملی برای کاهش ریسک و مدیریت بهتر فضای ذخیرهسازی آورده شده است.
- همیشه قبل از حذف ولوم بکاپ بگیرید. برای دیتابیسها از mysqldump یا pg_dump یا snapshot استفاده کنید.
- از دستورات prune با احتیاط استفاده کنید و در محیط تولید policy و تایید انسانی تعریف کنید.
- نامگذاری منظم ولومها و ایمیجها را رعایت کنید (مثلاً project_env_service_date).
- از labels برای مدیریت بهتر استفاده کنید:
docker ps -a --filter "label=project=myproject" - دایرکتوری
/var/lib/dockerرا میتوانید به حجم جداگانه منتقل کنید تا مدیریت آسانتر شود. - مانیتورینگ با ابزارهایی مثل cadvisor و Prometheus و تنظیم alert برای پر شدن دیسک ضروری است.
- اسکن امنیتی ایمیجها با ابزارهایی مثل Clair، Trivy یا Snyk انجام شود و ایمیجهای آسیبپذیر حذف یا آپدیت شوند.
اجرای پاکسازی در حالت production — چکلیست
چکلیست زیر به ترتیب اجرا شود تا ریسک سرویسدهی کاهش یابد.
- شناسایی ایمیجها و ولومهای حیاتی
- تهیه بکاپ و snapshot
- اطلاعرسانی تیم و زمانبندی نگهداری (maintenance window)
- توقف سرویسها یا مهاجرت ترافیک در صورت لزوم
- اجرای حذف به ترتیب: توقف و حذف کانتینرها، حذف ایمیجهای اضافی، حذف ولومها و شبکهها
- ریاستارت سرویسها و بررسی لاگها
- مانیتورینگ پس از پاکسازی
ابزارها و اسکریپتهای مفید
ابزارها و اسکریپتهای زیر در اتوماسیون پاکسازی و بررسی امنیتی مفید هستند.
- docker-gc: ابزار عمومی برای garbage collection ایمیجها و کانتینرها.
- trivy / clair: برای اسکن امنیتی ایمیجها.
- systemd timer: برای اجرای دورهای docker system prune.
- استفاده از bash script با لاگ و dry-run قبل از اجرای واقعی.
#!/bin/bash
echo "Dry run: will remove the following images:"
docker images -f dangling=true
read -p "Proceed? y/N" ans
if [[ $ans == "y" ]]; then
docker image prune -f
fi
نکات مربوط به زیرساخت ابری، VPS و خدمات شرکت
در سرورهای توزیعشده مطمئن شوید سیاست پاکسازی روی تمام نودها اعمال شده باشد. برای workloadهای سنگین مانند رندرینگ یا AI بهتر است ذخیرهسازی جداگانه (مثل NVMe یا Block Storage) داشته باشید تا حذف Docker دادههای سایر سرویسها را تحت تاثیر قرار ندهد.
برای VPS مخصوص ترید و گیم، نگهداری فضای آزاد دیسک و پاکسازی منظم باعث کاهش لگ و بهبود بوت کانتینرها میشود.
در صورت نیاز به پاکسازی پیچیده یا بزرگ از پشتیبانی تیم مربوطه برای انجام عملیات در maintenance window و تهیه snapshot کمک بگیرید.
خطاهای رایج و نحوه رفع
- خطا: conflict: unable to remove repository reference because it is tagged in a local repository — راهحل: حذف تگ محلی یا استفاده از
docker rmi -f <image_id>. - خطا: volume is in use by container — راهحل: ابتدا کانتینری که از ولوم استفاده میکند را شناسایی و متوقف/حذف کنید:
docker ps -a --filter volume=<volume_name>. - حذف ناخواسته دادهها: راهحل: تهیه منظم بکاپ و استفاده از snapshot سرویس ابری.
جمعبندی
پاکسازی منظم Docker بخش مهمی از نگهداری سرویسها و بهینهسازی هزینه و عملکرد است. اجرای درست مراحل شناسایی، بکاپ، توقف سرویسها و حذف امن ایمیجها، کانتینرها و ولومها ریسک خرابی و از دست رفتن داده را کاهش میدهد. داشتن سیاست پاکسازی و اتوماسیون آن خصوصاً در محیطهای ابری و VPS با لوکیشنهای متعدد حیاتی است.
تماس با پشتیبانی و هماهنگی نگهداری
در صورت نیاز به پاکسازی بزرگ یا تنظیم اسکریپتهای اتوماتیک برای GitLab CI، رانرها یا سرورهای GPU میتوانید از تیم پشتیبانی برای انجام عملیات در maintenance window و تهیه snapshot کمک بگیرید.









