目錄
Docker 是什麼?映像檔與容器一次看懂
Docker 解決什麼問題
寫程式的人幾乎都遇過這種情況:程式在自己電腦上跑得好好的,放到同事電腦或伺服器上就出錯。原因通常是環境不同,例如 Python 版本不一樣、少裝一個函式庫、設定檔路徑不同。
Docker 的做法是:把程式連同它的執行環境一起打包。打包好的東西在任何裝了 Docker 的機器上,執行起來都一樣。
三個核心概念
| 概念 | 是什麼 | 比喻 |
|---|---|---|
| 映像檔(Image) | 唯讀的範本,包含程式、函式庫、設定 | 安裝光碟 |
| 容器(Container) | 由映像檔啟動、正在執行的實體 | 用光碟裝好、正在跑的程式 |
| Registry | 存放與分享映像檔的地方,例如 Docker Hub | App Store |
一個映像檔可以同時啟動很多個容器,彼此互不干擾。容器刪掉了,映像檔還在,隨時可以再開一個新的。
映像檔是一層一層疊起來的
映像檔由多個**層(layer)**組成。例如一個 Python 網站的映像檔可能是:
- 基礎作業系統層(例如 Debian)
- Python 執行環境層
- 安裝套件(
pip install)的那一層 - 你的程式碼那一層
不同的映像檔可以共用相同的底層,所以下載和儲存都很省空間。這也是之後寫 Dockerfile 時要注意指令順序的原因。
容器和虛擬機有什麼不同
虛擬機(VM)會模擬一整台電腦,每台都有自己完整的作業系統。容器則是共用主機的作業系統核心,只隔離程式本身需要的部分。
| 容器 | 虛擬機 | |
|---|---|---|
| 啟動時間 | 秒級,甚至更快 | 通常要數十秒到數分鐘 |
| 大小 | 數 MB 到數百 MB | 通常數 GB |
| 隔離程度 | 程序層級 | 完整作業系統 |
| 同一台主機能跑幾個 | 很多 | 較少 |
容器不是用來取代虛擬機的。很多雲端服務其實是在虛擬機裡面跑容器,兩者經常一起使用。
Docker 的組成
當你在終端機輸入 docker 指令時,實際上是:
- Docker CLI:你輸入的命令列工具
- Docker Engine(dockerd):在背景執行、真正負責建立和執行容器的服務
- Docker Hub:預設的公開 Registry,
docker run nginx時就是從這裡下載 nginx 映像檔
在 Windows 和 macOS 上,通常透過 Docker Desktop 一次安裝好上面這些元件。
小結
- Docker 把程式和環境一起打包,解決「環境不一致」的問題
- 映像檔是範本,容器是執行中的實體
- 容器比虛擬機輕量、啟動快
下一節我們會在你的電腦上安裝 Docker。
更新於 2026年10月12日