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 中的指令 ADD
、COPY
之外,也會看到一些 Linux 的指令,像是 addgroup --system
等等,而這些都是映像檔的成分,每一層都有它的意義存在,每一層也都會影響著下一層。
您也可以嘗試著用 docker image history
的指令去看看 redis、postgres 等等的服務有沒有什麼有趣的細節。