تطهير دوكر: دليل شامل مع أمثلة عملية

إذا كنت تعمل مع Docker يوميًا، فأنت تعرف مدى سرعة استهلاكه لمساحة القرص.

مع مرور الوقت، يتراكم على نظامك صور غير مستخدمة، وحاويات، وأحجام، وشبكات. هذه العناصر غالبًا ما تبقى بلا استخدام، مما يشغل مساحة تخزين قيمة وقد يمنعك من العمل على مشروعك الحالي. لحسن الحظ، يوفر Docker أوامر تنظيف مدمجة تزيل بسهولة الموارد غير الضرورية.

هذه الأوامر الخاصة بالتنظيف هي جزء من عائلة docker prune، واليوم، ستتعلم كل شيء عنها. ستصبح بسرعة الحل المفضل لديك لتحرير مساحة القرص.

لنبدأ بمراجعة سريعة قبل أن نغوص في الأمثلة العملية.  

هل أنت جديد على Docker؟ تحقق من دليلناحول تعلم Docker من الصفر للمهنيين في مجال البيانات لتكون على دراية بسرعة.  

ما هو Docker Prune؟  

يشير مصطلح “Docker Prune” عادةً إلى مجموعة من الأوامر المصممة لمساعدتك في إزالة الموارد غير المستخدمة وغير الضرورية في Docker.  

مع مرور الوقت، خاصةً إذا كنت تعمل عبر مشاريع متعددة، ستقوم بإنشاء عدد لا يحصى من الصور، وتشغيل الحاويات، وإعداد الأحجام والشبكات. كل هذه تتراكم على نظامك، مما يأخذ مساحة كبيرة من القرص. الغرض من docker prune هو تنظيف تلك الفوضى واستعادة التخزين.  

ومع ذلك، هناك المزيد حول docker prune مما يلتقي العين.

إنها ليست مجرد أمر واحد يمكنك تشغيله. حسنًا، يمكنك، ولكن في بعض الأحيان تحتاج إلى التحكم التفصيلي في ما يتم إزالته. هنا تأتي دور هذه المقالة. ستعرض لك كيفية إدارة القص الفعّال، مضمنةً تأكيد حذف العناصر التي تنوي حذفها فقط، وكيفية الممارسة في بحرية في بيئة آمنة لتجنب إزالة البيانات الهامة عن طريق الخطأ.

من المهم أيضًا أن نلاحظ أن أوامر التنقيح تقوم فقط بإزالة الموارد التي لا تُستخدم حاليًا. لن يتم حذف الصور أو الأحجام أو الشبكات المشار إليها بواسطة حاويات تعمل. وبعبارة أخرى، لن يتدخل التنقيح في الأعباء العاملة.  

في القسم التالي، سنرشدك خلال أنواع أوامر التنقيح المختلفة ونشرح كيف تندرج ضمن سير عملك.  

هل ترغب في إضافة Docker إلى سيرتك الذاتية أو ملفك الشخصي؟ ستُجهزك أفكار مشاريع Docker العشرة هذه لتكون جاهزًا للعمل.

جميع أوامر تنقيح Docker مع أمثلة عملية

يوفر Docker العديد من أوامر prune التي تسمح لك بتنظيف الموارد غير المستخدمة بشكل فردي أو دفعة واحدة. في هذا القسم، ستتعرف عليها – سواء من خلال النظرية و أمثلة عملية.  

docker system prune  

هذا هو الأمر الأكثر شمولية لاستعادة مساحة القرص. يزيل جميع الحاويات غير المستخدمة والشبكات والصور وذاكرة التخزين المؤقت للبناء في عملية واحدة.  

إذا كنت تبحث عن طريقة سريعة لتحرير مساحة على القرص بأمر واحد، فهذا هو الأمر الذي يجب استخدامه.

يمكنك تمرير الخيارات إلى أمر docker system prune:

  • -a أو --all يزيل جميع الصور غير المستخدمة بدلاً من الصور المتدلية فقط (الصور التي لا تحتوي على علامات أو لا يتم الإشارة إليها بواسطة أي حاوية).
  • --filter يسمح لك بتحديد قيم المرشح.
  • -f أو --force يتخطى مربع حوار التأكيد.
  • --volumes يقوم أيضًا بتطهير الأحجام المجهولة إلى جانب الحاويات والشبكات والصور والتخزين المؤقت للبناء.

