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

官方文档

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

参考文档

猜你喜欢

转载自blog.csdn.net/nklinsirui/article/details/80705306