获取运行给定图像版本的容器

Naf*_*Kay 2 docker

我需要管理我的服务器的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   
Run Code Online (Sandbox Code Playgroud)

我还可以使用以下内容获取本地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
Run Code Online (Sandbox Code Playgroud)

基于以上信息,我可以断定,我可以rmiubuntu:12.04.5,这不再需要为任何基于其上运行.

使用命令行工具解析这种--filter方法ps很糟糕,而且这种方法似乎无法让我根据图像名称进行搜索.我无法看到输出更易于机器读取的列表,因此我可以使用脚本或其他东西来解析旧图像.

Docker是否有办法在填充磁盘之前清理旧的未使用的映像?这似乎是谁自动化发布组织的一个大问题,所以我假设有在事实上管理这个的一种方式.我在Ubuntu 14.04主机上使用最新的Docker 1.6.

jwo*_*der 6

我无法看到输出更易于机器读取的列表,因此我可以使用脚本或其他东西来解析旧图像.

双方docker psdocker images有一个-q选项,使他们只能输出哈希值,而不是表的列表.将此与docker inspect模板和一些常见的shell实用程序相结合,可以为我们提供:

#!/bin/bash
comm -23 <(docker images -q --no-trunc | sort) \
         <(docker ps -aq | xargs docker inspect -f '{{.Image}}' | sort -u)
Run Code Online (Sandbox Code Playgroud)

它输出所有未使用图像的哈希值.