Docker registry V2 推送镜像、拉取镜像、搜索镜像、删除镜像和垃圾回收

本文介绍了如何使用Docker Registry V2进行镜像的推送、拉取、搜索和删除操作。在Registry V2中,搜索镜像不被支持,需要借助REST API。删除镜像时,需获取digest并执行垃圾回收才能彻底删除。此外,文章还提及了在私有registry中启用删除功能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档

Registry操作

推送一个镜像到registry

# docker push <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker push 192.168.37.100:5000/busybox:0.0.1

从registry拉取一个镜像

# docker pull <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker pull 192.168.37.100:5000/busybox:0.0.1

在registry中搜索一个镜像

Registry V2 不支持通过docker search 去搜索镜像。

如果执行下面的命令会遇到“Error response from daemon: Unexpected status code 404” 的错误。

docker search 192.168.37.100:5000/busybox

需要通过Registry V2的REST API去查询。

列出所有的镜像仓库(repositories):

# curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog
curl -X GET http://192.168.37.100:5000/v2/_catalog

输出例子:

{"repositories":["busybox"]}

列出指定镜像的所有标签:

# curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list
curl -X GET http://192.168.37.100:5000/v2/busybox/tags/list

输出例子:

{"name":"busybox","tags":["latest","0.0.1","0.0.2"]}

删除registry中的镜像

删除registry比较复杂,需要先查到指定标签的镜像的digest (sha256校验和),再根据这个digest来删除。

下面以删除192.168.37.100:5000/busybox/:0.0.1 镜像为例。

先执行以下命令找到该镜像的digest:

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET  http://192.168.37.100:5000/v2/busybox/manifests/0.0.1 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'

Digest输出例子:

Docker-Content-Digest: sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335

执行以下命令,根据digest删除镜像:

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE http://192.168.37.100:5000/v2/busybox/manifests/sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335

这里的删除镜像只是删除了一些元数据,需要执行下面的垃圾回收才能真正地从硬盘上删除镜像数据。

因为缺省Docker private registry不允许删除镜像,如果遇到“405 Unsupported” 错误,需要在运行registry容器时设置REGISTRY_STORAGE_DELETE_ENABLED环境变量或参数为true。

docker-compose.yaml 例子:

 environment:
    REGISTRY_STORAGE_DELETE_ENABLED: "true"

docker run 例子:

-e REGISTRY_STORAGE_DELETE_ENABLED="true"

创建Docker private registry可以参考:一键搭建Docker private registry并使用阿里云镜像加速器

垃圾回收

进入registry容器,执行garbage-collect 命令执行垃圾回收。

docker exec -it registry  /bin/registry garbage-collect  /etc/docker/registry/config.yml

参考文档

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值