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.

相关推荐
峰顶听歌的鲸鱼5 小时前
Kubernetes介绍和部署
运维·笔记·云原生·容器·kubernetes·学习方法
信创天地6 小时前
自动化运维利器赋能信创:Ansible与SaltStack在国产系统的部署与批量管理实战
运维·自动化·ansible
东城绝神6 小时前
《Linux运维总结:基于ARM64+X86_64架构使用docker-compose一键离线部署MySQL8.0.43 NDB Cluster容器版集群》
linux·运维·mysql·架构·高可用·ndb cluster
creator_Li6 小时前
即时通讯项目--(1)环境搭建
linux·运维·ubuntu
Ka1Yan6 小时前
Docker:基本概念与快速入门
运维·docker·容器
文静小土豆8 小时前
Rocky Linux 二进制 安装K8S-1.35.0高可用集群
linux·运维·kubernetes
小技工丨8 小时前
华为TaiShan 200 2280 ARM服务器虚拟化部署完整指南
运维·服务器·arm开发
糠帅傅蓝烧牛肉面9 小时前
单实例多MCP聚合服务:两种实现方案深度对比
前端·docker·ai
4032407310 小时前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
零意@10 小时前
debian如何把新编译的内核镜像替换原来的内核
运维·debian·更新内核版本·linux内核版本更新·debian更新内核