|
|
|
|
移动端

3.2 查看镜像信息

《Docker技术入门与实战(第2版)》第3章使用Docker镜像,本章将介绍围绕镜像这一核心概念的具体操作,包括如何使用pull命令从Docker Hub仓库中下载镜像到本地,如何查看本地已有的镜像信息和管理镜像标签,如何在远端仓库使用search命令进行搜索和过滤,如何删除镜像标签和镜像文件,如何创建用户定制的镜像并且保存为外部文件。本节为大家介绍查看镜像信息。

作者:杨保华/戴王剑/曹亚仑来源:机械工业出版社|2017-04-20 17:43

【新品产上线啦】51CTO播客,随时随地,碎片化学习

3.2 查看镜像信息

1.使用images命令列出镜像

使用docker images命令可以列出本地主机上已有镜像的基本信息。

例如,下面的命令列出了上一小节中下载的镜像信息:

  1. $ docker images  
  2. REPOSITORY               TAG            IMAGE ID        CREATED         SIZE  
  3. ubuntu                   16.04          2fa927b5cdd3    2 weeks ago     122 MB  
  4. ubuntu                   latest         2fa927b5cdd3    2 weeks ago     122 MB  
  5. ubuntu                   14.04          8f1bd21bd25c    2 weeks ago     188 MB 

在列出的信息中,可以看到以下几个字段信息。

来自于哪个仓库,比如ubuntu仓库用来保存ubuntu系列的基础镜像;

镜像的标签信息,比如14.04、latest用来标注不同的版本信息。标签只是标记,并不能标识镜像内容;

镜像的ID(唯一标识镜像),如ubuntu:latest和ubuntu:16.04镜像的ID都是2fa927b5cdd3,说明它们目前实际上指向同一个镜像;

创建时间,说明镜像最后的更新时间;

镜像大小,优秀的镜像往往体积都较小。

其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。

TAG信息用来标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过TAG信息来区分发行版本,包括10.04、12.04、12.10、13.04、14.04、16.04等标签。

镜像大小信息只是表示该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像的逻辑体积之和。

images子命令主要支持如下选项,用户可以自行进行尝试。

-a, --all=true|false:列出所有的镜像文件(包括临时文件),默认为否;

--digests=true|false:列出镜像的数字摘要值,默认为否;

-f, --filter=[]:过滤列出的镜像,如dangling=true只显示没有被使用的镜像;也可指定带有特定标注的镜像等;

--format="TEMPLATE":控制输出格式,如.ID代表ID信息,.Repository代表仓库信息等;

--no-trunc=true|false:对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;

-q, --quiet=true|false:仅输出ID信息,默认为否。

其中,对输出结果进行控制的选项如-f, --filter=[]、--no-trunc=true|false、

-q, --quiet=true|false等,大部分子命令都支持。

更多子命令选项还可以通过man docker-images来查看。

2.使用tag命令添加镜像标签

为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任意添加新的标签。例如添加一个新的myubuntu:latest镜像标签:

  1. $ docker tag ubuntu:latest myubuntu:latest 

再次使用docker images列出本地主机上镜像信息,可以看到多了一个拥有myubuntu: latest标签的镜像:

  1. $ docker images  
  2. REPOSITORY       TAG       IMAGE ID          CREATED         SIZE  
  3. ubuntu           16.04     2fa927b5cdd3      2 weeks ago     122 MB  
  4. ubuntu           latest    2fa927b5cdd3      2 weeks ago     122 MB  
  5. myubuntu         latest    2fa927b5cdd3      2 weeks ago     122 MB  
  6. ubuntu           14.04     8f1bd21bd25c      2 weeks ago     188 MB 

之后,用户就可以直接使用myubuntu:latest来表示这个镜像了。

细心的读者可能注意到,这些myubuntu:latest镜像的ID跟ubuntu:latest完全一致。它们实际上指向同一个镜像文件,只是别名不同而已。docker tag命令添加的标签实际上起到了类似链接的作用。

3.使用inspect命令查看详细信息

