簡單的Docker註冊表清潔器用Python編寫的使用Docker註冊表HTTP API V2。
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 :要清潔的Docker註冊表的URL。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 :正則表達式的字符串數組匹配存儲庫中的標籤。只有與這些正則表達式匹配的標籤要進行清理。使用此選項時要小心。在https://regex101.com/上查看您的績效save_last :每個存儲庫中要保存的最後一個標籤的數量(排除在清理中)。clean_every_n_hours :連續清理之間的小時間隔用於此作業。older_than_days :將考慮將標籤考慮清理的日子的年齡。 標籤通過正則表達式進行分組,每個正則表達式代表不同的組。如果您需要獨立保存release-xx-dev和release-xx的最後5個標籤,但是您的正則表達式可以匹配兩種類型的標籤,則最終將獲得一個混合陣列,其中包含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 :您要運行的手冊中定義的作業名稱列表。例如: --jobs clean-dev-tags clean-prod-older-15 。--http-logs :如果提供,將為應用程序提出的每個請求啟用HTTP日誌。如果您一直在使用--debug選項使用該應用程序,並且需要立即觸發清理過程,則可能需要清理latest_cleanup.json文件或刪除包含您感興趣的作業結果的特定部分。執行此步驟將允許您立即觸發下一個清理,而無需嘗試下一個自動清理週期。
在以--debug模式運行應用程序後,您必須使用Ctrl + C停止應用程序,然後在沒有--debug選項的情況下重新啟動它以恢復正常的清理過程。
logs/cleaner.log中的應用程序日誌cache/history.log中使用時間戳執行cache/latest_cleanup.json 該存儲庫包含基於Alpine Linux和Dockerfile.bullseye基於Debian 11的根目錄中的兩個Dockerfiles: Dockerfile 。
兩個Docker容器均設計為運行相同的命令: python3 main.py --watch --http-logs ,它以無限循環開始清理過程。一旦開始,容器將繼續無限期地運行,而無需任何進一步的干預。此設置可確保用於Docker圖像的平滑而連續的清理過程。
Alpine:
docker build -t cleaner:alpine .
Debian:
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