آموزش حذف ایمیجها، کانتینرها و والیومهای داکر
اگر چند سالی در حوزه توسعه نرم افزار کار کرده باشید، پس حتما نام Docker به گوشتان خورده. با استفاده از داکر میتوانید برنامهها و سرویسهایتان را در کانتینرها بسته بندی کرده تا بتوانید آنها را در هر محیطی اجرا کنید. با تمام خوبیهایی که داکر دارد اما شلوغ شدن آن بسیار ساده است. اگر درست داکر را مدیریت نکنید با حجم انبوهی از ایمیجها، کانتینرها و والیومهای بدون استفاده مواجه خواهید شد که فضای خیلی زیادی از سیستم شما را اشغال کردهاند.
داکر ابزارهای زیادی را برای تمیزکاری سیستمان در اختیار شما قرار داده است. در این مقاله مهم ترین دستوراتی که برای ساماندهی منابع داکر به آنها نیاز خواهید داشت را به شما نشان میدهیم.
مطالب این صفحه:
# حذف تمام منابع بدون استفاده
داکر یک دستور کلی دارد که با آن میتوانید تمام منابع dangling را حذف کنید. dangling به منابعی گفته میشود که به هیچ کانتینری متصل نیستند. این منابع شامل image, container, volume, و network است:
docker system prune
علاوه بر این، برای حذف تمام کانتینرهای متوقف شده و ایمیجهای بدون استفاده میتوانید از آپشن a- استفاده کنید:
docker system prune -a
# حذف ایمیجهای داکر
برای حذف image در داکر، روشهای مختلفی وجود دارد. میتوانید بسته به نیازتان یکی از این روش ها را انتخاب کنید:
+ حذف یک یا چند image خاص
از دستور docker images
و آپشن a-
استفاده کنید تا بتوانید ID ایمیجهایی که میخواهید حذف کنید را پیدا کنید:
docker images -a
دستور بالا تمام ایمیجها را به شما نشان میدهد. با استفاده از دستور docker rmi
و ID هر ایمیج میتوانید اقدام به حذف آن کنید:
docker rmi Image Image
دوره پیشنهادی: دوره آموزش داکر(docker)
+ حذف ایمیجهای dangle
ایمیجهای داکر به شکل لایه لایه ساخته میشوند. ایمیج dangle به لایهای گفته میشود که با هیچ ایمیج دیگری رابطه نداشته و کار مفیدی انجام نمیدهد. میتوانید با دستور زیر تمام ایمیجهای dangle را ببینید:
docker images -f dangling=true
بعد از اینکه مطمئن شدید میخواهید تمام این ایمیجها را حذف کنید میتوانید از دستور prune استفاده کنید:
docker image prune
+ حذف image بر اساس الگویی خاص
میتوانید برای پیدا کردن و حذف ایمیجهای داکر از الگویی خاص استفاده کنید. برای پیدا کردن ایمیجهایی که با الگوی خاص شما مطابقت داشته باشد باید از دستور docker images
در کنار grep
استفاده کنید:
docker images -a | grep "pattern"
بعد از پیدا کردن ایمیجها میتوانید از دستور awk برای حذف ایمیجها اقدام کنید. دقت کنید که این دستورات توسط هسته داکر پشتیبانی نشده و ممکن است در برخی از سیستمها کار نکند:
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
+ حذف تمام imageها
تمام ایمیجهای روی سیستم را میتوانید با دستور زیر پیدا کنید:
docker images -a
بعد از اینکه مطمئن شدید میخواهید تمام ایمیجها را حذف کنید، میتوانید از آپشن q- استفاده کنید تا ID تمام ایمیجها را به دستور docker rmi
ارسال کنید:
docker rmi $(docker images -a -q)
مقاله پیشنهادی: داکر چیست و چطور آن را با پایتون به کار ببریم؟
# حذف کانتینرهای داکر
درست مانند ایمیجهای داکر، روشهای مختلفی برای حذف کانتینرها وجود دارد. در زیر پرکاربردترین این دستورات را میبینید.
+ حذف یک یا چند container خاص
با استفاده از دستور docker ps
به همراه آپشن a-
میتوانید نام و ID تمام کانتیرها را پیدا کنید، حتی کانتینرهایی که متوقف شدهاند:
docker ps -a
سپس برای حذف کانتینرها باید نام یا ID کانتینر را به دستور docker rm
ارسال کنید:
docker rm ID_or_Name ID_or_Name
+ حذف یک container محض متوقف شدن
اگر میخواهید کانتینری که ساختهاید بعد از متوقف شدن به طور اتوماتیک حذف شود، میتوانید در زمان ایجاد کردن آن از آپشن rm-- استفاده کنید. با اینکار به محض اینکه کانتینر از حالت اجرا خارج شود، خود به خود حذف خواهد شد:
docker run --rm image_name
+ حذف تمام کانتینرهای متوقف شده
میتوانید کانتینرها را براساس وضعیت اجرایی آنها با دستور docker ps -a
فیلتر کنید. مثلا کانتینرهایی که ساخته شدهاند(created)، در حال اجرا هستند(running)، متوقف شدهاند(paused) یا خارج شدهاند(exited).
مثلا با دستور زیر تمام کانتینرهایی که خارج شدهاند را میتوانید پیدا کنید:
docker ps -a -f status=exited
بعد از اینکه تصمیم گرفتید چه نوع کانتینرهایی را میخواهید حذف کنید، میتوانید از دستور زیر برای حذف آنها اقدام کنید:
docker rm $(docker ps -a -f status=exited -q)
+ حذف کانتینر با چند فیلتر
فیلترهای داکر را میتوانید با هم ترکیب کنید، فقط کافیست چند بار از آپشن 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
بعد از اینکه مطمئن شدید میخواهید تمام کانتینرها را متوقف کنید، میتوانید از دستور زیر استفاده کنید:
docker stop $(docker ps -a -q)
سپس برای حذف همه کانتینرها میتوانید از دستور زیر استفاده کنید:
docker rm $(docker ps -a -q)
# حذف والیومهای داکر
volume در داکر به بخشی از فایل سیستم میزبان گفته میشود که روی کانتینرهای داکر نصب شدهاند تا دادههای تولید شده توسط کانتینر در حال اجرا را حفظ کنند. volumeها مستقل از عمر کانتینر روی میزبان ذخیره می شوند یعنی اگر یک کانتینر را حذف کنید، volume مربوط به آن حذف نخواهد شد. این به کاربران امکان می دهد از داده ها نسخه پشتیبان تهیه کنند و اطلاعات را بین کانتینرها به راحتی به اشتراک بگذارند.
+ حذف یک یا چند volume خاص
با استفاده از دستور docker volume ls
میتوانید تمام والیومهای داکر را پیدا کنید:
docker volume ls
سپس میتوانید با دستور docker volume rm
و نام والیوم اقدام به حذف آنها کنید:
docker volume rm volume_name volume_name
+ حذف والیومهای dangle
زمانی که یک کانتینر حذف میشود، volume متصل به آن حذف نخواهد شد. به والیومهایی که به هیچ کانتینری متصل نیستند، dangling volume گفته میشود. میتوانید از دستور زیر برای پیدا کردن تمام والیومهای dangle استفاده کنید:
docker volume ls -f dangling=true
بعد از اینکه مطمئن شدید میخواهید تمام والیومهای dangle را حذف کنید، میتوانید از دستور زیر برای اینکار استفاده کنید:
docker volume prune
+ حذف یک کانتینر و والیومهای آن
اگر یک volume بدون نام ایجاد کردهاید، میتواند همزمان با کانتینر آن را حذف کنید. دقت کنید که این روش فقط روی کانتینرهای بدون نام کار میکند. وقتی یک کانتینر حذف میشود، ID آن چاپ میشود اما اطلاعات از والیوم نشان داده نمیشود. اگر والیوم نام نداشته باشد بدون چاپ چیزی حذف میشود اما اگر نام داشته باشد بدون چاپ چیزی حذف نمیشود:
docker rm -v container_name
# نتیجه گیری
این راهنما برخی از دستورات رایج مورد استفاده برای حذف image، container و volumeهای Docker را پوشش داد.
منبع: digitalocean