بشكل افتراضي، docker system prune يطلب تأكيدك لأنه عملية قد تكون مدمرة:

الصورة 1 – نافذة تأكيد تطهير نظام Docker

لتجاوز النافذة وإزالة جميع الصور والحاويات والشبكات والأحجام غير المستخدمة بأمر واحد، قم بتشغيل:

docker system prune -a -f --volumes

الصورة 2 – احذف كل شيء بأمر واحد فقط من نظام دوكر

لكن ماذا لو كنت بحاجة لمزيد من التحكم الدقيق؟ دعنا نغطي ذلك فيما يلي.

docker container prune

ببساطة، يقوم هذا الأمر بإزالة جميع الحاويات المتوقفة.

تظل الحاويات المتوقفة على نظامك حتى يتم إزالتها يدويًا. يمكن أن تأخذ مساحة على القرص وقد يكون من الصعب اكتشافها ما لم تستخدم أداة مثل لوحة معلومات دوكر.

مثل docker system prune، فإن هذا الأمر يدعم خيارات:

  • --filter يتيح لك تحديد أزواج المفتاح-القيمة للتحكم في الحاويات التي يتم إزالتها.
  • -f أو --force يتجاوز مطالبة التأكيد.

إليك قائمة بالحاويات التي لا تعمل:

الصورة 3 – قائمة الحاويات التي لا تعمل

لإزالة code-server (وأي حاوية أخرى متوقفة), قم بتشغيل:

docker container prune -f

لن يطلب منك تأكيدًا، وفي غضون ثوانٍ، سترى إخراجًا مثل هذا:

الصورة 4 – رسالة إخراج تنظيف الحاوية

وبهذه البساطة، لم تعد هناك مزيد من الحاويات المتوقفة:

الصورة 5 – قائمة بحاويات غير القيد (2)

الآن، دعنا نهتم بالصور غير المستخدمة.

تنظيف صور التطبيقات

شبيهة بالأمر السابق، يزيل تنظيف صور التطبيقات الصور غير المستخدمة.

بشكل افتراضي، يزيل فقط الصور المتدلية— الصور التي ليس لها علامات وليست مرتبطة بحاوية. يمكنك استخدام علم اختياري لإزالة جميع الصور غير المستخدمة، وليس فقط تلك المتدلية.

إليك قائمة بالخيارات المتاحة

  • -a أو --all يزيل جميع الصور غير المستخدمة بدلاً من تلك المتدلية فقط.
  • --filter يتيح لك تحديد أزواج المفتاح-القيمة للتحكم في الصور التي سيتم إزالتها.
  • -f أو --force يتجاوز مطالبة التأكيد.

الآن، دعنا نرى ذلك في العمل!

إليك قائمة بالصور الموجودة حاليًا على النظام:

الصورة 6 – قائمة صور Docker

لإزالة جميعها بأمر واحد، قم بتشغيل:

docker image prune -a -f

سوف ترى إخراجًا مثل هذا في الطرفية:

الصورة 7 – رسالة إخراج تقليم الصورة

بعد ذلك، لا تبقى صور في Docker Desktop:

الصورة 8 – قائمة الصور Docker (2)

الآن، دعنا نتعامل مع الأحجام غير المستخدمة.

docker volume prune

كما يوحي الاسم، يقوم أمر docker volume prune بإزالة جميع الأحجام المحلية غير المستخدمة. بمعنى آخر، يقوم بحذف الأحجام التي لا يتم الإشارة إليها بواسطة أي حاوية.

بشكل افتراضي، تقوم الأمر بإزالة الحجوم المجهولة فقط – الحجوم البلا اسم التي تم إنشاؤها بواسطة دوكر عند بدء تشغيل الحاوية. لإزالة الحجوم ذات الأسماء الصريحة، يجب عليك تمرير خيار إضافي.

هذه هي الخيارات المتاحة لديك:

  • -a أو --all يزيل جميع الحجوم غير المستخدمة بدلاً من الحجوم المجهولة فقط.
  • --filter يتيح لك تحديد أزواج مفاتيح القيمة للتحكم في الحجوم التي سيتم إزالتها.
  • -f أو --force يتخطى رسالة التأكيد.

في نظامنا، لدينا حجوم أنشأها مستخدم واحد من ملف docker-compose.yml:

