Docker Registry HTTP API V2를 사용하는 Python으로 작성된 간단한 Docker Registry Cleaner.
Docker Registry Cleaner는 Docker Registry에서 오래된 Docker 이미지를 자동으로 청소하도록 설계된 명령 줄 응용 프로그램입니다. 다양한 기준에 따라 정리 작업을 정의하는 유연하고 구성 가능한 방법을 제공합니다.
Docker Registry Cleaner는 Python 3.11 이상을 사용하여 설치하고 실행할 수 있습니다. 아래 단계를 따라 응용 프로그램을 설치하고 실행하십시오.
저장소를 복제하거나 GitHub 저장소에서 소스 코드를 다운로드하십시오.
다음 명령을 실행하여 필요한 종속성을 설치하거나 단순히 Pipenv 도구를 사용하십시오.
pip install -r requirements.txt
Dev
pip install -r requirements.all.txt
Docker Registry Cleaner에는 config/config.yaml , config/jobs.yaml 및 config/manual.yaml 의 3 개의 구성 파일이 필요합니다.
예제는 저장소에서 찾을 수 있습니다
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 Registry의 URL.username : Docker Registry와 인증에 사용되는 사용자 이름.password : Docker Registry와 인증에 사용되는 비밀번호.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 개의 태그를 독립적으로 저장해야하지만 정규 표현식은 두 유형의 태그와 일치 할 수 있으므로 release-xx-dev 및 release-xx 태그가 5 개가 포함 된 혼합 배열로 끝납니다. 이 상황을 방지하려면 release-xx 및 release-xx-dev 독립적으로 두 가지 다른 정규 표현식을 추가해야합니다.
jobs.yaml 의 차이점 :
--jobs 옵션과 함께 사용되므로 manual.yaml 에 선언 된 작업을 지정할 수 있습니다.다음 명령을 사용하여 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
Docker Registry Cleaner는 다음 옵션을 수락합니다.
--debug : 제공된 경우 응용 프로그램은 실제로 이미지를 삭제하지 않고 로그를 생성합니다. 앱이 삭제되는 이미지를 확인 해야하는 경우이 옵션을 사용하십시오.--watch : 제공된 경우, 응용 프로그램은 끝없는 루프로 실행되며 config.yaml 의 구성에 따라 정기적으로 정리 작업을 실행합니다.--jobs : 실행하려는 Manual.yaml에 정의 된 작업 이름 목록. 예를 들면 : --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 에서 작업 및 삭제 된 이미지에 대한 모든 최신 정리 정보 이 저장소에는 루트 디렉토리에 위치한 두 개의 dockerfiles가 포함되어 있습니다 : Alpine Linux를 기반으로 한 Dockerfile 및 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 Registry Cleaner를 실행하려면 인증에 필요한 환경 변수를 제공하고 필요한 경우 컨테이너 내부에 새로운 구성 파일을 장착해야합니다.
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