在OpenShift Origin

时间:2016-05-27 14:04:14

标签: docker openshift-origin

我尝试在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

3 个答案:

答案 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