使用docker inspect命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:

  1. $ docker inspect ubuntu:14.04  
  2. [  
  3.     {  
  4.         "Id": "sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342",  
  5.         "RepoTags": [  
  6.             "ubuntu:14.04"  
  7.         ],  
  8.         "RepoDigests": [],  
  9.         "Parent": "",  
  10.         "Comment": "",  
  11.         "Created": "2016-05-27T14:13:04.103044105Z",  
  12.         "Container": "eb8c67a3bff6e93658d18ac14b3a2134488c140a1ae1205c0cfdfd49f087113f",  
  13.         "ContainerConfig": {  
  14.             "Hostname": "fff5562e8198",  
  15.             "Domainname": "",  
  16.             "User": "",  
  17.             "AttachStdin": false,  
  18.             "AttachStdout": false,  
  19.             "AttachStderr": false,  
  20.             "Tty": false,  
  21.             "OpenStdin": false,  
  22.             "StdinOnce": false,  
  23.             "Env": [],  
  24.             "Cmd": [  
  25.                 "/bin/sh",  
  26.                 "-c",  
  27.                 "#(nop) CMD [\"/bin/bash\"]"  
  28.             ],  
  29.             "Image": "f9cdf71c33f14c7af4b75b651624e9ac69711630e21ceb289f69e0300e90c57d",  
  30.             "Volumes": null,  
  31.             "WorkingDir": "",  
  32.             "Entrypoint": null,  
  33.             "OnBuild": null,  
  34.             "Labels": {}  
  35.         },  
  36.         "DockerVersion": "1.9.1",  
  37.         "Author": "",  
  38.         "Config": {  
  39.             "Hostname": "fff5562e8198",  
  40.             "Domainname": "",  
  41.             "User": "",  
  42.             "AttachStdin": false,  
  43.             "AttachStdout": false,  
  44.             "AttachStderr": false,  
  45.             "Tty": false,  
  46.             "OpenStdin": false,  
  47.             "StdinOnce": false,  
  48.             "Env": [],  
  49.             "Cmd": [  
  50.                 "/bin/bash"  
  51.             ],  
  52.             "Image": "f9cdf71c33f14c7af4b75b651624e9ac69711630e21ceb289f69e0300e90c57d",  
  53.             "Volumes": null,  
  54.             "WorkingDir": "",  
  55.             "Entrypoint": null,  
  56.             "OnBuild": null,  
  57.             "Labels": {}  
  58.         },  
  59.         "Architecture": "amd64",  
  60.         "Os": "linux",  
  61.         "Size": 187957543,  
  62.         "VirtualSize": 187957543,  
  63.         "GraphDriver": {  
  64.             "Name": "aufs",  
  65.             "Data": null  
  66.         },  
  67.         "RootFS": {  
  68.             "Type": "layers",  
  69.             "Layers": [  
  70.                 "sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c",  
  71.                 "sha256:dc109d4b4ccf69361d29292fb15e52707507b520aba8cd43a564182f26725d74",  
  72.                 "sha256:9f7ab087e6e6574225f863b6013579a76bd0c80c92fefe7aea92c4207b6486cb",  
  73.                 "sha256:6f8be37bd578bbabe570b0181602971b0ea3509b79a1a3dd5528a4e3fc33dd6f",  
  74.                 "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"  
  75.             ]  
  76.         }  
  77.     }  

返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用参数-f来指定,例如,获取镜像的Architecture:

  1. $ docker inspect -f {{".Architecture"}}  
  2. amd64 

4.使用history命令查看镜像历史

既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history子命令,该命令将列出各层的创建信息。

例如,查看ubuntu:14.04镜像的创建过程,可以使用如下命令:

  1. $ docker history ubuntu:14.04  
  2. IMAGE         CREATED      CREATED BY                                     SIZE COMMENT  
  3. 8f1bd21bd25c  2 weeks ago  /bin/sh -c #(nop) CMD ["/bin/bash"]            0 B  
  4. <missing>     2 weeks ago  /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/  1.895 kB  
  5. <missing>     2 weeks ago  /bin/sh -c rm -rf /var/lib/apt/lists/*         0 B  
  6. <missing>     2 weeks ago  /bin/sh -c set -xe   && echo '#!/bin/sh' > /u  194.5 kB  
  7. <missing>     2 weeks ago  /bin/sh -c #(nop) ADD file:aca501360d0937bc49  187.8 MB 

注意过长的命令被自动截断了,可以使用前面提到的--no-trunc选项来输出完整命令。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Linux标准教程

本书以Linux Redhat 9.0中文版为基础编写,从易用性和实用性角度出发主要介绍Linux Redhat 9.0中文版的应用知识,通过本书的学习,相信初中...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