Configuração de Repositório Privado Docker no CentOS 7 e Remoção de Imagens

Este guia descreve como implantar um repositório privado Docker no CentOS 7, incluindo a exclusão de imagens e a coleta de lixo para liberar espaço em disco.

Preparação do Ambiente

Ambiente necessário: duas máquinas virtuais CentOS 7 com Docker versão 19.03.12 instalado.
- Máquina virtual A: 10.0.0.10 (ambiente de desenvolvimento).
- Máquina virtual B: 10.0.0.20 (servidor para o repositório privado).

Configuração do Repositório Privado

No servidor 10.0.0.20, baixe a imagem do registry oficial do Docker:

docker pull registry

Inicie um contêiner do registry, mapeando a porta 5000 e um volume persistente para armazenar os dados:

docker run -d -p 5000:5000 -v /home/docker/registry-data:/var/lib/registry registry

Por padrão, os dados do repositório são salvos em /var/lib/registry dentro do contêiner. Para habilitar a exclusão de imagens, crie um arquivo de configuração personalizado, por exemplo, em /home/docker/config.yml, com o conteúdo abaixo:

version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

Reinicie o contêiner usando este arquivo de configuração:

docker run -d -p 5000:5000 -v /home/docker/registry-data:/var/lib/registry -v /home/docker/config.yml:/etc/docker/registry/config.yml registry

O repositório privado agora está acessível em 10.0.0.20:5000.

Testando o Repositório

Na máquina de desenvolvimento (10.0.0.10), baixe uma imagem de teste, como busybox:

docker pull busybox

Marque a imagem com o endereço do repositório privado:

docker tag busybox 10.0.0.20:5000/busybox

Tente enviar a imagem para o repositório:

docker push 10.0.0.20:5000/busybox

Se ocorrer um erro de conexão recusada devido a HTTPS, o Docker requer um registro inseguro. Modifique o serviço do Docker para permitir HTTP:

vim /usr/lib/systemd/system/docker.service

Na linha ExecStart, adicione o parâmetro --insecure-registry:

ExecStart=/usr/bin/dockerd --insecure-registry 10.0.0.20:5000

Recarregue e reinicie o Docker:

systemctl daemon-reload
systemctl restart docker

Agora, repita o comando push para enviar a imagem com sucesso.

Para verificar o repositório, use a API REST:

curl -X GET http://10.0.0.20:5000/v2/_catalog
curl -X GET http://10.0.0.20:5000/v2/busybox/tags/list

Exclusão de Imagens e Coleta de Lixo

Para remover uma imagem, primeiro idnetifique seu hash SHA256 usando a API de catálogo. Em seguida, envie uma solicitação DELETE:

curl -I -X DELETE http://10.0.0.20:5000/v2/busybox/manifests/sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890

Isso exclui apenas os metadados da imagem. Para liberar o espaço em disco, execute a coleta de lixo dantro do contêiner do registry:

docker exec -it [container_id] registry garbage-collect /etc/docker/registry/config.yml

A coleta de lixo remove blobs não referenciados, reduzindo o tamanho dos dados armazenados. Verifique o tamanho antes e depois com:

docker exec -it [container_id] du -chs /var/lib/registry

Tags: Docker CentOS7 Registry imagens-docker garbage-collection

Publicado em 7-6 06:12