الصورة 9 – قائمة أحجام Docker

الأمر التالي يزيل جميع الأحجام المحلية:

docker volume prune -a -f

بعد تشغيله، سترى مخرجات مشابهة لذلك:

الصورة 10 – رسالة إخراج تقليم الحجم

الآن، لا توجد أحجام متبقية:

الصورة 11 – قائمة أحجام Docker (2)

أخيرًا، دعنا نلقي نظرة على كيفية حذف الشبكات غير المستخدمة.

docker network prune

عندما تتواصل حاويات Docker مع بعضها، فإنها غالبًا ما تستخدم شبكات معرفة من قبل المستخدم. ومع ذلك، تبقى شبكاتهم عادة على نظامك بمجرد إزالة تلك الحاويات.

أمر docker network prune يزيل الشبكات التي لم تعد مستخدمة من قبل أي حاوية.

مثل أوامر تقليم الأشجار الأخرى، تتضمن خيارات قليلة:

  • --filter يتيح لك تحديد أزواج المفاتيح والقيم للتحكم في الشبكات التي سيتم إزالتها.
  • -f أو --force يتجاوز مربع الحوار للتأكيد.

على عكس الصور أو الحاويات أو الأحجام، لا يمكنك تفقد الشبكات بصريًا من خلال سطح المكتب Docker، لذا ستحتاج إلى العمل من سطر الأوامر. فيما يلي قائمة بالشبكات المتاحة:

الصورة 12 – قائمة شبكات Docker

لإزالة جميع الشبكات التي ليست مرتبطة بتثبيت Docker الافتراضي، قم بتشغيل:

docker network prune -a -f

بعد تنفيذ الأمر، سترى إخراجًا مثل هذا:

الصورة 13 – رسالة إخراج تنظيف الشبكة

أي شبكات مرتبطة بحاويات كانت تعمل سابقًا قد اختفت الآن:

الصورة 14 – قائمة شبكات Docker

ومع ذلك، لاحظ أن الشبكات الثلاث المتبقية ضرورية لعمل Docker بشكل صحيح ولا يمكن إزالتها.

وهذا هو كل شيء بالنسبة للاستخدام الأساسي لأوامر docker prune! في الخطوة التالية، سنغطي مواضيع متقدمة مثل استخدام هذه الأوامر بأمان وأفضل الممارسات للبيئات الإنتاجية والحساسة.

استخدام أوامر Docker Prune بأمان

تساعد أوامر docker prune في استعادة مساحة القرص بسرعة، ولكن يجب استخدامها بحذر، خاصة في البيئات الإنتاجية.  

حذف الحاويات أو الصور أو الأحجام المهمة عن طريق الخطأ يمكن أن يؤدي إلى فقدان البيانات وتعطيل سير العمل الحيوي. لتجنب ذلك، من الأفضل فهم ما سيتم إزالته قبل تنفيذ أي أمر للتنظيف.

تشرح هذه القسم الاحتياطات الرئيسية التي يجب اتخاذها عند تشغيل docker prune بأمان.

فهم ما سيتم إزالته

تم تصميم أوامر prune لإزالة الموارد فقط التي لا تُستخدم حاليًا.

على سبيل المثال، يقوم أمر docker image prune بحذف الصور العالقة فقط، ويقوم أمر docker volume prune بإزالة الأساسيات غير المرتبطة بأي حاويات. ومع ذلك، إذا تمت إضافة خيارات مثل -a -f، سيتم حذف كل الصور أو الأساسيات دون الطلب على تأكيد. 

بالإضافة إلى ذلك، في البيئات المعقدة، قد يكون من السهل تجاهل التبعيات، لذا من الجيد دائمًا التحقق مرتين قبل التنظيف. 

قبل تشغيل أي أمر prune، يجب عليكفحص نظامك لمعرفة الموارد التي تستخدم حاليًا. هناك عدة طرق لفعل ذلك، وسناستكشف الأكثر شيوعًا في هذا القسم.  

استخدم هذا الأمر لـعرض جميع الحاويات، بما في ذلك تلك التي توقفت:  

docker ps -a

يجب أن ترى نتيجة مماثلة لهذه:

الصورة 15 – قائمة جميع حاويات Docker

بالمثل، استخدم هذا الأمر لقائمة جميع الصور، بما في ذلك تلك غير المستخدمة:  

docker images

