什麼是容器映像檔

建立容器所依據的唯讀範本。把應用程式的執行檔、函式庫、設定等檔案分層疊加,並附上要啟動的指令等設定,不包含作業系統的核心。由 Dockerfile 等建置,存放在登錄檔(registry)中發布。可用儲存庫名稱與標籤(例:web:1.4)指定,也可用由內容計算出的摘要(sha256:…)唯一指定。相同的層由多個映像檔共用。

日文名稱: コンテナイメージ

「容器映像檔」出現在1領域的3道練習題中(雲端與容器基礎等)。

這個名詞所屬的領域: 雲端與容器基礎

層的機制

Dockerfile 的指令中會改變檔案的指令(RUN、COPY 等)各自成為1層。層以由內容計算出的摘要識別,因此使用同一基礎映像檔的映像檔之間,該層的下載與磁碟都只需1份並共用。即使在後面的層刪除檔案,前面層的內容仍留在映像檔中,因此大型暫存檔要在同一個指令內刪除,或以多階段建置使其不進入最終映像檔。

標籤與摘要

標籤是 web:1.4 或 latest 這類由人取的名稱,之後可以改貼到別的映像檔上。摘要是由映像檔內容計算出的值,內容只要有1位元不同就會改變。在正式環境或需要確實使用與測試相同的東西時,以摘要指定。

做出小而安全的映像檔

不放入執行時不需要的編譯器與套件管理工具,映像檔就會變小、拉取變快,漏洞的對象也減少。以多階段建置把建置用與執行用的階段分開,是代表性的方法。機密值不放進映像檔,而是在啟動時傳入。

練習容器映像檔的題目

關於容器映像檔與容器的關係,下列何者正確?

  1. A停止容器時,在容器內變更的內容會自動寫回映像檔,覆蓋原本的映像檔
  2. B映像檔是唯讀的範本,可從1個映像檔啟動多個各自擁有可寫入層的容器
  3. C從1個映像檔同時只能啟動1個容器,要啟動第2個,必須事先以別的名稱複製映像檔
查看答案與解析

正確答案:B. 映像檔是唯讀的範本,可從1個映像檔啟動多個各自擁有可寫入層的容器

映像檔是彙整執行應用程式所需檔案與設定的唯讀範本,容器則是由映像檔建立的執行單位。建立容器時,會在映像檔的各層之上疊加該容器專用的可寫入層。因此可從1個映像檔啟動許多容器,各容器中的變更不會影響其他容器或映像檔。若想把變更保留為映像檔,一般做法是修改 Dockerfile 並重新建置映像檔。

在 Kubernetes 的 Deployment 中,把 Pod 範本中的容器映像檔改成新版本。在預設的更新方式(RollingUpdate)下發生的事,下列何者正確?

  1. A建立新的 ReplicaSet,一邊增加新版本的 Pod 一邊減少舊版本的 Pod。舊的 ReplicaSet 以 Pod 數為0的狀態保留,供回復使用
  2. B在不重新建立 Pod 的情況下,就地把執行中 Pod 內的容器映像檔換成新版本,因此 Pod 的IP位址與名稱都不會改變
  3. C先同時刪除所有舊版本的 Pod,再一起建立新版本的 Pod,因此更新期間服務會暫時停止
查看答案與解析

正確答案:A. 建立新的 ReplicaSet,一邊增加新版本的 Pod 一邊減少舊版本的 Pod。舊的 ReplicaSet 以 Pod 數為0的狀態保留,供回復使用

Pod 範本改變時,Deployment 會為新範本建立 ReplicaSet,一邊確認新的 Pod 已準備就緒,一邊逐步減少舊 ReplicaSet 的 Pod。因此在更新期間,也有一定數量的 Pod 持續處理要求。舊的 ReplicaSet 會以 Pod 數為0的狀態保留,所以可用 kubectl rollout undo 回到前一版。先刪除全部 Pod 再重新建立的方式是 Recreate,只在明確指定時使用。

常見問題

映像檔與容器有什麼不同?

映像檔是唯讀的範本,容器是由它建立、執行中(或已停止)的實體。1個映像檔可以建立許多容器,每個容器各附有專用的可寫入層。這類似程式檔案與行程的關係。

使用 latest 標籤就一定是最新版嗎?

latest 是沒有特別意義的一般標籤,只是省略標籤時使用的預設名稱,除非有人改貼,否則不一定指向新版本。想固定版本時,請以具體的標籤或摘要指定。

出現「容器映像檔」的題目(3題)

  1. 關於容器映像檔與容器的關係,下列何者正確?
  2. 在 Kubernetes 的 Deployment 中,把 Pod 範本中的容器映像檔改成新版本。在預設的更新方式(RollingUpdate)下發生的事,下列何者正確?
  3. 以 CI/CD 管線建置的容器映像檔,在預備(staging)環境中測試並合格了。把這個映像檔發布到正式環境的方法,下列何者最適當?

相關名詞

Kubernetes Pod CI/CD(持續整合與持續交付) 環境變數 不可變基礎設施 可用區域 可觀測性 共同責任模型 自動擴展 物件儲存

前往名詞解釋列表