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選項來輸出完整
指令。