Docker، نگهداری برنامه‌ها و سرویس‌های شما را در containerها آسان می‌کند؛ بطوریکه بتوانید آن‌ها را در هر مکان اجرا نمایید. هنگامی‌که با Docker کار می‌کنید، می‌توانید حجم بالایی از داده‌ها را مدیریت کرده و imageها، containerها و volumeهایی که مورد نیاز نیست و تنها فضای دیسک را مصرف می‌کند، حذف نمایید.

 

Docker، تمام ابزارهای لازم برای پاکسازی سیستم را از خط فرمان در اختیار شما قرار می‌دهد. در این مقاله، به دستورات مورد نیاز برای آزادسازی فضای دیسک و سازمان‌دهی سیستم با از بین بردن imageها، containerها و volumeهای اضافی از Docker اشاره می‌کند.

Docker، یک دستور واحد ارائه می‌دهد که تمام منابعی (imageها، containerها، volume‌ها و شبکه‌ها) غیرقابل استفاده را پاک می‌کند:

docker system prune

برای حذف هرگونه container متوقف شده و تمام imageهای بلا استفاده کافیست گزینه a- را به صورت زیر به این دستور اضافه نمایید:

docker system prune -a

 

حذف imageهای Docker

حذف یک یا چند image خاص

از دستور docker images به همراه گزینه a- می‌توانید، به منظور یافتن شناسه imageهای موردنظر برای حذف استفاده کنید. این دستور، همه imageها، از جمله لایه‌های میانی image را به شما نشان می‌دهد. پس از پیدا کردن مکان imageهای مورد نظر برای حذف، می‌توانید شناسه یا برچسب آن‌ها را همراه با دستور docker rmi وارد نمایید:

نمایش image:

docker images -a

حذف image:

docker rmi Image Image

 

حذف imageهای آزاد (Dangling)

imageهای Docker از چند لایه تشکیل شده است. imageهای آزاد، لایه‌هایی هستند که هیچ ارتباطی با هیچ image برچسب‌دار ندارند. آن‌ها دیگر در هیچ موردی قابل استفاده نیستند و تنها فضای دیسک را مصرف می‌کنند. این نوع imageها می‌توانند با افزودن گزینه فیلتر f- با یک مقدار dangling=true به دستور docker images اضافه شوند. زماین که از حذف آن‌ها مطمئن شدید، می‌توانید از دستور docker image prune استفاده نمایید:

توجه: اگر imageای را بدون برچسب گذاری برروی آن ایجاد کنید، آن image در لیست imageهای آزاد ظاهر می‌شود؛ زیرا هیچ ارتباطی با یک image برچسب‌دار ندارد. شما می‌توانید با ارائه یک برچسب هنگام ساخت image، از این وضعیت جلوگیری کنید. همچنین می‌توانید با استفاده از دستور docker tag، به یک image برچسب اختصاص دهید.

نمایش image:

docker images -f dangling=true

حذف image:

docker image prune

 

این مطلب نیز ممکن است برای شما مفید باشد: ایجاد و اجرای Docker Image با استفاده از Dockerfile

 

حذف imageها مطابق با یک الگو

با استفاده از ترکیبی از دستور docker images و grep می‌توانید، تمام imageهای متناسب با یک الگو را پیدا نمایید. پس از اطمینان از حذف آن‌ها، می‌توانید با استفاده از awk و ارسال شناسه imageها به دستور docker rmi، آن‌ها را حذف کنید. توجه داشته باشید که این ابزارها توسط Docker ارائه نمی‌شوند و لزوماً در همه سیستم‌ها در دسترس نیستند:

نمایش Docker:

docker images -a |  grep "pattern"

حذف Docker:

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

 

حذف تمام imageها

تمام imageهای Docker در یک سیستم را می‌توان با افزودن گزینه a- به دستور docker images لیست نمایید. هنگامی‌که از حذف همه آن‌ها مطمئن شدید، می‌توانید گزینه q- را برای ارسال شناسه تصویر به دستور docker rmi اضافه کنید:

نمایش image:

docker images -a

حذف image:

docker rmi $(docker images -a -q)

 

حذف containerها

حذف یک یا چند container خاص

از دستور docker ps به همراه گزینه a- می‌توانید برای یافتن نام یا شناسه containerهای مورد نظر برای حذف استفاده نمایید:

نمایش container:

docker ps -a

حذف container:

docker rm ID_or_Name ID_or_Name

 

حذف container هنگام خروج

هنگامی‌که یک container ایجاد می‌کنید، اگر نمی‌خواهید پس از پایان کار، آن را نگه دارید، با اجرای دستور docker run --rm هنگام خارج شدن از container به طور خودکار حذف می‌شود.

اجرا و حذف خودکار container:

