同福

Docker私有仓库Registry删除镜像的方法【20220321】

介绍

介绍

大家已经跟着福哥学习了Docker私有仓库的搭建和基本使用方法了,现在有一个问题:如果仓库里面的镜像老了,想更新一下,怎么办呢?

Registry服务器的镜像是不支持更新操作的,如果要更新一个镜像只能先删除再重新push,今天福哥就带着大家学习如何删除Registry服务器里面的镜像,一起来吧~~

官方方法

复制config.yml

从registry容器里面将/etc/docker/registry/config.yml复制出来。

docker cp registry:/etc/docker/registry/config.yml .

默认config.yml内容如下:

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

开启删除操作

设置config.yml,在storage节点添加delete配置设置为true。

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

覆盖config.yml

将修改过的config.yml覆盖容器里面的。

docker cp config.yml registry:/etc/docker/registry/config.yml

重启仓库容器

docker restart registry

查询镜像标签列表

curl 'https://registry.tongfu.net:5000/v2/centos/tags/list'

home/topic/2022/0318/15/8955bbc79fa0f64618d4ce4e2513f03a.png

查询digest

curl -i -sS -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' 'https://registry.tongfu.net:5000/v2/centos/manifests/latest'

home/topic/2022/0318/15/d1de63a1cf97450250619a9dd6e077b8.png

删除镜像

curl -X DELETE https://registry.tongfu.net:5000/v2/centos/manifests/sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc

垃圾回收

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

home/topic/2022/0318/16/c32d92ca9c23f404ebdc2226bd9350e9.png

再次查看镜像标签列表

curl 'https://registry.tongfu.net:5000/v2/centos/tags/list'

home/topic/2022/0318/16/c90bc2dd65c50a51edff244fabd5f1c1.png

可以看到tags为null,也就是说已经被删除了~~

查看镜像

curl 'https://registry.tongfu.net:5000/v2/_catalog'

home/topic/2022/0318/16/35aad8dbf401dd6884c673e1852d8bfd.png

我去!!!怎么还TM在这呢啊~~~~~~

暴力方法

删除镜像文件

直接删除仓库容器/var/lib/registry/docker/registry/v2/repositories/下面的镜像目录。

docker exec registry rm -rf /var/lib/registry/docker/registry/v2/repositories/centos

或者可以将这个目录通过volume映射到宿主机上面来,这样便于管理。

rm -rf /data/docker.registry/var/lib/registry/docker/registry/v2/repositories/centos

垃圾回收

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

重启仓库容器

docker restart registry

查看镜像

curl 'https://registry.tongfu.net:5000/v2/_catalog'

home/topic/2022/0318/16/f67cf23c3951c9d6f1dccd9df00a9ff1.png

终于删除掉了~~~

总结

Docker私有仓库Registry服务器删除镜像的坑还是真挺多的,最坑爹的莫过于官方的方法不能真正的删除服务器上面的镜像文件,只是把镜像的tags给干掉了而已,真是太恶心了~~

福哥推荐使用暴力方法删除镜像,这样既删除的彻底,又不用开启storage的delete开关,安全可靠~~