一文搭建本地镜像仓
拉取registry镜像
docker pull registry:2
运行registry容器
第1种方式:不加持久化
docker run -d -p 5000:5000 --restart=always --name=registry registry:2
第2种方式:对初始化配置文件,加持久化
# 创建数据卷,用于挂载
docker create volume registryvolume
docker run -d -p 5000:5000 --restart=always --name=registry -v registryvolume:/etc/docker/registry registry:2
推送镜像
docker push ubuntu:22.04
v2支持的所有端点
v2支持的所有端点
Method | Path | Entity | Description |
---|---|---|---|
GET | /V2/ | Base | 查看是否支持registry/v2 |
GET | /v2/_catalog | Catalog | 查看所有的镜像仓库列表 |
GET | /v2/<repository_name>/tags/list | Tags | 查看存储库中所有的镜像标签 |
GET | /v2/<repository_name>/manifests/ |
Manifests | 获取由摘要或者标签指向的信息 |
POST | /v2/<repository_name>/manifests/ |
Manifests | 上传由摘要或者标签指向的信息 |
DELETE | /v2/<repository_name>/manifests/ |
Manifests | 删除由摘要指向的信息 |
DELETE | /v2/<repository_name>/blobs/ |
Blob | 获取由摘要指向的blob |
DELETE | /v2/<repository_name>/blobs/ |
Blob | 删除由摘要指向的blob |
查询存储库
curl -X GET http://localhost:5000/v2/_catalog # 查看所有存储库
curl -X GET http://localhost:5000/v2/_catalog?n=1&last=ImageName # n为每一页的数量,last为一页中最后一个镜像名
获取特定镜像的manifests
curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://localhost:5000/v2/ubuntu/manifests/22.04
如果拿到是v1版本信息,此时去删除镜像,会报404未找到
拿到v2版本信息如下图
Etag是一种Entity对象、HTTP响应头,提供资源的唯一标识符,通常用于缓存和验证机制,确保客户端资源是最新的。
Blob也是一种Entity对象,用于存储镜像的层或其它数据。blob的sha值,用于验证和去重。
根据digest删除特定镜像
curl -I -X DELETE http://localhost:5000/v2/ubuntu/manifests/sha256:34782402df238275b0bd100009b1d31c512d96392872bae234e1800f3452e33d
触发垃圾回收
触发垃圾回收,根据已删除的manifests信息,删除blob
docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml