要查看我安装的所有图像,我运行docker images。我想按“SIZE”对所有图像进行排序。我该怎么做呢?更一般地说,如何按任何参数对返回的图像进行排序,例如“CREATED”
docker images
mrphzbgm1#
Docker图像支持**--格式**标记以自定义输出-〉https://docs.docker.com/engine/reference/commandline/images/#format-the-output
添加自定义格式并使用sort就可以了:
docker images --format "{{.ID}}\t{{.Size}}\t{{.Repository}}" | sort -k 2 -h
g52tjvyc2#
没有一个答案正确显示了如何对实际的docker images命令进行排序。下面是一个真正的解决方案:
docker images | sort -k7 -h
注:这是第7列,而不是第5列,因为我们必须跳过由时间单位和“之前”创建的额外2个空格(例如,在以下内容中按“1.8GB”而不是“周”排序:“名称标签哈希7周前1. 8GB”)。这个技巧最早发布在this answer下的一条评论中。
uqjltbpv3#
合理的解决方案应该是
docker images | sort -k5 -h
但这不起作用,因为docker发出空格而不是制表符。已创建该问题(https://github.com/docker/cli/issues/2406)。如果你有时间,知道去,请贡献修复:)在修复之前,您可以使用一些 Package 器脚本,如https://github.com/pixelastic/oroshi/blob/master/scripts/bin/docker-image-list
yqyhoc1h4#
如果使用PowerShell,您可以按任意字段(如repo/image name)排序,如下所示:
docker images --format="{{json .}}" | ConvertFrom-Json | Sort-Object Repository | Select-Object Repository,Tag,ID,CreatedSince,Size | Format-Table
但遗憾的是,它不能很好地处理Size等人类可读的字段,因此很遗憾,它没有回答您问题的更具体的第一部分。
Size
i7uaboj45#
根据docker-images的docker文档尝试--format表例如,按存储库名称排序
--format
docker images --format 'table {{.Repository}}\t{{.ID}}\t{{.Tag}}\t{{.Size}}' | (read -r; printf "%s\n" "$REPLY"; sort -h -k7)
输出:
REPOSITORY IMAGE ID TAG SIZE danieltobon43/pcl-docker 06a35efdd8ec 1.0-alpine3.15-dev 1.56GB danieltobon43/pcl-docker 06a35efdd8ec 1.12.1-alpine3.15-dev 1.56GB danieltobon43/pcl-docker 39415115561c 1.9.1-ubuntu20.04 5.75GB danieltobon43/pcl-docker 7369903b06b3 1.0-alpine3.15 1.27GB danieltobon43/pcl-docker d412b4ff42d5 1.12.1-alpine3.15 531MB dbscan 6416b9ed2fa1 1.0-ubuntu20.04 2.1GB dbscan f3a4fd088d94 1.0-alpine3.15 1.32GB ghcr.io/patrickhoefler/dockerfilegraph 93485687d9ab 0.7.3-alpine 44.9MB github/super-linter 385b056df558 latest 6.35GB myapp 8ccfe15f0ebd 1.0 71.9MB pcl-docker d412b4ff42d5 1.12.1-alpine3.5 531MB pcl-docker e4b28f82aab5 1.12.1-v1.2-alpine3.15 594MB vtk-docker aacf6a38b5ff 8.1.0-alpine3.5 1.11GB
uqdfh47h6#
docker image ls --format "{{.Repository}}:{{.Tag}} {{.Size}}" | awk '{if ($2~/GB/) print substr($2, 1, length($2)-2) * 1000 "MB - " $1 ; else print $2 " - " $1 }' | sed '/^0/d' | sort -n
# sample output 1.24MB - busybox:latest 206MB - registry.hub.docker.com/gentoo/portage:latest 974MB - registry.hub.docker.com/gentoo/stage3:systemd 1000MB - gentoo-distrobox:latest 24000MB - ghcr.io/fabceolin/windev:usb
来源:https://tunzor.github.io/posts/docker-list-images-by-size/
8oomwypt7#
要按任何列排序,请将sort_column设置为从1到4的数字。要按降序排序,请将desc设置为1
sort_column
1
4
desc
sort_column=4 && \ desc=0 && \ delim="$(printf '\t')" && \ { \ printf "REPOSITORY:TAG${delim}IMAGE ID${delim}CREATED${delim}SIZE\n" && \ docker images --format "{{.Repository}}:{{.Tag}}${delim}{{.ID}}${delim}{{.CreatedAt}}${delim}{{.Size}}" | \ LC_ALL=C sort -t"$delim" -k"$sort_column" -h \ $([ ${desc:-} -eq 0 ] || echo "-r"); \ } | \ column -t -s"$delim"
与一行程序相同的代码:
sort_column=4 && desc=0 && delim="$(printf '\t')" && { printf "REPOSITORY:TAG${delim}IMAGE ID${delim}CREATED${delim}SIZE\n" && docker images --format "{{.Repository}}:{{.Tag}}${delim}{{.ID}}${delim}{{.CreatedAt}}${delim}{{.Size}}" | LC_ALL=C sort -t"$delim" -k"$sort_column" -h $([ ${desc:-} -eq 0 ] || echo "-r"); } | column -t -s"$delim"
示例按SIZE排序****降序
SIZE
sort_column=4desc=1
sort_column=4
desc=1
REPOSITORY:TAG IMAGE ID CREATED SIZE android-sdk:latest 08eeb5aa5e29 2022-01-22 21:14:23 1.1GB node:13.8.0-buster f6de44b06e1f 2021-12-21 22:28:44 910MB debian:buster 58075fe9ecce 2020-09-30 02:33:47 114MB ubuntu:bionic d27b9ffc5667 2019-03-12 01:21:12 65MB hello-world:latest 4ab4c602aa5e 2018-10-11 21:21:30 1.9kB
示例按REPOSITORY:TAG排序****升序
REPOSITORY:TAG
sort_column=1desc=0
sort_column=1
desc=0
REPOSITORY:TAG IMAGE ID CREATED SIZE android-sdk:latest 08eeb5aa5e29 2022-01-22 21:14:23 1.1GB debian:buster 58075fe9ecce 2020-09-30 02:33:47 114MB hello-world:latest 4ab4c602aa5e 2018-10-11 21:21:30 1.9kB node:13.8.0-buster f6de44b06e1f 2021-12-21 22:28:44 910MB ubuntu:bionic d27b9ffc5667 2019-03-12 01:21:12 65MB
raogr8fs8#
基于@sparrowt对PowerShell解决方案的回答,我相信Size只有在打印出来时才是人类可读的,所以如果你先把它们转换成整数,你可以排序:(This是另一个答案中的相同代码,只是更改了一行。)
docker images --format="{{json .}}" | ConvertFrom-Json | # Sort-Object Repository | # ORIGINAL Sort-Object Repository, { [int]$_.Size } | # SORTING BY SIZE Select-Object Repository,Tag,ID,CreatedSince,Size | Format-Table
8条答案
按热度按时间mrphzbgm1#
Docker图像支持**--格式**标记以自定义输出-〉https://docs.docker.com/engine/reference/commandline/images/#format-the-output
添加自定义格式并使用sort就可以了:
g52tjvyc2#
没有一个答案正确显示了如何对实际的
docker images
命令进行排序。下面是一个真正的解决方案:
注:这是第7列,而不是第5列,因为我们必须跳过由时间单位和“之前”创建的额外2个空格(例如,在以下内容中按“1.8GB”而不是“周”排序:“名称标签哈希7周前1. 8GB”)。这个技巧最早发布在this answer下的一条评论中。
uqjltbpv3#
合理的解决方案应该是
但这不起作用,因为docker发出空格而不是制表符。
已创建该问题(https://github.com/docker/cli/issues/2406)。
如果你有时间,知道去,请贡献修复:)
在修复之前,您可以使用一些 Package 器脚本,如https://github.com/pixelastic/oroshi/blob/master/scripts/bin/docker-image-list
yqyhoc1h4#
如果使用PowerShell,您可以按任意字段(如repo/image name)排序,如下所示:
但遗憾的是,它不能很好地处理
Size
等人类可读的字段,因此很遗憾,它没有回答您问题的更具体的第一部分。i7uaboj45#
根据docker-images的docker文档尝试
--format
表例如,按存储库名称排序
输出:
uqdfh47h6#
来源:https://tunzor.github.io/posts/docker-list-images-by-size/
8oomwypt7#
要按任何列排序,请将
sort_column
设置为从1
到4
的数字。要按降序排序,请将desc
设置为1
与一行程序相同的代码:
示例按
SIZE
排序****降序sort_column=4
desc=1
示例按
REPOSITORY:TAG
排序****升序sort_column=1
desc=0
raogr8fs8#
基于@sparrowt对PowerShell解决方案的回答,我相信
Size
只有在打印出来时才是人类可读的,所以如果你先把它们转换成整数,你可以排序:(This是另一个答案中的相同代码,只是更改了一行。)