我尝试在OpenShift原点上删除未使用的docker镜像。 这样做的正确方法是什么?
我试过了:
docker rmi `docker images -aq`
这删除了所有未使用的图像,但我得到了这样的内容:
<none> <none> 28e03c727eab 10 days ago 583.5 MB
172.30.xx.xx:5000/dev-mule/mule <none> d059900ab541 4 weeks ago 985.9 MB
172.30.xx.xx:5000/test-dev-mule/test-mule <none> d059900ab541 4 weeks ago 985.9 MB
<none> <none> 80ccbf3e9509 8 weeks ago 415.8 MB
<none> <none> d2d658a63eb2 8 weeks ago 1.59 MB
<none> <none> eda6efd4df85 10 weeks ago 430 MB
<none> <none> 2f0fc5db512e 10 weeks ago 711.6 MB
我有7个正在运行的容器,所以这看起来很好。使用的图像仍然在这里。
但是当我表演oc get images
时,我得到了一个非常大的图片列表:
sha256:830ed5ad3c2deab31836b1d65877c048107d0f6788daa4a36d158386000050a2 172.30.xx.xx:5000/dev-proj/proj@sha256:830ed5ad3c2deab31836b1d65877c048107d0f6788daa4a36d158386000050a2
在OpenShift Origin中删除未使用图像的正确方法是什么?
我在版本oc v1.1.6
答案 0 :(得分:6)
您应该使用oc adm prune images
命令删除未使用的图像。请注意,这将是保守的,不会删除最近更改过的图像。
有关详情,请参阅https://docs.openshift.org/latest/admin_guide/pruning_resources.html。
答案 1 :(得分:1)
我使用的半手动方式是列出图像的属性以及列表的进一步处理,如下所示:
oc get images -o jsonpath='{range .items[*]}{.dockerImageReference}{.dockerImageMetadata.Created} {.dockerImageMetadata.Size}{"\n"}{end}'
registry.access.redhat.com/jboss-datavirt-6/datavirt63-openshift@sha256:ed82847d159ff9f5e43520b3479a3b15919195c2dc86781cc85b84368d84a7742017-06-26T10:44:21Z 571015080
registry.access.redhat.com/jboss-eap-7/eap70-openshift@sha256:eddcc75d3e7fd5e25b9599a5cb72bd48b403c308e91c501f5dcc9c157ea86c4f2017-06-12T07:37:20Z 572990540
registry.access.redhat.com/jboss-webserver-3/webserver30-tomcat7-openshift@sha256:ee09a9ae44c338c39783d559367aef63ce548d8de973e09808c4c236c5dcb4852017-08-02T14:53:32Z 190637724
registry.access.redhat.com/jboss-webserver-3/webserver30-tomcat7-openshift@sha256:ee68b3072bfabacf1272b183c09a43b8116902ac722ff2fca3185235447a453f2017-05-10T10:48:06Z 256713194
...
然后,将'@'替换为图像'拉取名称'和图像ID的单独列,并按第一列和第三列应用排序,因此图像名称和日期:
oc get images -o jsonpath='\
{range .items[*]}{.dockerImageReference} \
{.dockerImageMetadata.Created} \
{.dockerImageMetadata.Size}{"\n"}{end}' \
| sed 's/@/ /' \
| sort -k1,1 -k3,3
从那里,我可以应用像grep -E 'myimage.*2016-'
等精确的过滤器。最后,我使用awk处理输出并获取oc命令:
...all the above with filters... | awk '{print "oc delete image "$2}
结果:
oc delete image sha256:2cd7c7e0443779e2a090f326d2f0daf0dbdac719e1e254e166fac5c0e107708e
oc delete image sha256:1d7e028ff3a3439de4a18dad307d5099db64f4e5a12819e7cf2ff72ee21e39d5
oc delete image sha256:9f31e9f2a18b0ea07f2c0e503e01a784e9365db485f163b6699799a4b53415cf
oc delete image sha256:dd97c061f076e2c1c8d368896a806056c9bc7d96d1065aca097d86959ce5130c
显然,您可以使用您选择的语言处理图像列表,解析日期并删除较旧的重复项等。
答案 2 :(得分:0)
删除不需要的docker映像:
sudo docker system prune