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