سيكون الإخراج منظمًا بنفس الطريقة كما في الأعلى:  

الصورة 16 – قائمة جميع صور Docker

للتحقق من حجوم، قم بتشغيل هذا الأمر لـعرض جميع الحجوم:  

docker volume ls

الصورة 17 – قائمة جميع حجوم Docker

قم بمراجعة هذه النتائج بعناية لضمان عدم حذف الموارد الحرجة عن طريق الخطأ.  

تشغيل جاف للسلامة  

للأسف، لا يزال Docker لا يحتوي على خيار مدمج للتشغيل الجاف لأوامر التجزئة، على الرغم من أنه تم طلبه منذ سنوات.

بسبب ذلك، يجب عليك تفحص الموارد يدويًا باستخدام الأوامر المدرجة في القسم السابق قبل تشغيل أمر التنقيح. 

إذا كنت تعمل في بيئة حساسة حيث تعد استمرارية البيانات أمرًا حيويًا، يجب عليك دائمًا إنشاء نسخة احتياطية قبل تشغيل أوامر التنقيح التي تؤثر على الأحجام. 

بالطبع، هذه تدابير احترازية فقط، ولكن نأمل أن نرى خيار التشغيل التجريبي يُنفذ قريبًا.

أفضل الممارسات لأداة Docker Prune

للحفاظ على بيئة Docker خالية من الفوضى غير الضرورية، من المهم تشغيل أوامر prune بانتظام—ربما حتى أتمتتها.  

توجهك هذه القسم عبر أفضل الممارسات لتشغيل أوامر docker prune في بيئات الإنتاج.  

استخدم docker prune بانتظام  

مع مرور الوقت، يقوم Docker بتجميع الصور غير المستخدمة، والحاويات المتوقفة، والأحجام غير الضرورية—جميعها تستهلك مساحة كبيرة على القرص.  

تشغيل أوامر التقليم بانتظام يحافظ على بيئتك نظيفة ويمنع الاستخدام الزائد للقرص. يجب عليك تضمينها كجزء من جدول الصيانة الخاص بكجدولة الصيانة.  

كل بضعة أسابيع هي نقطة بداية جيدة، ولكن إذا كانت إعداداتك تتضمن إنشاء وإزالة متكررين للحاويات، فكر في جدول أكثر تكرارًا.  

كن حذرًا في الإنتاج  

أي عمل في بيئة الإنتاج يتطلب حذرًا إضافيًا، وعملية تقليم Docker ليست استثناء.  

لحظة من عدم الانتباه يمكن أن تؤدي إلى توقف النظام أو فقدان البيانات، ولا تريد أن تكون مسؤولاً عن ذلك. قبل تشغيل أوامر docker prune في بيئة الإنتاج، تحقق دائماً من موارد النظام باستخدام docker ps -a، docker images، وdocker volume ls، كما هو موضح في القسم السابق.  

بالإضافة إلى ذلك، من الجيد استخدام أوامر التقليم المحددة بدلاً من docker system prune الشاملة، حيث قد يكون من الأسهل التعافي من الحذف غير المقصود.  

أتمتة تقليم الدوكر  

ممارسة جيدة أخرى هي تبسيط جهود التنظيف من خلال أتمتة أوامر docker prune باستخدام المهام المجدولة.  

على نظام Linux ، يمكنك إعداد وظيفة cron لتشغيل الأوامر بانتظام ، بينما يمكنك في نظام Windows استخدام جدول المهام لأتمتة مماثلة. يساعد ذلك في الحفاظ على نظام مرتب دون الحاجة لتدخل يدوي. ومع ذلك ، في بيئة الإنتاج ، تأكد من أن التنظيف التلقائي لا يتداخل مع الأعباء العملية الحرجة.  

على سبيل المثال ، تقوم هذه الوظيفة cron على نظام Linux بتشغيل أمر تنظيف شامل كل يوم أحد في منتصف الليل:

0 0 * * 0 docker system prune -a -f

حل مشكلات تنظيف Docker

أوامر docker prune هي الحل الأمثل لاسترداد مساحة القرص، ولكن قد لا تكون كافية دائمًا لضمان توفر مساحة كافية لاستحضار صور جديدة أو تشغيل حاويات جديدة.

بالإضافة إلى ذلك، قد تقوم بإزالة موارد مهمة عن طريق الخطأ، لذلك من الأهمية بمكان مناقشة استراتيجيات الاسترجاع.

