Docker 容器基礎概念與安裝
前言
Docker 幾乎已經成為現代開發流程中不可或缺的一環。與其只是停留在會使用指令的層次,不如真正理解它背後的設計思維與應用價值。這次打算從基礎概念開始重新梳理,並思考如何把容器化技術融入自己的工作與研究場景。 在實務上,不論是搭建漏洞實驗環境、重現特定攻擊場景,或是建立報告產出流程,都會遇到環境不一致的問題。團隊成員使用不同作業系統、不同套件版本,往往讓原本簡單的流程變得複雜。 透過 Docker 可以把所有依賴與設定封裝進 image 映像檔中,讓環境具備可重現性與一致性,減少因系統差異而產生的錯誤與時間成本。
虛擬機 vs 容器
| 特性 | 虛擬機 | 容器 |
|---|---|---|
| Kernel | 獨立 Kernel | 共用宿主機 Kernel |
| 啟動時間 | 數分鐘 | 數秒 |
| 資源消耗 | 高 | 低 |
| 隔離性 | 完全隔離 | 程序級隔離 |
| 可移植性 | 較差 | 極佳 |
| 映像檔大小 | GB 級別 | MB 級別 |
如何安裝
官方文件:
1 | https://docs.docker.com/desktop/setup/install/windows-install/ |
選擇 Docker Desktop for Windows - x86_64 版本。

啟動完成即可以看到這台電腦現在的容器 (Container) 列表、映像 (Image) 列表、控制台、網路等等圖形化介面。

驗證安裝
想確認更完整,可以在終端機執行 :
1 | docker --version |

若指令能正常顯示資訊,代表 Docker Engine 已成功啟動,執行 docker run 命令 :
1 | docker run hello-world |
若本機尚未存在 hello-world image,Docker 會自動從 Docker Hub 下載官方映像檔,建立 container,並執行其預設程式。成功執行後,畫面會顯示測試訊息,代表整個流程(下載 → 建立 → 執行)皆運作正常。

圖形化可以看的出來已經成功從 Docker Hub 下載官方 image。

Docker 基礎架構

Client (發送命令的人)
使用者操作 Docker 的地方,包含:
1 | docker run |
這些指令不是直接操作容器,而是發送請求給中間那層的 Docker Daemon。
Docker Host (核心運作區)
Docker Daemon 是 Docker 架構中的核心服務(即 Docker Engine)。它在系統背景持續運行,負責接收並處理來自 Docker Client 的指令請求。
當使用者在終端機執行 docker run、docker build 或 docker pull 等指令時,這些指令並不會直接操作容器或映像檔,而是透過 API 傳送給 Docker Daemon。真正建立、管理與執行容器相關資源的,是由 Daemon 負責完成。
Docker Daemon 的主要職責包括:
- 管理 Image(下載、儲存、刪除)
- 建立與啟動 Container
- 管理網路與 Volume
- 分配系統資源(CPU、記憶體)
- 與 Registry 溝通(例如 Docker Hub)
因此,可以將 Docker Client 視為操作介面,而 Docker Daemon 則是實際執行與管理容器運作的核心引擎。
Images 是容器的基礎模板,用來定義應用程式執行所需的環境與依賴。
例如常見的 nginx、redis、python、ubuntu,或是你自行透過 Dockerfile 建立的映像檔,都屬於 Image。
Image 本身是唯讀的(read-only),它包含:
- 作業系統基礎層
- 套件與函式庫
- 應用程式程式碼
- 啟動指令(entrypoint / cmd)
Container 是由 Image 建立出來的執行實例(runtime instance),當你使用某個 Image 啟動時,Docker 會在該唯讀 Image 之上建立一層可寫入層(writable layer),並讓程式在其中執行。
同一個 Image 可以建立多個 Container:
- 一個 nginx image → 可以啟動多個 nginx container
- 一個 python image → 可以同時跑不同的應用
簡單來說:
Image = 環境模板(作業系統 + 套件 + 程式碼 + 啟動指令)
Container = 從 Image 啟動後的執行實體(正在跑的程序)
Registry (倉庫)
常見的 Registry 包括 Docker Hub(官方公開倉庫)以及企業自行建置的私有 Registry。
這些倉庫中存放著各種官方或第三方維護的 Image,例如 NGINX、Ubuntu、PostgreSQL 等,也可以儲存團隊自行建構的映像檔。
當你執行:
1 | docker pull nginx |
實際上發生的流程是:
- Docker Client 發送請求
- Docker Daemon 接收並處理
- Daemon 向 Registry 查詢並下載對應的 Image
- Image 被儲存到本機的 Image Repository
換句話說,Registry 是 Image 的來源,而 Docker Daemon 負責將所需的映像檔拉取至本機並進行管理。
基本流程如下:
1 | 使用者 |
真正的應用程式程序(Process)則在 Container 內部運行。
常見指令
系統資訊相關
1 | # 查看 Docker 版本 |
容器管理指令(Container Management)
1 | # 列出執行中的容器 |
建立與執行容器(docker run)
1 | # 基本執行 |
補充:run 與 start 的差異
- docker run = 建立 + 啟動
- docker start = 啟動已存在的容器