Limpador de registro simples do Docker escrito em Python que usa o Docker Registry HTTP API V2.
O limpador de registro do Docker é um aplicativo de linha de comando projetado para limpar automaticamente as imagens antigas do Docker de um registro do Docker. Ele fornece uma maneira flexível e configurável de definir trabalhos de limpeza com base em vários critérios.
O limpador do Docker Registry pode ser instalado e executado usando o Python 3.11 ou superior. Siga as etapas abaixo para instalar e executar o aplicativo:
Clone o repositório ou faça o download do código -fonte do repositório do GitHub.
Instale as dependências necessárias executando o seguinte comando ou simplesmente use a ferramenta Pipenv :
pip install -r requirements.txt
Todas as dependências, incluindo Dev
pip install -r requirements.all.txt
O limpador de registro do docker requer 3 arquivos de configuração: config/config.yaml , config/jobs.yaml e config/manual.yaml .
Exemplos podem ser encontrados no repositório
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 : O URL do registro do Docker a ser limpo.username : o nome de usuário usado para autenticação com o Docker Registry.password : a senha usada para autenticação com o registro do Docker.max_concurrent_requests : o número máximo de solicitações simultâneas que o aplicativo pode fazer no registro. Valor padrão: 20.proxy : o URL do servidor proxy a ser usado para fazer solicitações ao registro. Se não for necessário, deixe em branco ou exclua.timeout : o tempo limite para cada solicitação HTTP em segundos. Valor padrão: 20.username , registry e proxy podem ser definidos usando variáveis de ambiente, como mostrado no exemplo Uma lista de trabalhos de limpeza definidos em jobs.yaml . Cada trabalho é definido pelos seguintes parâmetros:
- 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 : o nome do trabalho.description : Uma descrição opcional do trabalho.repositories : matriz de string de nome do repositório regexps e nomes para limpar imagens de.tag_regexps : matriz de string de expressões regulares para combinar tags nos repositórios. Somente tags correspondentes a esses padrões Regex serão consideradas para limpeza. Tenha cuidado ao usar esta opção. Verifique seu regexp em https://regex101.com/save_last : O número das últimas tags a serem salvas (excluídas da limpeza) em cada repositório.clean_every_n_hours : o intervalo em horas entre sucessivas execuções de limpeza para este trabalho.older_than_days : A idade nos dias após os quais as tags serão consideradas para limpeza. As tags são agrupadas por expressões regulares, com cada expressão regular representando um grupo diferente. Se você precisar salvar as últimas 5 tags para release-xx-dev e release-xx de forma independente, mas sua expressão regular pode corresponder aos dois tipos de tags, você acabará com uma matriz mista contendo 5 tags release-xx-dev e release-xx . Para evitar essa situação, você precisa adicionar duas expressões regulares diferentes para corresponder release-xx e release-xx-dev de forma independente.
Diferenças de jobs.yaml :
--jobs , que permite especificar trabalhos declarados no manual.yaml .Use o comando a seguir para executar o limpador de registro do 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
O limpador de registro do Docker aceita as seguintes opções:
--debug : se fornecido, o aplicativo gerará logs sem excluir as imagens. Use esta opção se precisar verificar as imagens que o aplicativo excluirá--watch : se fornecido, o aplicativo será executado em um loop sem fim, executando periodicamente os trabalhos de limpeza com base na configuração no config.yaml .--jobs : uma lista de nomes de empregos definidos no manual.yaml que você deseja executar. Por exemplo: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : se fornecidos, os logs HTTP serão ativados para cada solicitação feita pelo aplicativo. Se você estiver usando o aplicativo com a opção --debug e precisar acionar o processo de limpeza imediatamente, pode ser necessário limpar o arquivo latest_cleanup.json ou excluir uma seção específica que contenha o resultado do trabalho em que você está interessado. A execução desta etapa permitirá que você acione a próxima limpeza imediatamente, sem precisar esperar o próximo ciclo automático.
Após a execução do aplicativo no modo --debug , você deve interromper o aplicativo com Ctrl + C e reiniciá -lo sem a opção --debug para retomar o processo normal de limpeza.
logs/cleaner.logcache/history.logcache/latest_cleanup.json Este repositório contém dois dockerfiles localizados no diretório raiz: Dockerfile baseado em alpino linux e Dockerfile.bullseye com base no Debian 11.
Ambos os contêineres do Docker foram projetados para executar o mesmo comando: python3 main.py --watch --http-logs , que inicia o processo de limpeza em um loop infinito. Uma vez iniciado, o contêiner continuará a funcionar indefinidamente sem nenhuma intervenção adicional. Essa configuração garante um processo de limpeza suave e contínuo para imagens do Docker.
Alpino:
docker build -t cleaner:alpine .
Debian:
docker build -t cleaner:debian -f Dockerfile.bullseye .
Para executar o limpador de registro do Docker, você precisará fornecer as variáveis de ambiente necessárias para autenticação e, se necessário, montar novos arquivos de configuração dentro do contêiner:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
Parar:
docker container stop <container_name> -s KILL