Docker 基礎概念與安裝
在開始實際操作之前,我們需要先花一點時間建立正確的「容器化世界觀」。理解了 Docker 為了解決什麼問題而生,你在後續的學習中就會更有方向感。
為什麼傳統部署方式會出問題?
想像一下,你是一位廚師,開發了一道全新的料理。你在自己的廚房(開發環境)中完美地完成了這道菜,但當你要把這道菜帶到朋友家(生產環境)去展示時,你發現:
- 朋友家的爐子跟你家的品牌不同(作業系統差異)
- 他的鍋子尺寸不對(套件版本不同)
- 缺少了你需要的某種調味料(系統依賴缺失)
- 他的廚房擺設完全不一樣(環境變數與設定檔不同)
結果就是:你在家完美的料理,在朋友家完全做不出來。這就是軟體開發中最經典的噩夢:「Works on My Machine」症候群。
傳統虛擬機 (VM) 的解決方案與限制
在 Docker 出現之前,業界使用「虛擬機 (Virtual Machine)」來解決這個問題。虛擬機的概念是:在實體電腦上模擬出一整台「虛擬」的電腦,包含完整的作業系統核心 (OS Kernel)。
VM 的優點:
- 完全隔離,安全性高
- 可以在 Windows 上跑 Linux 環境
VM 的缺點:
- ❌ 重量級:每個 VM 都包含了完整的 Guest OS,佔用數 GB 的硬碟空間
- ❌ 啟動慢:開機需要數分鐘(因為要啟動整個作業系統)
- ❌ 資源浪費:就算只跑一個小程式,也需要完整的 OS 支援
- ❌ 移植性差:VM Image 體積巨大,傳輸與部署都很困難
Docker 容器化技術的核心概念
Docker 提出了一個革命性的思維:「我們不需要完整的作業系統,我們只需要應用程式運行所需的最小環境。」
容器 (Container) vs 虛擬機 (VM)
| 特性 | 虛擬機 (VM) | Docker 容器 | |------|------------|------------| | 啟動速度 | 數分鐘 | 數秒鐘 | | 硬碟空間 | GB 等級 | MB 等級 | | 效能損耗 | 15-20% 損耗 | 接近原生 | | 核心共享 | 不共享,每個 VM 有自己的 OS Kernel | 共享宿主機 OS Kernel | | 隔離層級 | 完整硬體虛擬化 | 行程層級隔離 (Namespace) |
簡單來說:
- VM 是 「模擬一台電腦」,每台電腦都要裝自己的作業系統
- Docker 是 「創造一個隔離的執行環境」,所有容器共用同一個作業系統核心,只隔離檔案系統、網路、行程等資源
Docker 的三大核心元件
為了理解 Docker 如何運作,你需要記住以下三個關鍵角色:
1. Docker Engine (Docker 引擎) 這是 Docker 的核心程式,是一個在背景執行的守護行程 (Daemon)。它負責管理所有容器的生命週期:建立、啟動、停止、刪除容器。
2. Docker Image (映像檔) Image 是一個唯讀的模板,裡面包含了應用程式及其所有依賴(程式碼、系統函式庫、環境變數、設定檔)。你可以把它想像成「光碟映像檔」或是「安裝光碟」——它本身是唯讀的,但你可以用它來建立多個容器。
3. Docker Container (容器) Container 是 Image 的運行實例。當你從 Image 啟動一個容器時,Docker Engine 會在 Image 上方加上一個可寫層 (Writable Layer),讓容器可以正常讀寫檔案。你可以把 Container 想像成「用安裝光碟開機後正在運行的電腦」。
Docker 的運作流程圖
Dockerfile (建置腳本)
↓ docker build
Docker Image (唯讀模板)
↓ docker run
Docker Container (運行實例)
↓ 可以有多個
Container 1 ─── 應用 A
Container 2 ─── 應用 B
Container 3 ─── 應用 C
安裝 Docker Desktop
Docker Desktop 是 Docker 官方提供的圖形化工具,它同時包含了 Docker Engine、Docker CLI 以及 Docker Compose,讓你可以在自己的電腦上輕鬆使用 Docker。
macOS 安裝步驟
步驟 1:確認系統需求
- macOS 必須是 macOS 11 (Big Sur) 或更新版本
- 電腦必須是 2020 年以後的 Apple Silicon (M1/M2/M3) 或 Intel 晶片
步驟 2:下載 Docker Desktop 請前往 Docker 官方網站下載 macOS 版本的 Docker Desktop:
🔗 https://www.docker.com/products/docker-desktop/
選擇 Apple Chip(如果你是 M1/M2/M3 Mac)或 Intel Chip。
步驟 3:安裝 Docker Desktop
- 雙擊下載的
.dmg檔案 - 將
Docker.app拖曳到Applications資料夾 - 開啟
Docker.app(首次開啟可能需要允許安全性驗證) - 等待 Docker Engine 啟動(會看到狀態列上的鯨魚圖示)
步驟 4:驗證安裝
安裝完成後,打開你的終端機 (Terminal),輸入以下指令來確認 Docker 已經正常運作:
docker version
你會看到類似以下的輸出:
Client: Docker Engine - Community
Version: 24.0.6
API version: 1.43
Go version: go1.20.7
Server: Docker Engine - Community
Engine:
Version: 24.0.6
API version: 1.43 (minimum version 1.12)
如果你看到了 Client 與 Server 資訊,就代表 Docker 已經成功安裝並運行!
⚠️ 常見問題: 如果你只看到
Client但沒有Server,代表 Docker Engine 沒有正常啟動。請確認 Docker Desktop 的狀態列圖示是綠色的,如果沒有,點擊圖示選擇「Start Docker Desktop」。
Windows 安裝步驟(給 Parallels 或雙系統的使用者)
如果你是使用 Windows 的開發者:
- 下載 Docker Desktop for Windows:https://www.docker.com/products/docker-desktop/
- 確認你的 Windows 已啟用 WSL 2 (Windows Subsystem for Linux 2)
- 安裝過程中選擇 Use WSL 2 instead of Hyper-V(效能更好)
- 安裝完成後重啟電腦
Linux 安裝步驟
如果你是使用 Ubuntu/Debian 系列的 Linux 使用者,可以直接透過系統套件管理工具安裝:
# 更新套件列表
sudo apt update
# 安裝 Docker
sudo apt install docker.io
# 啟動 Docker 服務
sudo systemctl start docker
sudo systemctl enable docker
# 將你的使用者加入 docker 群組(避免每次都要 sudo)
sudo usermod -aG docker $USER
# 重新登入後生效
[!TIP] 安裝完成後,請執行
docker run hello-world來測試。如果看到 Hello from Docker! 的歡迎訊息,就代表一切正常!
安裝 kubectl(Kubernetes CLI)
由於我們的最終目標是將容器部署到 Kubernetes 上,我們可以先安裝 kubectl 指令工具。
macOS 安裝 kubectl
# 使用 Homebrew 安裝(最簡單)
brew install kubectl
# 驗證安裝
kubectl version --client
輸出範例:
Client Version: v1.28.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
驗證最終環境
安裝完成後,請確認你的開發環境是否準備就緒:
# 確認 Docker 可正常運行
docker run hello-world
# 確認 kubectl 已安裝
kubectl version --client
如果你兩者都能順利執行,恭喜你!你的容器化開發環境已經準備完成。
本日總結
在本章中,你學到了:
- ✅ 傳統部署的問題:環境不一致導致「Works on My Machine」的噩夢
- ✅ Docker 與 VM 的差異:Docker 更輕量、更快、資源使用效率更高
- ✅ 三大核心元件:Docker Engine → Image → Container 的運作流程
- ✅ 安裝 Docker Desktop:在你的電腦上成功安裝了 Docker 執行環境
- ✅ 安裝 kubectl:為後續的 Kubernetes 學習做好準備
下一章,我們將實際撰寫第一個 Dockerfile,將你寫好的應用程式打包成標準的 Docker Image!