映像檔、容器、倉庫:三個核心概念
先從廚房說起
你開了一家電商,每到週年慶就要大量招募臨時客服人員。
新人第一天報到,你不可能讓他們自己摸索系統。你會準備一份標準操作手冊:第 1 頁到第 20 頁是系統操作說明,第 21 頁是常見問題,第 22 頁是話術範本。
每個新人拿到同一份手冊,按照同樣的步驟學習,上手速度和服務品質就能標準化。
Docker 的三個核心概念,和這件事非常像。
三個核心概念
一、映像檔(Image)=食譜 / 操作手冊
映像檔是一份「靜態的說明書」。
它記錄了:
- 這個程式需要什麼作業系統環境
- 需要安裝哪些套件
- 程式碼放在哪裡
- 啟動時執行什麼指令
映像檔本身不會動。它是一個範本,一個藍圖,一份食譜。
就像你的客服操作手冊——它只是一本書,不是實際在工作的人。
二、容器(Container)=實際在跑的實例
容器是「根據映像檔啟動起來、正在執行的程式」。
同一份映像檔,可以同時啟動 10 個容器,就像同一份操作手冊,可以同時訓練 10 個客服人員。
每個容器:
- 彼此獨立,互不干擾
- 可以隨時啟動、停止、刪除
- 停止之後,映像檔還在,隨時可以再啟動一個新容器
就像客服人員下班了,操作手冊還在書架上,下次還可以用。
三、倉庫(Registry)=映像檔的圖書館
倉庫是存放和分發映像檔的地方。
最有名的公開倉庫是 Docker Hub,就像 App Store 或是 GitHub——工程師把打包好的映像檔推送(push)上去,其他人或其他伺服器可以拉取(pull)下來使用。
公司也可以架設私有倉庫,確保內部的映像檔不會公開到網路上。
用一張表整理
| 概念 | 類比 | 特性 |
|---|---|---|
| 映像檔(Image) | 食譜 / 操作手冊 | 靜態、可複製、是範本 |
| 容器(Container) | 按照食譜煮出來的菜 / 實際工作的客服 | 動態、可啟動停止、彼此隔離 |
| 倉庫(Registry) | 食譜書圖書館 / Docker Hub | 集中存放,可推送和拉取 |
容器的生命週期
一個容器從誕生到消亡,大概長這樣:
[Registry] ──pull──▶ [Image] ──run──▶ [Container](執行中)
│
stop / restart
│
[Container](停止)
│
remove
│
(消失)
用電商場景來說明:
- pull:工程師從 Docker Hub 把「商品頁 v2.3」這個映像檔下載到伺服器
- run:啟動一個容器,商品頁開始對外服務
- stop:發現有 Bug,先把容器停下來(服務暫停)
- remove:確認沒問題後,刪除舊容器(映像檔還在,可以再啟動)
一個映像檔可以跑幾個容器?
理論上,只要伺服器資源夠,同一個映像檔可以同時跑很多個容器。
這就是所謂的水平擴展(scaling):週年慶流量暴增,工程師可以把商品頁的容器從 2 個擴到 20 個,流量消退後再縮回去。
這也是雲端服務最強大的能力之一——你只需要一份映像檔,就能彈性應對各種流量規模。
容器 vs 虛擬機(VM)
你可能聽過「虛擬機」(Virtual Machine, VM)這個詞。容器和虛擬機都能隔離環境,但有個關鍵差異:
| 容器 | 虛擬機 | |
|---|---|---|
| 啟動速度 | 幾秒 | 幾分鐘 |
| 佔用資源 | 輕量 | 重 |
| 隔離程度 | 共用 OS kernel | 完全獨立 |
| 比喻 | 共用廚房但各自烹飪 | 各自擁有一整棟房子 |
現代電商平台幾乎都用容器,因為它快、輕、好管理。
練習題
AI 協作:學了這個,跟 AI 怎麼配合?
理解映像檔、容器、倉庫的關係,讓你能用工程師的語言向 AI 描述問題,得到更精準的技術建議或溝通策略。
你的人類優勢:
- 你知道這次部署的業務目的(例如:這個版本是為了支援週年慶活動),AI 無從得知
- 你能判斷問題的優先等級:容器掛掉是否影響金流,還是只影響行銷頁面,需要你來做業務判斷
可以這樣跟 AI 說:
我們公司的電商平台用 Docker 部署。工程師說「商品頁容器 OOM(記憶體不足)被殺掉了,需要重新調整映像檔的資源配置」。請用非技術語言解釋這件事對用戶的影響,以及 PM 應該在這個情境下問工程師哪些問題?
挑戰任務
請說明「映像檔」和「容器」的差別。用「食譜」和「煮好的菜」這個比喻,延伸到電商場景:什麼是「訂單系統的映像檔」?什麼是「訂單系統的容器」?
雙十一大促銷,電商平台預期流量是平時的 10 倍。從「容器可以水平擴展」的概念出發,你會怎麼跟工程師討論這件事?寫出你會問的問題。
倉庫(Registry)在整個部署流程中扮演什麼角色?為什麼公司通常會架設私有倉庫而不只用公開的 Docker Hub?