Docker Registry Clean

文章目录

    • [1. Introduction](#1. Introduction)
    • [2. Features](#2. Features)
    • [3. Docker Installation](#3. Docker Installation)
    • [4. Docker Configuration](#4. Docker Configuration)
    • [5. DNS Configuration](#5. DNS Configuration)
    • [6. Deploying the Registry](#6. Deploying the Registry)
    • [7. Registry API Management](#7. Registry API Management)
    • [8. Bulk Image Cleanup](#8. Bulk Image Cleanup)
    • [9. Additional Resources](#9. Additional Resources)
    • [10. References](#10. References)

1. Introduction

registry-clean is a powerful and efficient solution designed to simplify the management of your Docker image registry. It enables easy bulk deletion of outdated or unnecessary images, ensuring your registry remains organized and performs optimally. This intuitive script simplifies image lifecycle management, providing peace of mind in fast-paced development environments. Enhance your Docker registry management experience with registry-clean.

2. Features

  • Handles Diverse Image Types: Deletes images with or without project names, images with multiple tags, and even non-existent images (reporting appropriately).
  • Safe Deletion: The script verifies the existence of images before deletion, preventing accidental removals.
  • Garbage Collection: Performs garbage collection after execution to reclaim disk space.

3. Docker Installation

Before proceeding, ensure Docker is installed and configured correctly.

4. Docker Configuration

bash 复制代码
$ cat /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries": ["registry.ghostwritten.com"],
  "live-restore": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}

If using a proxy, modify the /usr/lib/systemd/system/docker.service.d/proxy.conf file:

bash 复制代码
$ cat /usr/lib/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.21.101:7890"
Environment="HTTPS_PROXY=http://192.168.21.101:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.coding.net,.tencentyun.com,.myqcloud.com,*.bsgchina.com"

After configuration changes, run the following command:

bash 复制代码
$ sudo systemctl daemon-reload && sudo systemctl restart docker

5. DNS Configuration

To access the private image registry registry.ghostwritten.com, configure DNS resolution.

Server-side (192.168.21.25) Configuration: Modify the /etc/unbound/unbound.conf file, adding the following (adjust IP address as needed):

bash 复制代码
$ cat /etc/unbound/unbound.conf
...
local-data: "registry.ghostwritten.com A 192.168.21.25"
local-data-ptr: "192.168.21.25 registry.ghostwritten.com"
...

Restart the Unbound service:

bash 复制代码
$ sudo systemctl restart unbound

Client-side Configuration: Ensure the /etc/resolv.conf file points to the correct DNS server (e.g., your server at 192.168.21.2):

bash 复制代码
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.21.2

6. Deploying the Registry

Deploy the Docker Registry and enable image deletion:

bash 复制代码
$ docker run -d --restart=always --name registry -p 80:5000 -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true -e REGISTRY_STORAGE_DELETE_ENABLED=true -v /data/registry:/var/lib/registry registry:latest

Note: Create the /data/registry directory beforehand and ensure the Docker container has write permissions.

7. Registry API Management

The Docker Registry provides a RESTful API for image management. Here are some examples:

  • List Image Tags:
bash 复制代码
$ curl -s 'http://registry.ghostwritten.com/v2/registry/tags/list' | jq .
# Example output: {"name": "registry", "tags": ["latest"]}
  • Get Image Manifest:
bash 复制代码
$ curl -I -X GET 'http://registry.ghostwritten.com/v2/registry/manifests/latest'
# (HTTP response headers will be displayed here)
  • Delete Image (Using Digest): Direct tag deletion might fail; use the digest instead. First, obtain the image digest using docker inspect:
bash 复制代码
$ curl -I -X DELETE http://registry.ghostwritten.com/v2/registry/manifests/latest
# (HTTP response headers - likely a 400 error)

$ docker inspect registry.ghostwritten.com/registry:latest | jq -r '.[0].RepoDigests[]' | grep registry.ghostwritten.com | awk -F '@' '{print $2}'
# Output: (SHA256 digest)

$ curl -I -X GET 'http://registry.ghostwritten.com/v2/registry/manifests/<SHA256_digest>'
# (HTTP response headers)

$ curl -I -X DELETE 'http://registry.ghostwritten.com/v2/registry/manifests/<SHA256_digest>'
# (HTTP response headers - likely a 202 Accepted)

$ curl -s 'http://registry.ghostwritten.com/v2/_catalog' | jq .
# Example output: {"repositories": ["library/busybox", "registry"]}

$ curl -q -s 'http://registry.ghostwritten.com/v2/registry/tags/list' | jq .
# Example output: {"name": "registry", "tags": [] or ["latest"]}

$ rm -rf /data/registry/docker/registry/v2/repositories/registry

$ curl -q -s http://registry.ghostwritten.com/v2/_catalog | jq .
# Example output: {"repositories": ["library/busybox"]}

Pushing an image:

bash 复制代码
$ docker push registry.ghostwritten.com/registry:latest
# (Docker push output)

Checking image tags:

bash 复制代码
$ curl -q -s 'http://registry.ghostwritten.com/v2/registry/tags/list' | jq .
# Example output: {"name": "registry", "tags": ["latest"]}

8. Bulk Image Cleanup

This section demonstrates a cleanup process. First, images are pushed to the registry. Future scenarios may need to handle various situations: images with or without project names, and images with multiple tags.

bash 复制代码
$ cat registry-images-push.sh
docker push registry.ghostwritten.com/demo/nginx:1.26
docker push registry.ghostwritten.com/demo/nginx:latest
docker push registry.ghostwritten.com/library/busybox:1.36.1
docker push registry.ghostwritten.com/registry:latest
docker push registry.ghostwritten.com/library/busybox:1.35.0

Push images to the registry:

bash 复制代码
$ sh registry-images-push.sh

Images to be deleted are listed in registry-images-clean.txt. This tests several deletion scenarios: deleting images with multiple tags, images without project names, and non-existent images.

bash 复制代码
$ cat registry-images-clean.txt
registry.ghostwritten.com/library/busybox:1.36.1
registry.ghostwritten.com/registry:latest
registry.ghostwritten.com/demo/nginx:1.26
registry.ghostwritten.com/demo/nginx:noexist

The registry-images-clean.sh script is used for bulk deletion of Docker images. It supports two modes: ls (list images) and rm (remove images).

Usage:

  1. Create registry-images-clean.txt: List images to delete, one per line (e.g., registry.ghostwritten.com/library/busybox:1.36.1).
  2. Run the script:
    • List images: ./registry-images-clean.sh ls
    • Remove images: ./registry-images-clean.sh rm

Check current registry images:

bash 复制代码
$ sh registry-images-clean.sh ls
# Output: (List of images and tags)

Delete images:

bash 复制代码
$ sh registry-images-clean.sh rm
# Output: (Messages indicating success or failure for each image deletion)

Check the registry again:

bash 复制代码
$ sh registry-images-clean.sh ls
# Output: (Updated list of images and tags)

9. Additional Resources

10. References

Remember to replace the outdated links with current, official documentation. The registry-images-clean.sh script provided needs significant improvement for robustness and error handling in a production environment.

相关推荐
落世繁华几秒前
DIFY合同生成全流程开发实践(三、后端接口以及优化方向)
docker·一键部署·dify·合同生成·文字转word
胡闹546 分钟前
Linux查询防火墙放过的端口并额外增加需要通过的端口命令
linux·运维·windows
ascarl201040 分钟前
Kubernetes 环境 NFS 卡死问题排查与解决纪要
云原生·容器·kubernetes
SongJX_1 小时前
DHCP服务
linux·运维·服务器
流形填表1 小时前
AI如何做SEO?
运维·人工智能·自动化·seo
点亮一颗LED(从入门到放弃)1 小时前
字符设备驱动(5)
linux·运维·服务器
weixin_448119942 小时前
Datawhale 用Markdown语法轻松开发AI应用202512 第1次作业
运维·服务器
CodeCraft Studio3 小时前
用“录制宏”轻松实现文档自动化:ONLYOFFICE 宏功能实践解析
运维·自动化·onlyoffice·录制宏·创建宏·文档自动化·文档协同
m0_569531013 小时前
《K8s 网络入门到进阶:Service 与 Ingress 原理、部署方案及核心区别对比》
网络·容器·kubernetes
广东大榕树信息科技有限公司3 小时前
当运维管理面临挑战时,如何借助动环监控系统提升响应能力?
运维·网络·物联网·国产动环监控系统·动环监控系统