حذف کانتینر و موارد اضافی در Docker
چگونه Imageها، کانتینرها و دیگر موارد بیاستفاده در داکر را حذف کنیم؟
داکر ابزاری است که بستهبندی اپلیکیشنها و سرویسها در کانتینر را آسان میکند. در پی این تسهیلسازی، اجرای آنها از هرجایی بهآسانی صورت میگیرد. درکنار استفاده از داکر، امکان انباشتهشدن حجم زیادی ایمیج و کانتینر و دیتای اضافی نیز وجود دارد که باعث درهمریختگی output و فضای دیسک مصرفی میشوند. بههمیندلیل، بهتر است که Imageهای بدون استفاده و کانتینرها را از داکر حذف کنید.
Docker تمام ابزارهای موردنیاز برای پاکسازی سیستم خود با استفاده از Command line را دراختیارتان قرار میدهد. در این مقاله، قصد داریم روش استفاده از این ابزارها برای حذف Image و کانتینر از داکر را به شما آموزش دهیم.
مروری بر داکر (Docker) و کانتینر (Container)
Docker پلتفرمی متنباز است که مبتنیبر سیستمعامل لینوکس راهاندازی شده و با کمک آن پکیجبندی برنامهها را میتوان بهسادگی انجام داد. نگهداری برنامهها در محیط و فضایی ایزوله بهطور مستقل، از اهداف جدید توسعه نرمافزار است. با استفاده از این تکنولوژی، فعالیت برنامهها روی یکدیگر تأثیری نخواهد گذاشت و هرکدام کاملاً مستقل از یکدیگر دستورها را اجرا میکنند.
این تکنولوژی را با استفاده از ماشین مجازی میتوانید پیادهسازی کنید. ماشین مجازی برنامههای مختلف را روی سختافزاری جدا از هم نگهداری میکند. در این شرایط، استفاده از منابع سختافزاری بهدلیل اینکه فعالیت برنامهای تأثیری بر دیگری نمیگذارد، به کمترین حالت ممکن خود میرسد. Container دقیقاً مقابل ماشین مجازی قرار دارد و به جایگزین و البته رقیبی جدی برای ماشینهای مجازی تبدیل شده است.
کانتینر محیطهای اجرایی را از یکدیگر جدا میکند و هسته سیستمعامل را بهاشتراک میگذارد. یکی از مزیتهای Container درمقایسه با ماشینهای مجازی این است که به منابع کمتری نیاز دارد و بسیار سریعتر از ماشین مجازی قابلیت اجرا پیدا میکند. کانتینر به سه بخش سازنده (Builder) و موتور (Engine) و تنظیم (Orchestration) تقسیم میشوند.
آموزش حذف Imageها، کانتینرها، volumes و شبکههای استفادهنشده از داکر
داکر کامندی واحد را برای پاککردن تمامی منابع بدون تگ، ازجمله Imageها و کانتینرها و شبکهها ارائه میکند:
برای حذف هرگونه کانتینر و ایمیجِ فاقد کاربرد، کافی است فلگِ a- را به دستور اضافه کنید:
حذف Imageهای داکر
حذف یک یا چند Image خاص
از دستور docker images بههمراه a- برای پیداکردن ID ایمیجهایی استفاده کنید که قصد دارید آنها را حذف کنید. این دستور به شما هر Image ازجمله لایههای میانی را نشان خواهد داد.
زمانی که Imageهای مدنظر برای حذفکردن را پیدا کردید، میتوانید ID یا تگ آنها را به docker rmi ارسال کنید:
لیست:
حذف:
حذف ایمیجهای اضافی (Dangling images)
Imageهای داکر از چند لایه تشکیل شدهاند. ایمیجهای بیاستفاده (Dangling images) لایههایی هستند که هیچ ارتباطی با هیچ ایمیج تگگذاریشدهای ندارند. این Imageها بیفایده و بیهدف هستند و فقط فضای دیسک را مصرف میکنند. آنها را میتوان با افزودن فلگ فیلتر f- با مقدار dangling=true به دستور docker images پیدا کرد.
نکته: اگر ایمیجی را بدون تگ بسازید، در فهرست Imageهای آویزان (Dangling images) قرار میگیرد؛ زیرا هیچ ارتباطی با ایمیج تگشده نخواهد داشت. بنابراین با ارائه یک تگ در هنگام ساخت، میتوانید از این وضعیت جلوگیری کنید. بدینمنظور بهکمک دستور docker tag یک ایمیج را برچسبگذاری کنید.
وقتی از حذفِ این Imageها مطمئن شدید، میتوانید از دستور docker image prune استفاده کنید:
لیست:
حذف:
حذف Imageها براساس Pattern
با استفاده از دستورهای ترکیبی docker images و grep، میتوانید تمام ایمیجهای مطابق با یک الگو را بیابید و آنها را با استفاده از awk حذف و IDها را به docker rmi منتقل کنید. البته قبل از هرچیزی توجه کنید که این ابزارها را داکر ارائه نمیکند و لزوماً در تمام سیستمها دردسترس نخواهند بود:
لیست:
حذف:
حذفکردن تمام Imageها
تمام Imageهای داکر در یک سیستم را میتوان با افزودن a- به دستور docker images فهرست کرد. درصورت نیاز به حذف تمامی ایمیجها، پرچم q- را اضافه کنید تا ID ایمیج را به docker rmi فرستاده شود:
لیست:
حذف:
حذف کانتینرها
حذف یک یا چند کانتینر خاص
از دستور docker ps با پرچم a- برای پیداکردن نام یا ID کانتینرهای موردنیاز برای حذف استفاده کنید:
لیست:
حذف:
حذفکردن یک کانتینر بعد از اتمام کار و خروج
درصورتیکه نمیخواهید کانتینر ایجادشده را بعد از اتمام کار نگه دارید، میتوانید docker run –rm را اجرا کنید. با این کار، بهطور خودکار هنگام خروج آن کانتینر را حذف خواهید کرد.
اجرا و حذف:
پاککردن تمام کانتینرهای خروجی
شما میتوانید کانتینرها را با استفاده از docker ps -a پیدا و براساس وضعیت، آنها را فیلتر کنید: created ،restarting ،running ،paused یا exited. بهمنظور بررسی فهرست کانتینرهای خارجشده، از پرچم f- برای فیلتر براساس وضعیت استفاده کنید. وقتی حذف آنها را تأیید کردید، از -q برای ارسال ID به دستور docker rm بهره ببرید:
لیست:
حذف:
حذف کانتینرها با بیش از یک فیلتر
فیلترهای داکر را میتوان با تکرار flag فیلتر با یک Additional value ترکیب کرد. همین امر به ایجاد فهرستی از کانتینرها منجر میشود که هریک از آنها چنین شرایطی دارند. برای مثال، اگر میخواهید تمام کانتینرهایی را حذف کنید که بهعنوان created (حالتی که هنگام اجرای کانتینر با دستور نامعتبر ایجاد میشود) یا exited علامتگذاری شدهاند، باید از دو فیلتر استفاده کنید:
لیست:
حذف:
حذف کانتینرها طبق یک Pattern
شما میتوانید تمام کانتینرهایی که با یک الگو مطابقت دارند، با استفاده از دستورهای ترکیبی docker ps و grep پیدا کنید. برای حذف فهرست مدنظر از awk و برای ارائه ID به docker rm از xargs استفاده کنید. البته توجه کنید که این ابزارها را Docker ارائه نمیکند و لزوماً در تمام سیستمها دردسترس نیستند:
لیست:
حذف:
متوقف و حذف کردن تمام کانتینرها
تمام کانتینرهای سیستم خود را میتوانید با استفاده از docker ps بررسی کنید. با افزودن پرچم a- تمام کانتینرها نمایش داده میشوند. زمانی که قصد داشتید آنها را حذف کنید، پرچم q- را میتوانید برای ارائه شناسهها (IDها) به دستورهای docker stop و docker rm اضافه کنید:
لیست:
حذف:
حذف ولومها (Volumes)
حذف یک یا چند Volumes خاص – Docker 1.9 و جدیدتر
از دستور docker volume ls بهمنظور پیداکردن نام Volumeهای مدنظر برای حذف استفاده کنید. سپس یک یا چند Volume را میتوانید با استفاده از دستور docker volume rm حذف کنید:
لیست:
حذف:
حذف یک یا چند Volum خاص در نسخههای داکر ۱.۹ و جدیدتر
ازآنجاکه هدف Volumeها مستقلبودن از کانتینرها است، با برداشتن یکی از آنها، Volume بهصورت خودکار حذف نخواهد شد. زمانی که یک ولوم وجود دارد و به هیچ کانتینری متصل نیست، به آن ولوم Dangling گفته میشود. برای تعیین مکان آنها و تأیید اینکه میخواهید آنها را حذف کنید یا خیر، میتوانید از دستور docker volume ls بههمراه یک فیلتر استفاده کنید. با این کار، نتایج را به ولومهای Dangling محدود خواهید کرد. حال تمام این فهرست را میتوانید با استفاده از دستور docker volume prune حذف کنید:
لیست:
حذف:
حذف یک کانتینر و Volume آن
اگر یک ولوم بدون نام ایجاد کردهاید، با استفاده از پرچم v- میتوانید آن را بههمراه کانتینرش حذف کنید. البته توجه کنید که این روش فقط برای ولومهای بدون نام کاربرد دارد.
هنگامی که کانتینر با موفقیت حذف شد، ID آن نمایش داده میشود. توجه کنید که هیچ اشارهای به حذف Volume نشده است. اگر ولوم بدون نام باشد، بدون هیچ دردسری حذف خواهد شد و اگر با نام باشد، در همانجا باقی خواهد ماند.
حذف:
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.