Docker 映像檔(Image)由是一層一層的 Layer 推疊起來的,因為要了解映像檔最好的方式就是看每一層 Layer 的資訊。

而 Docker 有提供 docker history 指令,可讓我們查詢此映像檔每一層 Layer 的資訊。

範例

等等要使用的映像檔是之前寫 如何容器化 ASP.NET Core 網站 使用的範例,別名是 myapp,如下圖。

images lsimages ls

現在要來檢查 myapp 每一層 layer 的資訊,請輸入 docker history myapp,就會看到如下圖的 layer 歷史訊息。

docker_historydocker_history

上圖已經列出 myapp 每一層 layer 的歷史訊息。 但是會發現 Created By 的字被截斷了,這樣還是沒辦法知道裡面到底做了什麼事情。 這時候我們要用 docker history 其他的參數來讓文字不要被截斷。

docker history 其他參數的應用

因為 Created By 的內容太長了,我現在只想要顯示 Created By 這個欄位。 我們可以使用 --format 來決定我只要顯示 Created By 這個欄位,而 --format 後面的參數是吃 Go Template 的格式來設定。 例如輸入 docker history myapp --format "{{.ID}}: {{.CreatedBy}}" 指令,就只會顯示 Image IDCreated By 資訊,如下圖。 (–format 能設定的欄位請參考 Format the output)

docker history formatdocker history format

接下來要使用 --no-trunc 這個參數,讓輸出的文字不要被截斷,請輸入指令 docker history myapp --format "{{.CreatedBy}}" --no-trunc ,會看到如下圖畫面。

--no-trunc--no-trunc

這樣就完全看出每一層的 layer 到底做了哪些事情。 例如劃紅線的部分就是我把檔案放進映像檔裡面,然後再設定 ENTRYPOINT 。

延伸閱讀

[docker history command]
[Digging into Docker layers]