docker仓库存放着公司内部的镜像、时间长了难免存在一些废弃的镜像在里面。如果不删除造成空间的浪费。下面就简单的看看仓库中的镜像是怎么删除的。
第一步:registry启动依赖config.yml配置文件:在默认文件的storage区域中添加delete_enable_ture配置项。也可以在启动时候指定-e添加。允许删除镜像:
配置文件:
第二步:下载registry镜像并启动容器。
docker run -d -v /conf/:/etc/docker/registry -v /opt/registry:/var/lib/registry -p5000:5000 --restart=always --name registry docker.io/registr y:latest
第三步:上传镜像
前边三个步骤都是为删除镜像做准备。现在正式开始删除操作。
先看下官网怎么说:
语法非常简单。官网上注明可以通过name和digest删除image。name我们是知道的。现在去获取digest:
删除一个image所需要的name和digest都有了。现在执行删除操作:
[[email protected] ~]# curl -XDELETE 127.0.0.1:5000/v2/registry_test/manifests/sha256:48b7957fb8794 3139789779c6e1448ce3cbd52adf1eba62f4633c0e289c08c1b
看似已经删除了,其实硬盘地址并没有释放。是因为docker删除image只是删除的image的元数据信息。层数据并没有删除。现在进入registry中进行垃圾回收
[[email protected] ~]# docker exec -it <容器ID|容器名称> /bin/sh / # cd /var/lib/registry/ /var/lib/registry # du -sch 10.3M . 10.3M total /var/lib/registry # registry garbage-collect /etc/docker/registry/config.yml /var/lib/registry # du -sch 28.0K . 28.0K total
这样就达到我们的目的了。及删除了仓库容器,又释放了磁盘空间
注意事项:
1、registry配置文件:如果想要进行仓库images的删除操作: 至少要添加REGISTRY_STORAGE_DELETE_ENABLED: true这个环境变量也就是第一步标注的
2、获取digest:自从registry2.3之后,获取digest需要进行安全检查。所以必须加头部信息Accept: application/vnd.docker.distribution.manifest.v2+json。否则获取到的digest将不能使用。