داکر، برنامهها و کدهایی را که نوشتهاید در «کانتینر» بستهبندی میکند. با این کار وابستگی برنامهها به محیطهای برنامهنویسی و اجرا به حداقل میرسد.
این مزیت بسیار خوبی برای توسعه دهندگان و مدیران سیستم است. چراکه مستقل از سیستم عامل و سختافزار، هر جایی که خواستید، میتوانید برنامه را اجرا کنید.
زمانی که شما با داکر کار میکنید، به مرور زمان، کلی ایمیج داکری استفاده نشده و بیکاربرد خواهید داشت که بلااستفاده ماندهاند و فضای دیسک را بیخودی اشغال میکنند.
میدانید که صرفهجویی در مصرف منبع و مدیریت منابع، بحث خیلی مهمی در برنامهنویسی است؛ پس باید منابع قدیمی و بلااستفاده را حذف کنید.
خوشبختانه، داکر به شما این امکان و ابزار را میدهد تا سیستم خود را از طریق خط فرمان ( command line)، از این دادههای بیمصرف، پاکسازی کنید.
این مطلب، راهنمای مختصر و مفیدی از دستوراتی است که برای آزادسازی فضای دیسک و حذف تصاویر بدون استفاده، کانتینرها و volume نیاز دارید.
برای استفاده از این راهنما، کافی است تا کاری که میخواهید انجام دهید را از روی تیتر مورد نظر پیدا کنید. سپس دستوراتی که در آن بخش نوشته شده است را در کامندلاین وارد کنید.
حذف تمامی منابع بلااستفاده در داکر
داکر این امکان را میدهد که با یک فرمان، هر منبع dangling را که خواستید، پاک کنید. منابع dangling، شامل تمام تصاویر، کانتینرها، شبکهها و volumeهایی است که به هیچ کانتینری متصل نیستند.
docker system prune
اگر میخواهید تمام تصاویر استفاده نشده و کانتینرهای متوقف شده را پاک کنید (و نه صرفا dangling images)، کافی است فلگ a- را به کامند قبلی اضافه کنید:
docker system prune -a
پاک کردن ایمیجهای داکری
در این بخش به چند دستور خواهیم پرداخت:
حذف یک یا چند ایمیج خاص
اگر میخواهید یک یا چند ایمیج خاص را پاک کنید، کارتان را با دستور docker images و a- شروع کنید:
docker images -a
با این دستور، شما لیستی از ایمیجهای داکریتان خواهید داشت. حال میتوانید از دستور docker rmi و ID تصویر مورد نظر برای حذف ایمیج مدنظرتان استفاده کنید:
docker rmi Image Image
پاک کردن ایمیجهای معلق مانده (dangling images)
همانطور که میدانید ایمیجهای داکری از لایههای مختلفی تشکیل شدهاند. dangling images، لایههایی هستند که با هیچ ایمیج تگداری ارتباط ندارند. از این ایمیجها استفاده نمیشود و صرفا فضای دیسک شما را اشغال میکنند.
برای دیدن لیستی از این تصاویر، کافی است از دستور زیر استفاده کنید:
docker images -f dangling=true
اگر قصد حذف این تصاویر را دارید از دستور prune استفاده کنید:
docker image prune
پاک کردن تصاویر بر اساس الگوی مشخص
داکر این امکان را میدهد که تصاویری را که از الگوی مشخصی پیروی میکنند پیدا و حذف کنید. برای این منظور، باید از دستور docker images در کنار grep استفاده کنید:
docker images -a | grep "pattern"
این دستور لیست تصاویری را که با الگوی تعیین شده مطابقت دارند نشان میدهد. اکنون باید از دستور awk استفاده کنید تا این تصاویر حذف شوند.
ناگفته نماند که به علت عدم پشتیبانی برخی از این دستورات در هسته داکر، احتمال دارد دستور در سیستم شما کار نکند:
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
حذف همه ایمیجها
دستور زیر، برای نمایش تمام تصاویر به کار برده میشود:
docker images -a
اگر مطمئن هستید که میخواهید تمام تصاویر را حذف کنید، از q- استفاده کنید:
docker rmi $(docker images -a -q)
حذف کانتینرهای داکری
در این بخش هم به چند حالت مختلف خواهیم پرداخت:
حذف یک یا چند کانتینر داکری
دستور docker ps به همراه a- لیست تمام کانتینرها را با ID آن، نشان میدهد:
docker ps -a
برای حذف کانتینر موردنظر، میبایست نام یا ID آن را به دستور docker rm اضافه کنید:
docker rm ID_or_Name ID_or_Name
پاک کردن خودکار کانیتنر بهمحض خروج از آن
شما میتوانید تنظیماتی انجام دهید که بهصورت خودکار، هر کانتینری که ساخته شد، به محض متوقف شدن، حذف شود.
برای این منظور، میبایست زمانی که کانتینر را ایجاد میکنید از -rm استفاده کنید. این دستور به صورت اتومات، کانتینر ایجاد شده را به محض توقف، حذف خواهد کرد:
docker run --rm image_name
پاک کردن تمام کانتینرهای متوقف شده
همانطور که بالاتر اشاره کرددیم.شما میتوانید با دستور docker ps -a لیستی از تمامی کانتینرهای داکریتان ببینید. حالا میتوانید بر اساس وضعیت کانتینرها آنها را فیلتر کنید:
docker ps -a -f status=exited
شما میتوانید یکی از وضعیتهای زیر را برای status انتخاب کنید:
- exited
- created
- running
- paused
- restarting
در مرحلهی بعد برای حذف کانتینر بر اساس وضعیت آن، باید از دستور زیر استفاده کنید:
docker rm $(docker ps -a -f status=exited -q)
پاک کردن کانتینرها با بیش از یک فیلتر
شما میتوانید فیلترهای مختلف را با هم ترکیب کنید و لیستی از کانتینرهای چند فیلتره را حذف کنید.
برای این منظور باید از فلگ f- استفاده کنید. f- لیست کانتینرهایی که یکی از فیلترها را داشته باشند، نشان خواهد داد. مثلاً دستور زیر کانتینرهایی را که در وضعیت created یا exited هستند نشان میدهد:
docker ps -a -f status=exited -f status=created
برای حذف کانتینرها با چند فیلتر، از دستور زیر استفاده میکنیم:
docker rm $(docker ps -a -f status=exited -f status=created -q)
حذف کانتینرها مطابق با الگویی مشخص
مانند ایمیجها، شما میتوانید کانتینرهایی را هم که از الگوی مشخص پیروی میکنند پیدا و حذف کنید.
برای این منظور باید از دستور docker ps در کنار grep استفاده کنید:
docker ps -a | grep "pattern”
برای حذف کانتینرها بایست دستور awk را به کار ببرید. توجه داشته باشید که این دستور نیز ممکن است در همه سیستمها در دسترس نباشد:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
متوقف کردن و حذف تمامی کانتینرها
دستور docker ps در کنار a- لیست تمام کانتینرها با IDشان را به شما نشان میدهد. اگر میخواهید تمام کانتینرها را متوقف کنید، باید دستور زیر را به کار ببرید:
دستور docker ps در کنار a- لیست تمام کانتینرها با IDشان را به شما نشان میدهد:
docker ps -a
در مرحلهی بعد، برای حذف تمام کانتینرها، دستور زیر را استفاده کنید:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
حذف volumeها
در این بخش به چند دستور خواهیم پرداخت:
پاک کردن volume خاص
با استفاده از دستور docker volume ls تمام volumeهای داکر لیست میشوند:
docker volume ls
دستور docker volume rm و نام volume، آن volume مشخص را حذف میکند:
docker volume rm volume_name volume_name
حذف dangling volumeها (در داکر نسخه ۱.۹ به بعد)
از آنجایی که volumeها موجودیت مستقلی از کانتینرها دارند، وقتی که کانتینری را حذف میکنیم volume حذف نمیشود. وقتی که volumeای وجود دارد ولی به هیچ کانتینری وصل نیست به آن dangling volume میگوییم.
دستور زیر، تمام volumeهای dangle را نشان میدهد:
docker volume ls -f dangling=true
در صورتی که مطمئن هستید، میتوانید از دستور زیر استفاده کنید تا تمام volumeهای dangle حذف شود:
docker volume prune
پاک کردن کانتینر و volume مربوط به آن
اگر یک volume بدون نام ایجاد کرده باشید، میتوانید همزمان با حذف کانتینر، آن را نیز حدف کنید.
تأکید میکنیم که این مسأله تنها برای volumeهایی جواب میدهد که نامی برایشان انتخاب نکردهاید. برای این منظور از دستور زیر استفاده کنید:
docker rm -v container_name
جمعبندی
در این مطلب برخی از دستورات کاربردی و رایج برای حذف تصاویر، کانتینرها و volume در داکر را معرفی کردیم.
دستورات بسیار زیاد دیگری نیز وجود دارد که میتوان از آنها نیز استفاده کرد. برای دسترسی به لیست جامع این دستورات باید به مستندات مربوط به docker system prune، docker rmi، docker rm و docker volume rm مراجعه کنید.