我需要管理我的服务器的Docker镜像缓存,以确保我不会填满磁盘。
我想获得一个当前没有被正在运行的容器使用的所有Docker镜像的列表。我可以使用以下命令获取运行Docker容器的列表:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdbe4426220a ubuntu:latest "/bin/bash" 5 days ago Running compassionate_brown
我还可以使用以下内容获取本地Docker镜像列表:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest 07f8e8c5e660 3 weeks ago 188.3 MB
ubuntu 12.04.5 ac6b0eaa3203 3 weeks ago 132.5 MB
根据以上信息,我可以得出结论:rmi
ubuntu:12.04.5
--filter
不再需要,因为没有基于它运行。
使用命令行工具解析这一点很糟糕,ps
的{{1}}方法似乎无法让我根据图片名称进行搜索。我无法看到输出更易读机器的列表,因此我可以使用脚本或其他东西来解析旧图像。
Docker是否有办法在填充磁盘之前清理旧的未使用的图像?对于自动发布版本的组织来说,这似乎是一个大问题,所以我假设 实际上是一种管理它的方法。我在最新的Docker 1.6上,在Ubuntu 14.04主机上。
答案 0 :(得分:6)
我无法看到输出更易于机器读取的列表,因此我可以使用脚本或其他东西来解析旧图像。
docker ps
和docker images
都有一个-q
选项,只能输出哈希值而不是表格列表。将其与docker inspect
's templates和一些常见的shell实用程序相结合,可以得到:
#!/bin/bash
comm -23 <(docker images -q --no-trunc | sort) \
<(docker ps -aq | xargs docker inspect -f '{{.Image}}' | sort -u)
输出所有未使用图像的哈希值。