如何检查Docker容器中未使用的镜像?

jaxagkaj  于 2023-06-29  发布在  Docker
关注(0)|答案(5)|浏览(530)

我有3个容器,但我有很多图像,你可以看到在图像。

  • ️ docker images*
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
sscportalsmb_smb-portal        latest              ad0854c799f6        12 days ago         17.6MB
bheng_web                      latest              d5a0ea011c0a        2 weeks ago         182MB
<none>                         <none>              957c22ababec        2 weeks ago         182MB
docker_web                     latest              70b443ed0495        2 weeks ago         182MB
bheng_app                      latest              509d58a68224        2 weeks ago         756MB
docker_app                     latest              509d58a68224        2 weeks ago         756MB
mysql                          5.6                 96dc914914f5        2 weeks ago         299MB
sscportalapi_ssc-portal-api    latest              e8295f9cb5f1        4 weeks ago         160MB
sscportaladmin_admin-portal    latest              fd141ceba4d6        4 weeks ago         17.7MB
mysql                          latest              5fac85ee2c68        5 weeks ago         408MB
redis                          latest              1fb7b6c8c0d0        6 weeks ago         107MB
alpine                         3.6                 76da55c8019d        2 months ago        3.97MB
keymetrics/pm2-docker-alpine   6                   4a09bfc067d6        4 months ago        75.3MB
andrewmclagan/nginx-hhvm       latest              ec6cc741eb0e        7 months ago        580MB
nginx                          1.10                0346349a1a64        7 months ago        182MB
tutum/haproxy                  latest              33bc771bec1e        17 months ago       232MB
php                            7.0.4-fpm           81d7a2fdc6dc        20 months ago       494MB

我不确定这是否正常。
我如何检查我不使用的图像并相应地删除它们?

pgky5nke

pgky5nke1#

上面的答案帮助我们找到并删除悬空图像,但不是未使用的。
所以要获取机器上所有未使用的docker镜像
1.获取属于正在运行的容器(未停止或退出)的所有映像
1.获取机器上的所有图像
1.然后从步骤2过滤步骤1中的图像
下面是一个基本的shell脚本,它可以帮助你做到这一点

runningImages=$(docker ps --format {{.Image}})
docker images --format {{.Repository}}:{{.Tag}} | grep -v "$runningImages"

在删除未使用的图像(而不是悬挂的图像)之前,请确保将它们列出,然后决定手动删除哪一个。

px9o7tmv

px9o7tmv2#

您可以使用以下命令查找未使用的图像:

docker images -f dangling=true

还有他们的身份证

docker images -q -f dangling=true

如果您想删除它们:

docker rmi $(docker images -q -f dangling=true)
nx7onnlm

nx7onnlm3#

Docker不久前为此添加了特殊命令:docker image prune-> https://docs.docker.com/engine/reference/commandline/image_prune/用于删除未使用的映像,docker container prune-> https://docs.docker.com/engine/reference/commandline/container_prune/用于停止的容器。

bd1hkmkf

bd1hkmkf4#

比较docker imagesdocker ps的结果,您应该能够理解在运行的容器中使用了哪些映像。docker ps输出的第二列实际上是所使用的图像。

nbysray5

nbysray55#

使用docker image prune前检查

docker image prune只删除没有任何容器的dangling镜像。
检查受影响图像的脚本:

runningImages=$(docker ps -a --format "< {{.Image}} >")
docker images -f dangling=true --format "table < {{.Repository}}:{{.Tag}} >\t< {{.ID}} >\t" | grep -v "$runningImages"

使用docker image prune -a前检查

docker image prune -a删除所有没有容器的镜像。
检查受影响图像的脚本:

runningImages=$(docker ps -a --format "< {{.Image}} >")
docker images --format "table < {{.Repository}}:{{.Tag}} >\t< {{.ID}} >\t" | grep -v "$runningImages"

(It对@GPuri的答案进行了一些改进和修复,例如,列出了所有容器中的图像,不仅运行了< >的图像,而且还检查了由图像的ID而不是name:tag创建的容器。

相关问题