منظف سجل Docker البسيط المكتوب في Python والذي يستخدم سجل Docker HTTP API V2.
منظف Docker Registry هو تطبيق سطر أوامر مصمم لتنظيف صور Docker القديمة تلقائيًا من سجل Docker. يوفر طريقة مرنة وقابلة للتكوين لتحديد وظائف التنظيف بناءً على معايير مختلفة.
يمكن تثبيت نظافة تسجيل Docker وتشغيله باستخدام Python 3.11 أو أعلى. اتبع الخطوات أدناه لتثبيت وتشغيل التطبيق:
استنساخ المستودع أو قم بتنزيل رمز المصدر من مستودع GitHub.
قم بتثبيت التبعيات المطلوبة عن طريق تشغيل الأمر التالي أو ببساطة استخدم أداة Pipenv :
pip install -r requirements.txt
جميع التبعيات بما في ذلك ديف
pip install -r requirements.all.txt
يتطلب نظافة سجل Docker 3 ملفات تكوين: config/config.yaml ، config/jobs.yaml و config/manual.yaml .
يمكن العثور على أمثلة في المستودع
exmaple:
# Your docker registry url.
registry_url : https://your.registry.com/
# Environment variables works only for username, password and proxy
# Format: <field>: "__ENV: <YOUR_ENV_NAME>"
# or you can use strings
# username: your_username
username : " __ENV: ENV_VAR_NAME "
password : " __ENV: ENV_VAR_NAME2 "
# Optional; Format: <scheme>://[username:password@]<address>[:port]
proxy : " __ENV: PROXY "
# Optional, default 20, max 120, min 1
timeout : 20
# Optional; default 20
max_concurrent_requests : 20registry_url : عنوان URL لسجل Docker ليتم تنظيفه.username : اسم المستخدم المستخدم للمصادقة مع سجل Docker.password : كلمة المرور المستخدمة للمصادقة مع سجل Docker.max_concurrent_requests : الحد الأقصى لعدد الطلبات المتزامنة التي يمكن أن يقدمها التطبيق إلى السجل. القيمة الافتراضية: 20.proxy : عنوان URL لخادم الوكيل ليتم استخدامه لتقديم طلبات إلى السجل. إذا لم يكن الحاجة ، اترك فارغًا أو حذفًا.timeout : مهلة لكل طلب HTTP في ثوان. القيمة الافتراضية: 20.username registry proxy باستخدام متغيرات البيئة ، كما هو موضح في المثال قائمة وظائف التنظيف المحددة في jobs.yaml . يتم تعريف كل وظيفة بواسطة المعلمات التالية:
- name : clean-dev-tags
# Optional
description : Clean dev tags every 24 hours
# List of repositories to clean
# You can use regular expression to match multiple repositories
# Format: r/regexp/
repositories :
- r/^base-w+$/
- scheduler-dev
- admin-panel-dev
# Pythonic regular expressions to match the tag name
# Be careful using this. Check your regexp at https://regex101.com/
tag_regexps :
- v5.d+.d+-dev$
- develop-[dw]+$
# Do not delete the last n tags, even
# if they are older than the specified number of days
save_last : 5
# Perform checks and do cleanup every x hours
clean_every_n_hours : 24
# Delete tags if their creation date is older than y days
older_than_days : 5name : اسم الوظيفة.description : وصف اختياري للوظيفة.repositories : مجموعة سلسلة من الاسم المستودع regexps وأسماء لتنظيف الصور من.tag_regexps : صفيف سلسلة من التعبيرات العادية لمطابقة العلامات في المستودعات. فقط العلامات التي تطابق أنماط regex سيتم النظر فيها للتنظيف. كن حذرًا عند استخدام هذا الخيار. تحقق من regexp على https://regex101.com/save_last : عدد العلامات الأخيرة التي سيتم حفظها (مستبعدة من التنظيف) في كل مستودع.clean_every_n_hours : الفاصل الزمني في ساعات بين التنظيف المتتالي يعمل لهذه المهمة.older_than_days : العمر في الأيام التي يتم بعدها النظر في العلامات للتنظيف. يتم تجميع العلامات عن طريق التعبيرات العادية ، مع كل تعبير منتظم يمثل مجموعة مختلفة. إذا كنت بحاجة إلى حفظ آخر 5 علامات لكل من release-xx-dev و release-xx بشكل مستقل ، ولكن يمكن أن يتطابق تعبيرك المعتاد إلى كلا النوعين من العلامات ، فسوف ينتهي بك الأمر بمجموعة مختلطة تحتوي على 5 علامات release-xx-dev و release-xx . لمنع هذا الموقف ، تحتاج إلى إضافة تعبيرين منتظمتين مختلفتين لمطابقة release-xx و release-xx-dev بشكل مستقل.
الاختلافات من jobs.yaml :
--jobs ، والذي يتيح لك تحديد الوظائف المعلنة في manual.yaml .استخدم الأمر التالي لتشغيل منظف سجل Docker:
python main.py [OPTIONS]
$ python -h
usage: main.py [-h] [--debug] [--watch] [--jobs JOBS [JOBS ...]] [--http-logs]
Automatic cleaner of old docker images
options:
-h, --help show this help message and exit
--debug The application will generate logs without actually deleting the images
--watch Endless operation of the application for auto cleanup. Will be used 'config.yaml'
--jobs JOBS [JOBS ...]
List of jobs in `manual.yaml` to run. Example: --jobs clean-dev-tags clean-prod-older-15
--http-logs Enable http logs for every request
يقبل منظف سجل Docker الخيارات التالية:
--debug : إذا تم توفيره ، فسيقوم التطبيق بإنشاء سجلات دون حذف الصور فعليًا. استخدم هذا الخيار إذا كنت بحاجة إلى التحقق من الصور التي سيحذفها التطبيق--watch : إذا تم توفيره ، فسيتم تشغيل التطبيق في حلقة لا نهاية لها ، وتنفيذ وظائف التنظيف بشكل دوري بناءً على التكوين في config.yaml .--jobs : قائمة بأسماء الوظائف المحددة في Manual.yaml التي تريد تشغيلها. على سبيل المثال: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : إذا تم توفيرها ، سيتم تمكين سجلات HTTP لكل طلب يقدمه التطبيق. إذا كنت تستخدم التطبيق مع خيار --debug وتحتاج إلى تشغيل عملية التنظيف على الفور ، فقد تحتاج إلى تنظيف ملف latest_cleanup.json ملف _Cleanup.json أو حذف قسم معين يحتوي على نتيجة الوظيفة التي تهتم بها. إن أداء هذه الخطوة سيسمح لك بالتشغيل على الفور التنظيف التالي ، دون الحاجة إلى انتظار دورة التنظيف التلقائية التالية.
بعد تشغيل التطبيق في وضع --debug ، يجب إيقاف التطبيق باستخدام Ctrl + C ثم إعادة تشغيله بدون خيار --debug لاستئناف عملية التنظيف العادية.
logs/cleaner.logcache/history.logcache/latest_cleanup.json يحتوي هذا المستودع على اثنين من dockerfiles الموجودان في دليل الجذر: Dockerfile استنادًا إلى Alpine Linux و Dockerfile.bullseye على أساس Debian 11.
تم تصميم كل من حاويات Docker لتشغيل نفس الأمر: python3 main.py --watch --http-logs ، والتي تبدأ عملية التنظيف في حلقة لا حصر لها. بمجرد البدء ، ستستمر الحاوية في العمل إلى أجل غير مسمى دون أي تدخل آخر. يضمن هذا الإعداد عملية تنظيف سلسة ومستمرة لصور Docker.
جبال الألب:
docker build -t cleaner:alpine .
ديبيان:
docker build -t cleaner:debian -f Dockerfile.bullseye .
لتشغيل منظف سجل Docker ، ستحتاج إلى توفير متغيرات البيئة اللازمة للمصادقة ، وإذا لزم الأمر ، قم بتركيب ملفات التكوين الجديدة داخل الحاوية:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
قف:
docker container stop <container_name> -s KILL