基本介绍

博主在【Docker】专题一:Docker 基本架构 中介绍过 Docker Registry,它是 Docker 镜像仓库,用于存放和管理 Docker 镜像。

本文将专题介绍本地镜像仓库的创建方法、API 请求、镜像清理等内容。


Registry 创建方法

使用 DockerHub 上 Registry 官方镜像直接运行容器即可,并挂载本地数据目录。

# 创建容器并后台运行,设置目录、端口映射docker run -d \-p 5000:5000 \-v /var/lib/local_registry:/var/lib/registry \--name local_registry \registry:latest  # docker ps 查看容器状态# 此时私有镜像名称格式为:127.0.0.1:5000/test:latest

Registry 常用 API 请求

附官方文档地址:Registry | Docker Docs

# 查看 repository 列表curl 127.0.0.1:5000/v2/_catalog # 查看镜像 tag 列表curl 127.0.0.1:5000/v2/<repository>/tags/list # 查看镜像 tag 对应的 digestcurl -s 127.0.0.1:5000/v2/<repository>/manifests/<tag> -I -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' | grep Docker-Content-Digest | awk '{print $NF}' | tr -d '\r'

Registry 镜像清理

1、前提条件

需要在 /etc/docker/registry/config.yml 文件中配置允许删除镜像(storage.delete.enabled)。

version: 0.1log:  fields:    service: registrystorage:  cache:    blobdescriptor: inmemory  filesystem:    rootdirectory: /var/lib/registry  # 添加 delete 字段,允许删除镜像  delete:    enabled: truehttp:  addr: :5000  headers:    X-Content-Type-Options: [nosniff]health:  storagedriver:    enabled: true    interval: 10s    threshold: 3

运行 Registry 容器时挂载该配置文件即可:

docker run -d \-p 5000:5000 \-v /var/lib/local_registry:/var/lib/registry \-v /etc/docker/config.yml:/etc/docker/registry/config.yml--name local_registry \registry:latest

2、清理步骤

# 第一步:参考常用 API 请求,自行获取镜像的 repository 和 digest 信息 # 第二步:删除镜像curl -I -XDELETE 127.0.0.1:5000/v2/<repository>/manifests/<digest> # 第三步:垃圾回收docker exec local_registry bin/registry garbage-collect /etc/docker/registry/config.yml

🔔 官方说明:删除镜像时必须指定 digest 信息而非 tag 信息。