DockerレジストリHTTP API V2を使用するPythonで書かれたSimple Dockerレジストリクリーナー。
Docker Registry Cleanerは、Dockerレジストリから古いDocker画像を自動的にクリーニングするように設計されたコマンドラインアプリケーションです。さまざまな基準に基づいてクリーンアップジョブを定義する柔軟で構成可能な方法を提供します。
Dockerレジストリクリーナーは、Python 3.11以降を使用してインストールして実行できます。以下の手順に従って、アプリケーションをインストールして実行します。
リポジトリをクローンするか、githubリポジトリからソースコードをダウンロードします。
次のコマンドを実行して、必要な依存関係をインストールするか、単にPipenvツールを使用します。
pip install -r requirements.txt
開発を含むすべての依存関係
pip install -r requirements.all.txt
Dockerレジストリクリーナーには、 config/config.yaml 、 config/jobs.yaml 、 config/manual.yaml 3つの構成ファイルが必要です。
例はリポジトリにあります
エクスマプル:
# 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 :リポジトリのタグを一致させるための正規表現の文字列配列。これらのregexパターンに一致するタグのみが、クリーンアップのために考慮されます。このオプションを使用するときは注意してください。 https://regex101.com/でregexpを確認してください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個別に一致させるために、2つの異なる正規表現を追加する必要があります。
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のジョブと削除された画像に関するすべての最新のクリーンアップ情報このリポジトリには、ルートディレクトリにある2つのDockerFilesが含まれています。AlpineLinuxとDockerfile.bullseyeに基づくDockerfile 、Debian 11に基づいています。
両方のDockerコンテナは、同じコマンドを実行するように設計されています: python3 main.py --watch --http-logs 、無限のループでクリーンアッププロセスを開始します。開始すると、コンテナはそれ以上の介入なしに無期限に実行され続けます。このセットアップにより、Docker画像のスムーズで連続的なクリーンアッププロセスが保証されます。
高山:
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