昨天跟大家介紹了什麼是映像檔,原來映像檔就是由一層一層的映像層 (layer) 所堆疊而成。有人說他是千層蛋糕,有人說是堆積木,也有人說是漢堡,基本上都是在形容映像層的層層堆疊。
我們今天就來看看每個映像檔中的映像層,讓大家更能明白映像層的堆疊。
標題聳動了點,也不是什麼不堪入目的東西,這裡我們會透過 history
指令,查看特定映像檔,每層映像層的資訊。
> docker image history ruby:latest
IMAGE CREATED CREATED BY SIZE COMMENT
9b7bf37095d7 3 days ago /bin/sh -c #(nop) CMD ["irb"] 0B
<missing> 3 days ago /bin/sh -c mkdir -p "$GEM_HOME" && chmod 177… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/bundl… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV BUNDLE_SILENCE_ROOT_W… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV GEM_HOME=/usr/local/b… 0B
<missing> 3 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 63.1MB
<missing> 3 days ago /bin/sh -c #(nop) ENV RUBY_DOWNLOAD_SHA256=… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV RUBY_VERSION=3.2.2 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV RUBY_MAJOR=3.2 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 3 days ago /bin/sh -c set -eux; mkdir -p /usr/local/et… 45B
<missing> 4 days ago /bin/sh -c set -ex; apt-get update; apt-ge… 560MB
<missing> 4 days ago /bin/sh -c apt-get update && apt-get install… 183MB
<missing> 4 days ago /bin/sh -c set -eux; apt-get update; apt-g… 48.5MB
<missing> 4 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 4 days ago /bin/sh -c #(nop) ADD file:f9dd2b1cc0ba261ac… 139MB
這是查看 ruby:latest
這個映像檔的資訊,上面寫著這個映像檔是由哪些映像層 ( IMAGE ) 由下往上堆疊而成,簡單說明:
在 CREATED_BY 欄位的資料,都因為資訊過多過長,導致被截斷了。如果想要看完整的內容,可以使用 --no-trunc
讓所有欄位的資訊都顯示完整資訊:
> docker image history ruby:latest --no-trunc
這時你會發現,因為所有訊息都顯示出來,導致版面很歪…
別擔心,我們可以用 --format
只顯示我們想要的特定欄位:
> docker image history ruby:latest --format "{{.CreatedBy}}" --no-trunc
( 內容太多,就不貼了 )
在 --format
後面接的參數是 Go Template 的格式,再多示範一個:
> docker image history ruby --format "{{.ID}} => {{.Size}}" --no-trunc
sha256:9b7bf37095d74a4dc7f8c6deb21e600a540731f68c5da0f1ef5f4dfd1e23aeae => 0B
<missing> => 0B
.
.
略
經過 image history
的展示,我想大家應該都對映像檔跟映像層之間的關係,更加緊密,更加熟悉了吧~
突然想到一個比喻,希望大家都有玩過 LF2。每個角色的技能都是一個映像檔,可以一直尻一直尻,就像容器一直建立一直建立。那技能 ( 映像檔 ) 通常都是透過多個按鍵 ( 映像層 ) 組合 ( 堆疊 )而成,像是冰人的抽冰劍,D 下 J,這個抽冰劍映像檔是由 D 下 J 三個層建立的。
好了,快離題了,明天我們會透過映像層慢慢把視野拉開到映像檔到容器,希望能讓大家更明白映像層、映像檔、容器,之間的構成關係。