天天看點

Docker技術入門與實戰(第2版)3.2 檢視鏡像資訊

3.2 檢視鏡像資訊

1.?使用images指令列出鏡像

使用docker images指令可以列出本地主機上已有鏡像的基本資訊。

例如,下面的指令列出了上一小節中下載下傳的鏡像資訊:

$ docker images

repository               tag            image id        created         size

ubuntu                   16.04          2fa927b5cdd3    2 weeks ago     122 mb

ubuntu                   latest         2fa927b5cdd3    2 weeks ago     122 mb

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鏡像标簽:

$ docker tag ubuntu:latest myubuntu:latest

再次使用docker images列出本地主機上鏡像資訊,可以看到多了一個擁有myubuntu: latest标簽的鏡像:

repository       tag       image id          created         size

ubuntu           16.04     2fa927b5cdd3      2 weeks ago     122 mb

ubuntu           latest    2fa927b5cdd3      2 weeks ago     122 mb

myubuntu         latest    2fa927b5cdd3      2 weeks ago     122 mb

ubuntu           14.04     8f1bd21bd25c      2 weeks ago     188 mb

之後,使用者就可以直接使用myubuntu:latest來表示這個鏡像了。

細心的讀者可能注意到,這些myubuntu:latest鏡像的id跟ubuntu:latest完全一緻。它們實際上指向同一個鏡像檔案,隻是别名不同而已。docker tag指令添加的标簽實際上起到了類似連結的作用。

3.?使用inspect指令檢視詳細資訊

使用docker inspect指令可以擷取該鏡像的詳細資訊,包括制作者、适應架構、各層的數字摘要等:

$ docker inspect ubuntu:14.04

[

    {

        "id": "sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342",

        "repotags": [

            "ubuntu:14.04"

        ],

        "repodigests": [],

        "parent": "",

        "comment": "",

        "created": "2016-05-27t14:13:04.103044105z",

        "container": "eb8c67a3bff6e93658d18ac14b3a2134488c140a1ae1205c0cfdfd49f087113f",

        "containerconfig": {

            "hostname": "fff5562e8198",

            "domainname": "",

            "user": "",

            "attachstdin": false,

            "attachstdout": false,

            "attachstderr": false,

            "tty": false,

            "openstdin": false,

            "stdinonce": false,

            "env": [],

            "cmd": [

                "/bin/sh",

                "-c",

                "#(nop) cmd [\"/bin/bash\"]"

            ],

            "image": "f9cdf71c33f14c7af4b75b651624e9ac69711630e21ceb289f69e0300e90c57d",

            "volumes": null,

            "workingdir": "",

            "entrypoint": null,

            "onbuild": null,

            "labels": {}

        },

        "dockerversion": "1.9.1",

        "author": "",

        "config": {

                "/bin/bash"

        "architecture": "amd64",

        "os": "linux",

        "size": 187957543,

        "virtualsize": 187957543,

        "graphdriver": {

            "name": "aufs",

            "data": null

        "rootfs": {

            "type": "layers",

            "layers": [

                "sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c",

                "sha256:dc109d4b4ccf69361d29292fb15e52707507b520aba8cd43a564182f26725d74",

                "sha256:9f7ab087e6e6574225f863b6013579a76bd0c80c92fefe7aea92c4207b6486cb",

                "sha256:6f8be37bd578bbabe570b0181602971b0ea3509b79a1a3dd5528a4e3fc33dd6f",

                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"

            ]

        }

    }

]

傳回的是一個json格式的消息,如果我們隻要其中一項内容時,可以使用參數-f來指定,例如,擷取鏡像的architecture:

$ docker inspect -f {{".architecture"}}

amd64

4.?使用history指令檢視鏡像曆史

既然鏡像檔案由多個層組成,那麼怎麼知道各個層的内容具體是什麼呢?這時候可以使用history子指令,該指令将列出各層的建立資訊。

例如,檢視ubuntu:14.04鏡像的建立過程,可以使用如下指令:

$ docker history ubuntu:14.04

image         created      created by                                     size comment

8f1bd21bd25c  2 weeks ago  /bin/sh -c #(nop) cmd ["/bin/bash"]            0 b

<missing>     2 weeks ago  /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/  1.895 kb

<missing>     2 weeks ago  /bin/sh -c rm -rf /var/lib/apt/lists/*         0 b

<missing>     2 weeks ago  /bin/sh -c set -xe   && echo '#!/bin/sh' > /u  194.5 kb

<missing>     2 weeks ago  /bin/sh -c #(nop) add file:aca501360d0937bc49  187.8 mb

注意過長的指令被自動截斷了,可以使用前面提到的--no-trunc選項來輸出完整

指令。