跳至主要内容

4.4 層層堆疊的映像檔

透過 docker image history 這個指令來感受一下層層堆疊的映像檔是什麼概念,就以 nginx 這個映像檔來試試看。

$ docker image history nginx:latest
IMAGE CREATED CREATED BY SIZE COMMENT
b692a91e4e15 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 4.61kB
<missing> 4 weeks ago /bin/..... 1.04kB
<missing> 4 weeks ago /bin/..... 1.96kB
<missing> 4 weeks ago /bin/..... 1.2kB
<missing> 4 weeks ago /bin/..... 61.1MB
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago /bin/..... 0B
<missing> 4 weeks ago CMD ["bash"] 0B
<missing> 4 weeks ago ADD file 80.4MB

可以看到每一個層級由下而上堆疊起來,到最後形成一個映像檔並且賦予 ID b692a91e4e1。

而這個歷史紀錄並不是來自容器的歷史紀錄,而是這個映像檔在建置時的歷史紀錄,而在每一層都帶有不同的指令,有些是執行指令,有些是加入檔案,所以才會有 0B 的層級,也有 80.4MB 的層級。

在自己的終端機中可以看到除了 Dockerfile 中的指令 ADDCOPY 之外,也會看到一些 Linux 的指令,像是 addgroup --system 等等,而這些都是映像檔的成分,每一層都有它的意義存在,每一層也都會影響著下一層。

您也可以嘗試著用 docker image history 的指令去看看 redis、postgres 等等的服務有沒有什麼有趣的細節。