نحوه حذف ایمیج (image)، کانتینر (container) و والیوم (volume) در داکر Docker در سرور مجازی
۲۷ دی ۱۴۰۳
مقدمه
داکر (Docker) این امکان را فراهم میکند که برنامهها و سرویسهای خود را در کانتینرها (Containers) سازماندهی کنید تا بتوانید آنها را در هر جایی، اجرا کنید. اما هنگام کار با داکر، بهراحتی ممکن است تعداد زیادی ایمیج (Image)، کانتینر (Container) و والیوم (Volume) غیرقابل استفاده جمع شود که باعث شلوغی خروجی و مصرف فضای دیسک، خواهد شد.
داکر، تمام ابزارهای مورد نیاز برای پاکسازی سرور مجازی لینوکس از این موارد را در اختیار شما قرار میدهد. این مقاله بهصورت یک cheat sheet (برگه تقلب) طراحی شده و دستورات مفیدی را برای آزاد کردن فضای دیسک و سازماندهی سرور مجازی با حذف imageها، کانتینرها و والیومهای غیرقابل استفاده، ارائه میدهد.
در ادامه، بخوانید:
- نحوه پاکسازی تمامی ایمیجها (Images)، کانتینرها (Containers)، والیومها (Volumes) و شبکههای (Networks) غیرقابل استفاده یا معلق
- نحوه حذف داکر ایمیجها (Docker Images)
- حذف کانتینرها (Containers)
- حذف حجمها (Volumes)
- نتیجهگیری
- سوالهای پرتکرار
نحوه پاکسازی تمامی ایمیجها (Images)، کانتینرها (Containers)، والیومها (Volumes) و شبکههای (Networks) غیرقابل استفاده یا معلق
داکر یک دستور واحد ارائه میدهد که میتواند تمامی منابع – یعنی Imageها، کانتینرها (Containers)، والیومها (Volumes) و شبکهها (Networks)— را که معلق (Dangling) هستند (یعنی بدون تگ یا ارتباط با کانتینر هستند) پاک کند:
docker system prune
برای حذف کانتینرهای متوقفشده و تمامی imageهای غیرقابل استفاده (و نه فقط imageهای معلق)، از فلگ -a
استفاده کنید:
docker system prune -a
نحوه حذف داکر ایمیجها
حذف یک یا چند تا ایمیج مشخص
برای مشاهده شناسه imageهای مورد نظرتان، از دستور زیر استفاده کنید که تمامی imageها، از جمله لایههای میانی را نشان میدهد:
docker images -a
برای حذف imageها، شناسه یا تگ آنها را در دستور زیر، قرار بدهید:
docker rmi <Image_ID> <Image_ID>
توجه: فلگ -a
یا --all
در دستور docker images
تمامی ایمیجها، از جمله imageهای Intermediate را نمایش میدهد که هیچ تگی ندارند. استفاده از این فلگ به شناسایی imageهایی که فضای دیسک را اشغال کردهاند و قابل حذف هستند، کمک میکند.
حذف imageهای معلق (Dangling Docker Images)
imageهای معلق لایههایی هستند که هیچ ارتباطی با imageهای تگشده ندارند. این imageها با فلگ -f
و مقدار dangling=true
، قابل مشاهده هستند:
docker images -f dangling=true
برای حذف آنها از دستور زیر استفاده کنید:
docker image prune
نکته: اگر یک image بدون تگگذاری ساخته شود، در لیست imageهای معلق ظاهر خواهد شد. برای جلوگیری از این وضعیت، هنگام ساخت image، تگ آن را مشخص کنید یا بعداً از دستور docker tag
استفاده کنید.
حذف imageها بر اساس یک الگو (Pattern)
برای یافتن imageهای مطابق با یک الگوی خاص، مانند دستور زیر عمل کنید:
docker images -a | grep "pattern"
برای حذف آنها، از دستور زیر استفاده کنید:
docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi
حذف تمامی imageها
برای مشاهده تمامی imageها در سیستم، دستور زیر را اجرا کنید:
docker images -a
برای حذف تمامی imageها، از فلگ -q
برای انتقال شناسه imageها به دستور docker rmi
استفاده کنید:
docker rmi $(docker images -a -q)
حذف کانتینرها
حذف یک یا چند کانتینر خاص
برای مشاهده نام یا شناسه کانتینرهایی که میخواهید حذف کنید، از دستور زیر استفاده کنید:
docker ps -a
برای حذف آنها:
docker rm <ID_or_Name> <ID_or_Name>
حذف یک کانتینر پس از خروج (Upon Exiting)
اگر مطمئن هستید که پس از اجرای کانتینر، دیگر به آن نیازی نخواهید داشت، میتوانید از دستور docker run --rm
استفاده کنید تا کانتینر بهطور خودکار و پس از خروج، حذف شود:
docker run --rm <image_name>
حذف تمامی کانتینرهای متوقفشده (Exited Containers)
برای مشاهده لیست کانتینرهای متوقفشده، از فلگ -f
برای فیلتر وضعیت استفاده کنید:
docker ps -a -f status=exited
برای حذف آنها:
docker rm $(docker ps -a -f status=exited -q)
حذف کانتینرها با چندین فیلتر (More Than One Filter)
میتوانید چندین فیلتر را با تکرار فلگ -f
ترکیب کنید. به عنوان مثال، برای حذف تمامی کانتینرهایی که وضعیت آنها created
یا exited
است:
docker rm $(docker ps -a -f status=exited -f status=created -q)
حذف کانتینرها بر اساس الگو (Remove Containers According to a Pattern)
برای یافتن کانتینرهای مطابق با یک الگو، مانند دستور زیر عمل کنید:
docker ps -a | grep "pattern”
برای حذف آنها:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
متوقفکردن و حذف تمامی کانتینرها (Stop and Remove All Containers)
برای مشاهده تمامی کانتینرهای موجود در سیستم، از دستور زیر استفاده کنید:
docker ps -a
برای متوقفکردن و حذف تمامی کانتینرها:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
حذف والیومها (Removing Volumes)
حذف یک یا چند والیوم خاص
برای پیدا کردن نام والیومهایی که میخواهید حذف کنید، از دستور زیر استفاده کنید:
docker volume ls
برای حذف آنها:
docker volume rm <volume_name> <volume_name>
حذف والیومهای معلق
از آنجا که والیومها از کانتینرها مستقل هستند، حذف یک کانتینر بهطور خودکار والیوم مرتبط با آن را حذف نمیکند. والیومی که دیگر به هیچ کانتینری متصل نیست، به عنوان والیوم معلق شناخته میشود. برای مشاهده این والیومها، از دستور زیر استفاده کنید:
docker volume ls -f dangling=true
برای حذف تمامی والیومهای معلق:
docker volume prune
حذف یک کانتینر و والیوم آن با هم
اگر والیوم را، بدون نام ایجاد کنید، میتوانید آن را هنگام حذف کانتینر با استفاده از فلگ -v
حذف کنید. توجه داشته باشید که این روش تنها برای والیومهای بدون نام کار میکند. برای حذف:
docker rm -v <container_name>
توجه: اگر والیوم بدون نام باشد، بهطور خودکار و بدون هیچ اخطاری حذف میشود. اگر والیوم نامگذاری شده باشد، همچنان در سیستم باقی میماند.
نتیجهگیری
این راهنما برخی از دستورات رایج برای حذف ایمیجها، کانتینرها (containers) و volumes با Docker را پوشش میدهد. دستورات فوق، به سرور مجازی لینوکسی منتهی نمیشود و شما میتوانید در هر سیستمعامل دیگر (مانند ویندوز و MacOS) که Docker بر روی آن نصب شده است؛ دستورات فوق را اجرا و استفاده کنید.
اگر به دنبال راهکاری ساده و سریع برای اجرای برنامههای مبتنی بر Docker هستید، هاست داکر لیارا انتخابی بینظیر است. این سرویس به شما امکان میدهد بدون درگیر شدن با پیچیدگیهای دستورات Docker، برنامههای خود را به راحتی مستقر کنید. مستندات جامع و فارسی لیارا نیز تمام مراحل کار را بهصورت گامبهگام به شما توضیح میدهد. با زیرساخت قدرتمند و پشتیبانی حرفهای، هاست داکر لیارا ابزاری مناسب برای توسعهدهندگان و تیمهای نرمافزاری است.
برای کسانی که به کنترل و انعطاف بیشتری نیاز دارند، سرور مجازی لیارا گزینهای ایدهآل است. این سرویس با زیرساختی قدرتمند و سرعتی بالا، امکان مدیریت کامل سرور را در اختیار شما قرار میدهد. با سرور مجازی ایران لیارا میتوانید برنامههای سفارشی خود را اجرا کرده و تنظیمات دلخواه را پیادهسازی کنید. این سرویس برای حرفهایهایی که نیاز به آزادی عمل بیشتری دارند، بهترین انتخاب است. پشتیبانی سریع و مستندات فنی مناسب، تجربهای روان و بیدردسر را برای کاربران تضمین میکند.
سوالهای پرتکرار
۱. چگونه میتوانم imageهای Docker را در سرور مجازی به طور کامل حذف کنم؟
docker rmi <image-id>
۲. چگونه imageهای استفادهنشده Docker را در سرور مجازی حذف کنم؟
برای حذف imageهای استفادهنشده (از جمله imageهای معلق یا بدون برچسب):
docker image prune
برای حذف تمام iamgeهای استفادهنشده، از گزینه --all
استفاده کنید:
docker image prune --all
۳. چگونه میتوانم تمام imageها و کش Docker را در VPS پاک کنم؟
docker system prune --all --volumes
توجه: دستور فوق، همهچیز مرتبط با داکر را پاک میکند، پس با دقت استفاده کنید.
۴. چگونه فایلها را از یک image در Docker در سرور مجازی، حذف کنم؟
امکان ویرایش مستقیم یک تصویر Docker وجود ندارد. برای این کار باید در ابتدا یک کانتینر از روی image مورد نظر ایجاد و اجرا کنید:
docker run -it <image-id> /bin/bash
سپس، فایلهای مورد نظر را در داخل کانتینر حذف کنید و تغییرات را به عنوان یک image جدید ذخیره کنید:
docker commit <container-id> <new-image-name>
۵. چگونه تمام کانتینرهای متوقف شده Docker را در سرور مجازی دائمی، حذف کنم؟
docker container prune
برای حذف بدون نیاز به ثبت تأییدیه:
docker container prune -f
۶. چگونه کانتینرهای قدیمی Docker را در VPS، حذف کنم؟
برای حذف کانتینرهایی که وضعیت exited
یا created
دارند، در ابتدا لیست آنها را مشاهده کنید:
docker ps -a --filter "status=exited" --filter "status=created"
سپس، آنها را حذف کنید:
docker rm $(docker ps -a -q --filter "status=exited" --filter "status=created")
۷. imageهای Docker در سرور مجازی لینوکس در کجا، ذخیره میشوند؟
imageهای Docker به صورت پیشفرض در دایرکتوری Docker سیستم شما ذخیره میشوند:
/var/lib/docker
اگر که از سرور مجازی استفاده نمیکنید و به صورت کلی، کاربر ویندوز هستید، imageها در مسیر C:\ProgramData\DockerDesktop
(در VM نسخه WSL2) و اگر که کاربر MacOS هستید، imageها در داخل VM در Docker Desktop، ذخیره میشوند.
برای مشاهده دقیق محل ذخیرهسازی و درایور استفادهشده، دستور زیر را، اجرا کنید:
docker info | grep "Docker Root Dir"
۸. چگونه یک کانتینر را بعد از اجرا به طور خودکار حذف کنم؟
برای حذف خودکار یک کانتینر پس از توقف، هنگام اجرای کانتینر از فلگ --rm
استفاده کنید:
docker run --rm <image-id>
دستور فوق، تضمین میکند که کانتینر بلافاصله پس از توقف، حذف شود.
همچنین بخوانید: نحوه نصب وب سرور آپاچی Apache روی سرور مجازی لینوکس Linux یا VPS