سيتم تغطية كلتا هاتين الموضوعتين في هذا القسم.

مواجهة مشاكل مساحة القرص

قد تكون صور Docker كبيرة – لدينا مؤخرًا صورة بحجم أكثر من 13 جيجابايت – ونحن متأكدون بأن هناك صور أكبر حجمًا هناك. لذا، حتى بعد تشغيل docker prune، قد تجد أن نظامك لا يزال يعاني من نقص في مساحة القرص.

لرؤية بالضبط مقدار المساحة المستخدمة من الصور والحاويات والحجوم، نفذ هذا الأمر:

docker system df

الصورة 18 – المساحة المستخدمة من قبل Docker

عند استعادة مساحة القرص باستخدام docker prune، أضف علامة -a لإزالة جميع الصور أو الحجوم أو الحاويات – ليس فقط تلك المعلقة أو المجهولة. بالطبع، يجب أن تضع في اعتبارك العواقب المحتملة لهذا النهج.

إذا استمرت مشكلة مساحة القرص، فخيارك الوحيد هو زيادة المساحة المتاحة على القرص.

استعادة الملفات بعد الحذف العرضي

الاستعادة أسهل قولًا مما هي عليه في الواقع، ولذلك نوصي بفهم ما سيتم حذفه بواسطة القص قبل تشغيل الأمر الفعلي.

ومع ذلك، إذا وجدت نفسك في وضعية حذف عرضي لحاويات أو صور أو أحجام مهمة، ابدأ بفحص السجلات لتحديد ما تم حذفه.

على نظام macOS ، يمكن القيام بذلك عن طريق تشغيل الأمرين التاليين (خيارات لنظام التشغيل Windows و Linux):

pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")' /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred" /usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt

تشغيل هذه الأوامر سيقوم بحفظ آخر 30 دقيقة من سجلات Docker ذات الصلة في /tmp/logs.txt. يجب عليك فحص هذه السجلات لتحديد الحاويات أو الصور التي تم حذفها.

بالنسبة لـالصور المحذوفة، يمكنك بشكل محتمل سحبها مرة أخرى من مستودع مثل Docker Hub. يجب أن يقوم الأمر مثل هذا بالعمل:

docker pull <image_name>

وبالنسبة لـحاويات تم حذفها، يمكنك دائمًا إعادة إنشائها إذا كانت مستندة على صور دائمة:

docker run --name <container_name> <image_name>

بدلاً من ذلك، يمكنك استعادتها من النسخ الاحتياطية إذا كانت متاحة، والتي يمكن استخدامها لاستعادة بيانات الحجم والحاوية. في المستقبل، انظر إلى استخدام أدوات لالتقاط لقطات الحجم لمنع فقدان البيانات.

ومع ذلك، فإن أفضل استراتيجية هي فحص الموارد التي سيتم حذفها قبل تنفيذ أمر التنظيف، والمضي قدماً فقط إذا كنت متأكداً تماماً من أنها لن تؤثر على سير العمل الخاص بك.

تلخيص أمر تنظيف Docker

للاستنتاج، فإن عائلة أوامر docker prune هي وسيلة قوية لاستعادة مساحة القرص، ولكنها تأتي مع خطر حذف الموارد التي تحتاجها عن غير قصد، مما يؤدي إلى فقدان البيانات. يكون هذا الخطر أكبر عند استخدام العلامات الاختيارية -a -f، التي ستقوم بإزالة كل شيء بشكل قسري.

ومع ذلك، يبقى التنظيف وسيلة مفضلة للحفاظ على نظامك نظيفاً ومنظماً.

يجب أن تكون حذرًا، خاصة في بيئات الإنتاج. استخدم أوامر مثل docker ps -a، docker images، وdocker volume ls قبل التنظيف لعرض جميع الحاويات والصور والأحجام. قم بتشغيل أمر التنظيف فقط بعد أن تكون متأكدًا أنك موافق على حذف الموارد المدرجة (على افتراض أنها لا تستخدم من قبل حاوية قيد التشغيل).  

إذا كنت ترغب في معرفة المزيد عن Docker، وحاويات التطبيقات، وتنظيم الحاويات، تحقق من هذه الدورات على DataCamp:

Source:
https://www.datacamp.com/tutorial/docker-prune