Docker进阶与实战
上QQ阅读APP看书,第一时间看更新

3.2.1 列出本机的镜像

下面的命令可以列出本地存储中镜像,也可以查看这些镜像的基本信息。

$ docker images
REPOSITORY  TAG                 IMAGE ID          CREATED           VIRTUAL SIZE
ubuntu      14.04.2              2103b00b3fdf      5 months ago      188.3 MB
ubuntu      latest               2103b00b3fdf      5 months ago      188.3 MB
ubuntu      trusty               2103b00b3fdf      5 months ago      188.3 MB
ubuntu      trusty-20150228.11   2103b00b3fdf      5 months ago      188.3 MB
ubuntu      14.04                2d24f826cb16      5 months ago      188.3 MB
busybox     buildroot-2014.02    4986bf8c1536      7 months ago      2.43 MB
busybox     latest               4986bf8c1536      7 months ago      2.43 MB

此外,通过--help参数还可以查询docker images的详细用法,如下:

$ docker images --help
Usage: docker images [OPTIONS] [REPOSITORY]
List images
    -a, --all=false      Show all images (default hides intermediate images)
    --digests=false      Show digests
    -f, --filter=[]       Filter output based on conditions provided
    --help=false         Print usage
    --no-trunc=false     Don't truncate output
    -q, --quiet=false    Only show numeric IDs

其中,--filter用于过滤docker images的结果,过滤器采用key=value的这种形式。目前支持的过滤器为dangling和label。--filter"dangling=true"会显示所有“悬挂”镜像。“悬挂”镜像没有对应的名称和tag,并且其最上层不会被任何镜像所依赖。docker commit在一些情况下会产生这种“悬挂”镜像。下面第一条命令产生了一个“悬挂”镜像,第二条命令则根据其特点过滤出该镜像了。图3-2中的d08407d841f3就是这种镜像。

$ docker commit 0d6cbf57f660
$ docker images  --filter "dangling=true"
REPOSITORY     TAG         IMAGE ID            CREATED             VIRTUAL SIZE
<none>        <none>       d08407d841f3        3 hours ago         2.43 MB

在上面的命令中,--no-trunc参数可以列出完整长度的Image ID。若添加参数-q则会只输出Image ID,该参数在管道命令中很有用处。一般来说悬挂镜像并不总是我们所需要的,并且会浪费磁盘空间。可以使用如下管道命令删除所有的“悬挂”镜像。

$ docker images  --filter "dangling=true" -q  | xargs  docker rmi
Deleted: 8a39aa048fe3f2e319651b206073b2a2e437dcf85c15fedb6f437cfe86105145

这里的--digests比较特别,这个参数是伴随着新版本的Docker Registry V2(即Distribution)产生的,在本书接下来的第4章会详细说明。

按照Docker官方路标和最近的动作,Docker只会保留最核心的image相关命令和功能,因此那些非核心功能就会被删除。比如--tree和--dot已经从Docker 1.7中删掉。官方推荐使用dockerviz见https://github.com/justone/dockviz。工具分析Docker image。执行以下命令,可以图形化地展示Docker image的层次关系。

# dockviz images -d | dot -Tpng -o images.png

执行结果如图3-2所示,可以看到,同一个仓库中的镜像并不一定要有特别的关系,比如ubuntu:14.04和ubuntu:14.04.2之间就没有共享任何层。

图3-2 Docker image层次关系