这篇文章主要介绍了码头工人镜像完全卸载的操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1.docker ps -a查看运行的镜像进程
[root@mylinux~]# docker ps -a
容器身份证明映像命令创建的状态端口名称
98 ACB 9 dcb 2 a2 redis:5 docker-入口点。s… 8分钟前上升8分钟0.0.0.0:6379-6379/tcp redis
1 B1 ff 7 f 08583 MySQL:5.7 docker-入口点。s… 8分钟前涨8分钟0.0.0.0:3306-3306/tcp,33060/tcp mysql
035129 f60 a64 mongo:3.6 docker-入门点。s… 8分钟前涨8分钟0.0.0.0:27017-27017/tcp mongo
2.docker stop CONTAINER ID例如要删除mysql镜像,停止该镜像进程
停靠站035129f60a64
3.docker rm CONTAINER ID卸载镜像
文件编号rm 035129f60a64
4.docker images 查看当前docker的镜像IMAGE ID
[root@mylinux ~]# docker图片
存储库标记图像身份证明创建的大小
redis 5 a4fe14ff1981 25小时前95MB
mysql 5.7 7faa3c53e6d6 29小时前373MB
mongo 3.6 0f29e46dab41两天前432MB
5.docker rmi IMAGE ID 删除镜像
[root @我的Linux ~]# docker RMI 7 FAA 3c 53 e6d 6
未标记:mysql:5.7
未标记:MySQL @ sha 256:204 F5 c 77 Fe 589 c 202 e 2 ebc 8 b 6 b 7 DC 442d 67 c 07168916 a 302 ede 26 B3 e 9 ab 168
已删除:sha 256:7 FAA 3c 53 e 6d 699 Fe 92d 49 a 361 e 427 C3 af 937 c 6 CEA 9517 f 092 e 8013 B1 ff f1 C4 d 9
已删除:沙256:巴达5 edfe 9 c 6 f 4637 D3 ef 1 f 4797561867 be 56282 a 750 c 0 f1 d 4 a 83 c 227 BC 7 a 153
已删除:sha 256:CB 6436 ACC 7 f 930 ab 22d 387016 b 2296 E6 c 191 fc 4 ebbb 1611 f 84 E3 e 15073588 fc 7
已删除:sha 256:1716d 22 CD 68158 fa 78 c 60 cf 78 d8e 25457 FB 384 de 45 de 7775 ab F3 a 31502 b 6 f 00e
已删除:sha 256:daeb 1195813697 ab 0182 EB 75 de 7 f 5a 0 f 5 bbfc 4 f 8 EB 91 be 9 f 844777841 e 759984
已删除:sha 256:64 FFA 0 cc Fe 7 f 5 ECB 4 FB 721913499 a 8 E0 B1 af 9897 b 69 a 0 dbec 0922 f 5b 70666 e 76
已删除:sha 256:3b 3af 32 BD 87 b 74 f 389198 eab 8514d 9 f 32 F3 e 513 DAE 313748 b 165333 b 286 BD 171
已删除:sha 256:c 75 ab 456 a 585 af 40 ca 2 EC 8488164230 deb 81 a 1739d 868604 CB 6661 c 24 e 37 b 5
已删除:sha 256:50 a 75 EB 6a 0b 2254 Fe 5d 96 f 999 cc 2087 e 72d 515 c 93509 a 816 bbd 9 FB 707 a3 B1 b 0
已删除:sha 256:1ae 6616333 a 66450738 a 72 a 75 c 03 BDF 0236 e 0425 ba 0336 a 5c DBE 470 ab 6 F4 a3 e
已删除:sha 256:68e 318 BD 9263 aedd 19d 9d 73 b 051 a 262 fa 57 e 2 a 16 f 9 c 81 c8 b 39163601020 CD 405
已删除:sha 256:6270 ADB 5794 c 6987109 e 54 af 00 ab 456977 C5 D5 cc 6 f1 BC 52 C1 ce 58d 32 EC 0 f 15 f 4
补充:Docker彻底删除私有库镜像
首先看看网上一般的做法
私有库默认是不支持删除镜像的,需要修改config.yml配置文件,在储存;储备节点下加入删除:启用:真,然后重启私有库。
码头工人提供的镜像删除美国石油学会(美国石油协会)为:
删除ip:端口/v2/存储库/清单/引用
仓库为镜像的仓库
参考为镜像推成功后生成的文摘:sha256值
获取 digest :
curl-header 接受:应用程序/vnd。码头工人。分销。显化。v2 JSON -I-XGET私有库ip:端口号/v2/镜像存储库/清单/镜像标签
注意:
-header Accept:application/vnd。码头工人。分销。显化。 v2 JSON 这个页眉是必须要加的,不加的话内容类型是第五颅神经的眼支漂亮jws,获取的摘要是错误的!
例:curl-header 接受:应用程序/vnd。码头工人。分销。显化。v2 JSON -I-XGET 192。168 .120 .107:5000/v2/我的注册表/清单/1.0
删除镜像:
例:curl-I-X删除http://192。168 .120 .107:5000/v2/my-repository/manifests/sha 256:4d 523 ADB 3c 653 Bab 7 DFD 0326081860 B3 CBA 24 DC 393 f 69d 6731 DAA 513 c 435 ec0c
删除后我们查看下私有库
卷曲192。168 .120 .107:5000/v2/my-repository/tags/list
就会发现刚删除的那个标签不见了。但是如果在执行命令的前后车库内私有库镜像存储目录的文件大小,会发现并没有多大的变化
显然数据并没有被真的删除,我们还需要运行码头工人提供的垃圾回收命令。
垃圾回收
我们需要登录私有库所在的服务器,然后执行命令:
docker exec -it私有库的容器身份证明或者容器名sh -c 注册表垃圾收集/etc/docker/registry/config。yml
当然,也可以进入到私有库的容器中,再执行:
docker exec -it私有库的容器身份证明或者容器名嘘
注册表垃圾收集/etc/docker/registry/config。yml
这种方法特别麻烦。您只能删除标签,而不能删除存储库。删除后,blobs目录中会留下许多空文件夹。而且,如果一个存储库中有多个标签,并且这些标签的数据是相同的,那么删除一个标签就会同时删除所有标签。
虽然网上有删除私库镜像的python脚本,但我觉得并不好用。
我不会满足于此,所以自己写了一个sh脚本,先看看效果吧。
脚本中有一些人性化的提示,sh脚本易于理解和扩展。我也把剧本上传到了gitHub。有兴趣的可以下载试试。
GitHub地址:https://github.com/hushuai86/docker-delete
下载运行:
#首先将脚本下载到/usr/local/bin/目录
curl https://raw . githubusercontent . com/Hu Shuai 86/docker-delete/master/docker-delete-2.0 . sh | sudo tee/usr/local/bin/docker-delete/dev/null
#授予可执行权限
chmod a x/usr/local/bin/docker-delete
#专用库镜像存储目录路径的全局环境变量(该路径是在运行专用库容器时使用-v命令将专用库容器中的/var/lib/registry目录挂载到本地计算机的路径)
# Example: /opt/data/registry是我运行容器时本地挂载私有库的镜像存储目录的目录。
echo export DOCKER _ REGISTRY _ DIR=/opt/data/REGISTRY /etc/profile
#运行专用库容器ID全局环境变量设置(运行专用库容器的ID)
#示例:89b9b3c9054ay是我的私有库容器的id
echo export DOCKER _ REGISTRY _ CONTAINER _ ID=89 B9 B3 c 9054 a /etc/profile
#使配置有效
来源/etc/配置文件
然后可以使用docker-delete命令。如果觉得剧本不舒服,可以自己编辑剧本修改。
原理解析:
(在下面的截图中,/opt/data/registry是我运行容器时本地挂载私有库映像存储目录的目录)
在专用库镜像存储目录下有两个文件夹blobs和repositories。
其中,存储库目录下有几个以镜像存储库命名的文件。
也就是说,如果你想知道哪些镜像在私有库中,只要看看这个文件夹里有哪些子文件夹就可以了。
您可以在每个镜像存储库文件夹/_ manifest/tags目录下看到该镜像有哪些标记。
但是,镜像的真实数据不在repositories目录中,而是以数据块的形式存储在blobs目录中。一个映像被划分成多个数据块,即执行垃圾收集命令时输出的“标记blob …”关系,映像和数据块之间的关系在repositories/images中。
存储库/_ manifests/revisions/Sha256/目录中的sha 256值。
目录下有一个以sha256值命名的链接文件,内容就是sha256值。
经过测试,我发现只要删除这个链接文件,然后在私有库容器中执行垃圾收集命令 registry garbage-collect/etc/docker/registry/config . yml ,那么这个sha256值关联的blobs就会被完全删除。
但是,一个镜像可能有很多标签,那么与这个sha256值相关联的blobs数据属于哪个标签呢?
当我们进入镜像的某个tag/index/sha256/目录时,我们会发现一个以sha256 value命名的文件夹,这个sha256 value存在于之前的修订版/sha256/下。该文件夹下还有一个链接文件,其中保存了sha256值。
所以按照我的理解,当我们调用docker提供的API删除一个标签的时候,我们会得到这个镜像的标签/索引/sha256/sha256值/链接文件中的sha256值,然后看看是否还有其他标签与这个sha256值相关联。如果是这样,就删除这个标签文件夹。如果没有,那么在删除这个标签的文件时,revisions/sha256/目录下对应sha256的链接文件也会被删除。在这种情况下,当在容器中执行垃圾收集命令时,与该sha256值相关联的blobs数据将被完全删除。
特别注意:
完全删除图像数据后,您需要重新启动私有库容器。如果你不重启它,当你把图像推送到私有库时,你将总是输出已经存在的层,这似乎是被推上去的。但是,如果您删除本地映像,然后再提取它,将会报告一个错误。当然,我写的剧本里有这一步。
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。如有错误或不足之处,请不吝赐教。