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

  1. 雙擊下載的 .dmg 檔案
  2. Docker.app 拖曳到 Applications 資料夾
  3. 開啟 Docker.app(首次開啟可能需要允許安全性驗證)
  4. 等待 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)

如果你看到了 ClientServer 資訊,就代表 Docker 已經成功安裝並運行!

⚠️ 常見問題: 如果你只看到 Client 但沒有 Server,代表 Docker Engine 沒有正常啟動。請確認 Docker Desktop 的狀態列圖示是綠色的,如果沒有,點擊圖示選擇「Start Docker Desktop」。

Windows 安裝步驟(給 Parallels 或雙系統的使用者)

如果你是使用 Windows 的開發者:

  1. 下載 Docker Desktop for Windows:https://www.docker.com/products/docker-desktop/
  2. 確認你的 Windows 已啟用 WSL 2 (Windows Subsystem for Linux 2)
  3. 安裝過程中選擇 Use WSL 2 instead of Hyper-V(效能更好)
  4. 安裝完成後重啟電腦

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

如果你兩者都能順利執行,恭喜你!你的容器化開發環境已經準備完成。

本日總結

在本章中,你學到了:

  1. 傳統部署的問題:環境不一致導致「Works on My Machine」的噩夢
  2. Docker 與 VM 的差異:Docker 更輕量、更快、資源使用效率更高
  3. 三大核心元件:Docker Engine → Image → Container 的運作流程
  4. 安裝 Docker Desktop:在你的電腦上成功安裝了 Docker 執行環境
  5. 安裝 kubectl:為後續的 Kubernetes 學習做好準備

下一章,我們將實際撰寫第一個 Dockerfile,將你寫好的應用程式打包成標準的 Docker Image!

會員專屬免費教學

本章節為註冊會員專屬的免費開放內容!請先登入或註冊會員,即可立即解鎖閱讀。

立即登入 / 註冊