選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (500 個字)

每日小知識#3 - image 是什麼?

photo-1546582432-151682ea450d-2

什麼是 Docker Image
Image 這東西可是 Docker 裡面相當重要的一個要素,沒有它你就建立不了 Container

而正確來說 Image 是 Layers of Image …
如果以盤子比喻的話,大概就是 一疊盤子
沒錯,就是你會在資料結構的書上看到的堆疊結構那個樣子,
不是說你這個人是盤子喔,別誤會。

這一疊的盤子,我們就稱之為 Layers of Image
每一面盤子就是一個 Image layer,內容物為一個含有多個 File 的 Filesystem,
這每一面盤子最後會透過一個叫作 Union File System 的技術
將每一個 Layer 的 Image 結合再一起,讓你「 看起來 」是只有一個 Filesystem。

這每一層的 Layer 又是怎麼形成的呢?
還記得我們在專案中使用到的 Dockerfile 嗎?
它的每一條指令,從 FROM, RUN, COPY, … ENTRYPOINT 等等,
都會先建立一個 暫時的 container ,執行完指令之後,把結果記錄成一個 image layer,
而最後最後的結果,其實就是最後一個指令執行完的 image layer 的 ID,
如果想看完整的一個 image 總共有多少 layers,可以透過 docker history 來看到(e.g. docker history ubuntu)

重點來了,在我們執行 docker run 的時候,就會在這一個 Layers of image 的頂端建立一個 可讀寫 的 layer,
這意味著了那一層之外,所有以下的 Image layer 都是 唯讀 的,
因此這些唯讀的 Image Layer 在不同的 container 間是 可以共用 的,
更代表著只要是相同內容的 Image layer,就只需要下載一份即可,
這也是為什麼有時候在 docker pull 或是 docker build 的時候可以看到 use cache
因為已經有相同內容物的 Image layer 存在了,直接拿來使用就好了。

結論: container 是一個 process,而它能使用的 filesystem 就是所有唯讀的 image layer 組合起來,再加上它自己可讀寫的那一層。

每日小知識#4 - Docker Image
每日小知識#2 - Docker 是什麼?

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/17, 週五

Captcha 圖像