حذف ایمیج‌ها و کانتینرهای داکری

چطور ایمیج‌ها، کانتینرها و ولوم‌ها را در داکر حذف کنیم؟

داکر، برنامه‌ها و کدهایی را که نوشته‌اید در «کانتینر» بسته‌بندی می‌کند. با این کار وابستگی برنامه‌ها به محیط‌های برنامه‌نویسی و اجرا به حداقل می‌رسد. 

این مزیت بسیار خوبی برای توسعه دهندگان و مدیران سیستم است. چراکه مستقل از سیستم عامل و سخت‌افزار، هر جایی که خواستید، می‌توانید برنامه را اجرا کنید.

زمانی که شما با داکر کار می‌کنید، به مرور زمان، کلی ایمیج‌ داکری استفاده نشده و بی‌کاربرد خواهید داشت که بلااستفاده مانده‌اند و فضای دیسک را بیخودی اشغال می‌کنند.

 می‌دانید که صرفه‌جویی در مصرف منبع و مدیریت منابع، بحث خیلی مهمی در برنامه‌نویسی است؛ پس باید منابع قدیمی و بلااستفاده را حذف کنید.

خوشبختانه، ‌داکر به شما این امکان و ابزار را می‌دهد تا سیستم خود را از طریق خط فرمان ( 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 مراجعه کنید.

منبع مقاله

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *