چگونه Imageها، کانتینرها و دیگر موارد بیاستفاده در داکر را حذف کنیم؟
در این مقاله میخوانید
داکر ابزاری است که بستهبندی اپلیکیشنها و سرویسها در کانتینر را آسان میکند. در پی این تسهیلسازی، اجرای آنها از هرجایی بهآسانی صورت میگیرد. درکنار استفاده از داکر، امکان انباشتهشدن حجم زیادی ایمیج و کانتینر و دیتای اضافی نیز وجود دارد که باعث درهمریختگی output و فضای دیسک مصرفی میشوند. بههمیندلیل، بهتر است که Imageهای بدون استفاده و کانتینرها را از داکر حذف کنید.
Docker تمام ابزارهای موردنیاز برای پاکسازی سیستم خود با استفاده از Command line را دراختیارتان قرار میدهد. در این مقاله، قصد داریم روش استفاده از این ابزارها برای حذف Image و کانتینر از داکر را به شما آموزش دهیم.
خرید سرویس لینوکسی با قابلیت نصب داکر از پارس پک
توانید از این مقاله برای مدیریت سرورهای لینوکس خود استفاده کنید و اگر قصد خرید هر یک از سرویسهای لینوکسی پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینکهای زیر مراجعه کنید.
نکتهای برای استفاده از این راهنما
قبل از هرچیزی، بهتر است این نکته را بگوییم که دستورِ substitution syntax و (command $ (command بهعنوان دستوری متداول در شلهای محبوبی مانند bash و zsh و Windows پاورشل موجود است.
مروری بر داکر (Docker) و کانتینر (Container)
Docker پلتفرمی متنباز است که مبتنیبر سیستمعامل لینوکس راهاندازی شده و با کمک آن پکیجبندی برنامهها را میتوان بهسادگی انجام داد. نگهداری برنامهها در محیط و فضایی ایزوله بهطور مستقل، از اهداف جدید توسعه نرمافزار است. با استفاده از این تکنولوژی، فعالیت برنامهها روی یکدیگر تأثیری نخواهد گذاشت و هرکدام کاملاً مستقل از یکدیگر دستورها را اجرا میکنند.
این تکنولوژی را با استفاده از ماشین مجازی میتوانید پیادهسازی کنید. ماشین مجازی برنامههای مختلف را روی سختافزاری جدا از هم نگهداری میکند. در این شرایط، استفاده از منابع سختافزاری بهدلیل اینکه فعالیت برنامهای تأثیری بر دیگری نمیگذارد، به کمترین حالت ممکن خود میرسد. Container دقیقاً مقابل ماشین مجازی قرار دارد و به جایگزین و البته رقیبی جدی برای ماشینهای مجازی تبدیل شده است.
کانتینر محیطهای اجرایی را از یکدیگر جدا میکند و هسته سیستمعامل را بهاشتراک میگذارد. یکی از مزیتهای Container درمقایسه با ماشینهای مجازی این است که به منابع کمتری نیاز دارد و بسیار سریعتر از ماشین مجازی قابلیت اجرا پیدا میکند. کانتینر به سه بخش سازنده (Builder) و موتور (Engine) و تنظیم (Orchestration) تقسیم میشوند.
آموزش حذف Imageها، کانتینرها، volumes و شبکههای استفادهنشده از داکر
داکر کامندی واحد را برای پاککردن تمامی منابع بدون تگ، ازجمله Imageها و کانتینرها و شبکهها ارائه میکند:
$ docker system prune
برای حذف هرگونه کانتینر و ایمیجِ فاقد کاربرد، کافی است فلگِ a- را به دستور اضافه کنید:
$ docker system prune -a
حذف Imageهای داکر
حذف یک یا چند Image خاص
از دستور docker images بههمراه a- برای پیداکردن ID ایمیجهایی استفاده کنید که قصد دارید آنها را حذف کنید. این دستور به شما هر Image ازجمله لایههای میانی را نشان خواهد داد.
زمانی که Imageهای مدنظر برای حذفکردن را پیدا کردید، میتوانید ID یا تگ آنها را به docker rmi ارسال کنید:
لیست:
$ docker images -a
حذف:
$ docker rmi Image Image
حذف ایمیجهای اضافی (Dangling images)
Imageهای داکر از چند لایه تشکیل شدهاند. ایمیجهای بیاستفاده (Dangling images) لایههایی هستند که هیچ ارتباطی با هیچ ایمیج تگگذاریشدهای ندارند. این Imageها بیفایده و بیهدف هستند و فقط فضای دیسک را مصرف میکنند. آنها را میتوان با افزودن فلگ فیلتر f- با مقدار dangling=true به دستور docker images پیدا کرد.
نکته: اگر ایمیجی را بدون تگ بسازید، در فهرست Imageهای آویزان (Dangling images) قرار میگیرد؛ زیرا هیچ ارتباطی با ایمیج تگشده نخواهد داشت. بنابراین با ارائه یک تگ در هنگام ساخت، میتوانید از این وضعیت جلوگیری کنید. بدینمنظور بهکمک دستور docker tag یک ایمیج را برچسبگذاری کنید.
وقتی از حذفِ این Imageها مطمئن شدید، میتوانید از دستور docker image prune استفاده کنید:
لیست:
$ docker images -f dangling=true
حذف:
$ docker image prune
حذف Imageها براساس Pattern
با استفاده از دستورهای ترکیبی docker images و grep، میتوانید تمام ایمیجهای مطابق با یک الگو را بیابید و آنها را با استفاده از awk حذف و IDها را به docker rmi منتقل کنید. البته قبل از هرچیزی توجه کنید که این ابزارها را داکر ارائه نمیکند و لزوماً در تمام سیستمها دردسترس نخواهند بود:
لیست:
$ docker images -a | grep "pattern"
حذف:
$ docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
حذفکردن تمام Imageها
تمام Imageهای داکر در یک سیستم را میتوان با افزودن a- به دستور docker images فهرست کرد. درصورت نیاز به حذف تمامی ایمیجها، پرچم q- را اضافه کنید تا ID ایمیج را به docker rmi فرستاده شود:
لیست:
$ docker images -a
حذف:
$ docker rmi $(docker images -a -q)
حذف کانتینرها
حذف یک یا چند کانتینر خاص
از دستور docker ps با پرچم a- برای پیداکردن نام یا ID کانتینرهای موردنیاز برای حذف استفاده کنید:
لیست:
$ docker ps -a
حذف:
$ docker rm ID_or_Name ID_or_Name
حذفکردن یک کانتینر بعد از اتمام کار و خروج
درصورتیکه نمیخواهید کانتینر ایجادشده را بعد از اتمام کار نگه دارید، میتوانید docker run –rm را اجرا کنید. با این کار، بهطور خودکار هنگام خروج آن کانتینر را حذف خواهید کرد.
اجرا و حذف:
$ docker run --rm image_name
پاککردن تمام کانتینرهای خروجی
شما میتوانید کانتینرها را با استفاده از docker ps -a پیدا و براساس وضعیت، آنها را فیلتر کنید: created ،restarting ،running ،paused یا exited. بهمنظور بررسی فهرست کانتینرهای خارجشده، از پرچم f- برای فیلتر براساس وضعیت استفاده کنید. وقتی حذف آنها را تأیید کردید، از -q برای ارسال ID به دستور docker rm بهره ببرید:
لیست:
$ docker ps -a -f status=exited
حذف:
$ docker rm $(docker ps -a -f status=exited -q)
حذف کانتینرها با بیش از یک فیلتر
فیلترهای داکر را میتوان با تکرار flag فیلتر با یک Additional value ترکیب کرد. همین امر به ایجاد فهرستی از کانتینرها منجر میشود که هریک از آنها چنین شرایطی دارند. برای مثال، اگر میخواهید تمام کانتینرهایی را حذف کنید که بهعنوان created (حالتی که هنگام اجرای کانتینر با دستور نامعتبر ایجاد میشود) یا exited علامتگذاری شدهاند، باید از دو فیلتر استفاده کنید:
لیست:
$ docker ps -a -f status=exited -f status=created
حذف:
$ docker rm $(docker ps -a -f status=exited -f status=created -q)
حذف کانتینرها طبق یک Pattern
شما میتوانید تمام کانتینرهایی که با یک الگو مطابقت دارند، با استفاده از دستورهای ترکیبی docker ps و grep پیدا کنید. برای حذف فهرست مدنظر از awk و برای ارائه ID به docker rm از xargs استفاده کنید. البته توجه کنید که این ابزارها را Docker ارائه نمیکند و لزوماً در تمام سیستمها دردسترس نیستند:
لیست:
$ docker ps -a | grep "pattern”
حذف:
$ docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
متوقف و حذف کردن تمام کانتینرها
تمام کانتینرهای سیستم خود را میتوانید با استفاده از docker ps بررسی کنید. با افزودن پرچم a- تمام کانتینرها نمایش داده میشوند. زمانی که قصد داشتید آنها را حذف کنید، پرچم q- را میتوانید برای ارائه شناسهها (IDها) به دستورهای docker stop و docker rm اضافه کنید:
لیست:
$ docker ps -a
حذف:
$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)
حذف ولومها (Volumes)
حذف یک یا چند Volumes خاص – Docker 1.9 و جدیدتر
از دستور docker volume ls بهمنظور پیداکردن نام Volumeهای مدنظر برای حذف استفاده کنید. سپس یک یا چند Volume را میتوانید با استفاده از دستور docker volume rm حذف کنید:
لیست:
$ docker volume ls
حذف:
$ docker volume rm volume_name volume_nam
حذف یک یا چند Volum خاص در نسخههای داکر ۱.۹ و جدیدتر
ازآنجاکه هدف Volumeها مستقلبودن از کانتینرها است، با برداشتن یکی از آنها، Volume بهصورت خودکار حذف نخواهد شد. زمانی که یک ولوم وجود دارد و به هیچ کانتینری متصل نیست، به آن ولوم Dangling گفته میشود. برای تعیین مکان آنها و تأیید اینکه میخواهید آنها را حذف کنید یا خیر، میتوانید از دستور docker volume ls بههمراه یک فیلتر استفاده کنید. با این کار، نتایج را به ولومهای Dangling محدود خواهید کرد. حال تمام این فهرست را میتوانید با استفاده از دستور docker volume prune حذف کنید:
لیست:
$ docker volume ls -f dangling=true
حذف:
$ docker volume prune
حذف یک کانتینر و Volume آن
اگر یک ولوم بدون نام ایجاد کردهاید، با استفاده از پرچم v- میتوانید آن را بههمراه کانتینرش حذف کنید. البته توجه کنید که این روش فقط برای ولومهای بدون نام کاربرد دارد.
هنگامی که کانتینر با موفقیت حذف شد، ID آن نمایش داده میشود. توجه کنید که هیچ اشارهای به حذف Volume نشده است. اگر ولوم بدون نام باشد، بدون هیچ دردسری حذف خواهد شد و اگر با نام باشد، در همانجا باقی خواهد ماند.
حذف:
$ docker rm -v container_name
کلام آخر
آموزش راههای رایج برای حذف Imageها و کانتینرها و ولومهای داکر را در این مقاله آموزش لینوکس از سری مقالات آموزش سیستم عامل وبلاگ پارسپک به شما معرفی کردیم. دستورهای بسیار و flagهای دیگری هم وجود دارند که میتوانید از آنها استفاده کنید. بهمنظور استفاده بهتر از فضای دیسک، پیشنهاد میکنیم که Imageها و کانتینرها و ولومهای بدون استفاده و Dangling را از داکر حذف کنید.
سؤالات متداول
1. داکر چیست؟
Docker پلتفرمی متنباز است که مبتنیبر سیستمعامل لینوکس راهاندازی شده و با آن میتوان پکیجبندی اپلیکیشنها را بهسادگی انجام داد.
2. آیا حذف Imageها و ولومها و کانتینرهای داکر سخت است؟
خیر، شما با استفاده از کدهایی که در این مطلب گفتیم، Imageها و ولومها و کانتینرهای بدون استفاده و Dangling را میتوانید حذف کنید.
4. کدام Imageها و کانتینر و ولومهای داکر را باید حذف کنیم؟
بهطورکلی، بهمنظور استفاده بهتر از فضای دیسک، Imageها و ولوم و کانتینرهای بدون استفاده داکر باید حذف شوند.
5. چرا Imageها و کانتینر و ولومهای داکر را باید حذف کنیم؟
بهمنظور جلوگیری از مصرف بیشازحد دیسک، باید Imageها و کانتینر و ولومهای داکر را حذف کنید.