docker run --rm image_name

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه نمایش containerها درDocker

 

حذف تمام containerهای خارج شده

با استفاده از docker ps -a می‌توانید containerها را پیدا کرده و بر اساس وضعیتشان آن‌ها فیلتر نمایید. این وضعیت می‌تواند، وضعیت created (ایجاد شده)، restarting (در حال راه‌اندازی مجدد)، running (در حال اجرا)، paused (متوقف شده) یا exited (خارج شده) باشد. برای نمایش لیست containerهای خارج شده، از گزینه f- برای فیلتر کردن بر اساس وضعیت استفاده کنید. وقتی تأیید کردید که می‌خواهید آن container‌ها را حذف نمایید، با استفاده از q- شناسه‌ها را به دستور docker rm ارسال کنید.

نمایش containerها:

docker ps -a -f status=exited

حذف containerها:

docker rm $(docker ps -a -f status=exited -q)

 

حذف containerها با استفاده از بیش از یک فیلتر

فیلترهای Docker را می‌توان با تکرار گزینه فیلتر با یک مقدار اضافی ترکیب کرد. این، منجر به نمایش لیستی از containerهایی می‌شود که هر یک از این دو شرایط را دارند. به عنوان مثال، اگر می‌خواهید همه containerها علامت گذاری شده به صورت Created (حالتی که می‌تواند هنگام اجرای یک container با دستور نامعتبر ایجاد شود) یا Exited را حذف کنید، می‌توانید از دو فیلتر به صورت زیر استفاده نمایید:

نمایش container:

docker ps -a -f status=exited -f status=created

حذف container:

docker rm $(docker ps -a -f status=exited -f status=created -q)

 

حذف containerها مطابق الگوی

با استفاده از ترکیبی از docker ps و grep می‌توانید تمام containerهای متناسب با یک الگو را پیدا کنید. پس از اطمینان از حذف تمام containerهای لیست شده، می‌توانید از awk و xargs برای ارسال شناسه به دستور docker rm استفاده نمایید. توجه داشته باشید که این ابزارها توسط Docker ارائه نمی‌شوند و لزوماً در همه سیستم‌ها موجود نیستند:

نمایش container:

docker ps -a |  grep "pattern”

حذف container:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

 

متوقف کردن و حذف تمام containerها

شما می‌توانید containerهای موجود در سیستم خود را با docker ps مشاهده کنید. با افزودن گزینه a- به دستور، تمام containerها نشان داده می‌شود. وقتی مطمئن شدید که می‌خواهید آن‌ها را حذف نمایید، می‌توانید گزینه q- را برای ارسال شناسه‌ها به دستورات docker stop و docker rm اضافه کنید:

نمایش container:

docker ps -a

حذف container:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

 

حذف Volumeها

حذف یک یا چند Volume خاص (در Docker 1.9 به بعد)

از دستور docker volume ls می‌توانید، برای یافتن نام یا نام‌های volume مورد نیاز برای حذف استفاده کنید. سپس می‌توانید یک یا چند volume را با دستور docker volume rm حذف نمایید:

نمایش volume:

docker volume ls

حذف volume:

docker volume rm volume_name volume_name

 

حذف volumeهای آزاد (در Docker 1.9 به بعد)

از آنجا که volumeها مستقل از containerها هستند، هنگامی‌که یک container حذف می‌شود، volume مربوط به آن به طور خودکار حذف نمی‌شود. زمانی که یک volume وجود دارد که به هیچ containerای متصل نیست، به آن volume آزاد می‌گویند. به منظور حذف این نوع volumeها می‌توانید از دستور docker volume ls با یک فیلتر استفاده کنید تا نتایج را به volumeهای آزاد محدود نمایید. هنگامی‌که از حذف تمام volumeهای لیست شده مطمئن شدید، می‌توانید همه آن‌ها را با دستور docker volume prune حذف کنید:

نمایش volume:

docker volume ls -f dangling=true

حذف volume:

docker volume prune

 

حذف container و volume مربوط به آن

اگر یک volume بدون نام ایجاد کرده‌اید، با استفاده از گزینه v- می‌تواند همزمان با container حذف شود. توجه داشته باشید که این تنها با volumeهای بدون نام کار می‌کند. وقتی container با موفقیت حذف شد، شناسه آن نمایش داده می‌شود. توجه داشته باشید که پس از حذف، در خروجی هیچ اشاره‌ای به حذف volume نمی‌شود. بنابراین، اگر volume ارسال شده به دستور بدون نام باشد، بدون نمایش هیچ خروجی از سیستم حذف می‌شود و اگر volume دارای نام باشد، بدون نمایش هیچ خروجی در سیستم باقی می‌ماند.

حذف volume:

docker rm -v container_name

 

 

 

منبع:

digitalocean