如何使用“docker images”命令按大小对Docker图像进行排序?

vhmi4jdf  于 2023-01-08  发布在  Docker
关注(0)|答案(8)|浏览(427)

要查看我安装的所有图像,我运行docker images。我想按“SIZE”对所有图像进行排序。我该怎么做呢?更一般地说,如何按任何参数对返回的图像进行排序,例如“CREATED”

mrphzbgm

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
g52tjvyc

g52tjvyc2#

没有一个答案正确显示了如何对实际的docker images命令进行排序。
下面是一个真正的解决方案:

docker images | sort -k7 -h

注:这是第7列,而不是第5列,因为我们必须跳过由时间单位和“之前”创建的额外2个空格(例如,在以下内容中按“1.8GB”而不是“周”排序:“名称标签哈希7周前1. 8GB”)。这个技巧最早发布在this answer下的一条评论中。

uqjltbpv

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

yqyhoc1h

yqyhoc1h4#

如果使用PowerShell,您可以按任意字段(如repo/image name)排序,如下所示:

docker images --format="{{json .}}" |
    ConvertFrom-Json |
    Sort-Object Repository |
    Select-Object Repository,Tag,ID,CreatedSince,Size |
    Format-Table

但遗憾的是,它不能很好地处理Size等人类可读的字段,因此很遗憾,它没有回答您问题的更具体的第一部分。

i7uaboj4

i7uaboj45#

根据docker-images的docker文档尝试--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
uqdfh47h

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/

8oomwypt

8oomwypt7#

要按任何列排序,请将sort_column设置为从14的数字。要按降序排序,请将desc设置为1

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排序****降序

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排序****升序

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
raogr8fs

raogr8fs8#

  • 尝试建议编辑,但SO不允许,说队列已满。*

基于@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

相关问题