Simple Docker Registry Cleaner ditulis dalam Python yang menggunakan Docker Registry http API v2.
Docker Registry Cleaner adalah aplikasi baris perintah yang dirancang untuk secara otomatis membersihkan gambar Docker lama dari Docker Registry. Ini memberikan cara yang fleksibel dan dapat dikonfigurasi untuk mendefinisikan pekerjaan pembersihan berdasarkan berbagai kriteria.
Pembersih registri Docker dapat dipasang dan dijalankan menggunakan Python 3.11 atau lebih tinggi. Ikuti langkah -langkah di bawah ini untuk menginstal dan menjalankan aplikasi:
Kloning repositori atau unduh kode sumber dari repositori GitHub.
Instal dependensi yang diperlukan dengan menjalankan perintah berikut atau cukup gunakan alat Pipenv :
pip install -r requirements.txt
Semua dependensi termasuk dev
pip install -r requirements.all.txt
Pembersih Registry Docker membutuhkan 3 file konfigurasi: config/config.yaml , config/jobs.yaml dan config/manual.yaml .
Contoh dapat ditemukan di repositori
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 dari registri Docker akan dibersihkan.username : Nama pengguna yang digunakan untuk otentikasi dengan Docker Registry.password : Kata sandi yang digunakan untuk otentikasi dengan registri Docker.max_concurrent_requests : Jumlah maksimum permintaan bersamaan yang dapat dilakukan aplikasi ke registri. Nilai default: 20.proxy : URL dari server proxy yang akan digunakan untuk membuat permintaan ke registri. Jika tidak diperlukan, biarkan kosong atau hapus.timeout : Batas waktu untuk setiap permintaan HTTP dalam hitungan detik. Nilai default: 20.username , registry , dan proxy dapat diatur menggunakan variabel lingkungan, seperti yang ditunjukkan pada contoh Daftar pekerjaan pembersihan yang didefinisikan dalam jobs.yaml . Setiap pekerjaan didefinisikan oleh parameter berikut:
- 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 : Nama pekerjaan.description : Deskripsi pekerjaan opsional.repositories : Array string nama repositori dan nama untuk membersihkan gambar dari.tag_regexps : String array ekspresi reguler untuk mencocokkan tag di repositori. Hanya tag yang cocok dengan pola regex ini yang akan dipertimbangkan untuk pembersihan. Hati -hati saat Anda menggunakan opsi ini. Periksa regexp Anda di https://regex101.com/save_last : Jumlah tag terakhir yang akan disimpan (dikecualikan dari pembersihan) di setiap repositori.clean_every_n_hours : Interval dalam jam antara pembersihan berturut -turut berjalan untuk pekerjaan ini.older_than_days : Usia dalam beberapa hari setelah itu tag akan dipertimbangkan untuk pembersihan. Tag dikelompokkan berdasarkan ekspresi reguler, dengan setiap ekspresi reguler mewakili kelompok yang berbeda. Jika Anda perlu menyimpan 5 tag terakhir untuk release-xx-dev dan release-xx secara mandiri, tetapi ekspresi reguler Anda dapat cocok dengan kedua jenis tag, Anda akan berakhir dengan array campuran yang berisi 5 tag release-xx-dev dan release-xx . Untuk mencegah situasi ini, Anda perlu menambahkan dua ekspresi reguler yang berbeda untuk mencocokkan release-xx dan release-xx-dev secara mandiri.
Perbedaan dari jobs.yaml :
--jobs , yang memungkinkan Anda untuk menentukan pekerjaan yang dinyatakan dalam manual.yaml .Gunakan perintah berikut untuk menjalankan Docker Registry Cleaner:
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
Pembersih Registry Docker menerima opsi berikut:
--debug : Jika disediakan, aplikasi akan menghasilkan log tanpa benar-benar menghapus gambar. Gunakan opsi ini jika Anda perlu memeriksa gambar yang akan dihapus aplikasi--watch : Jika disediakan, aplikasi akan berjalan dalam loop tanpa akhir, secara berkala mengeksekusi pekerjaan pembersihan berdasarkan konfigurasi di config.yaml .--jobs : Daftar nama pekerjaan yang ditentukan dalam manual.yaml yang ingin Anda jalankan. Misalnya: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : Jika disediakan, log http akan diaktifkan untuk setiap permintaan yang dibuat oleh aplikasi. Jika Anda telah menggunakan aplikasi dengan opsi --debug dan perlu memicu proses pembersihan segera, Anda mungkin perlu membersihkan file latest_cleanup.json atau menghapus bagian tertentu yang berisi hasil pekerjaan yang Anda minati. Melakukan langkah ini akan memungkinkan Anda untuk segera memicu pembersihan berikutnya, tanpa harus menunggu siklus pembersihan otomatis berikutnya.
Setelah menjalankan aplikasi dalam mode --debug , Anda harus menghentikan aplikasi dengan Ctrl + C dan kemudian restart tanpa opsi --debug untuk melanjutkan proses pembersihan normal.
logs/cleaner.logcache/history.logcache/latest_cleanup.json Repositori ini berisi dua DockerFiles yang terletak di direktori root: Dockerfile berdasarkan Alpine Linux dan Dockerfile.bullseye berdasarkan Debian 11.
Kedua wadah Docker dirancang untuk menjalankan perintah yang sama: python3 main.py --watch --http-logs , yang memulai proses pembersihan dalam loop tak terbatas. Setelah dimulai, wadah akan terus berjalan tanpa batas waktu tanpa intervensi lebih lanjut. Pengaturan ini memastikan proses pembersihan yang halus dan berkelanjutan untuk gambar Docker.
Alpine:
docker build -t cleaner:alpine .
DEBIAN:
docker build -t cleaner:debian -f Dockerfile.bullseye .
Untuk menjalankan Docker Registry Cleaner, Anda harus memberikan variabel lingkungan yang diperlukan untuk otentikasi dan, jika perlu, pasang file konfigurasi baru di dalam wadah:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
Berhenti:
docker container stop <container_name> -s KILL