Docker 基本介紹

Docker 基本介紹

架構總覽

上圖展示了 Docker 完整架構,包含 Docker 客戶端、Docker 守護程序、容器運行時、映像檔倉庫等核心元件及其互動關係

Docker 如何運作?

Docker 采用客戶端-伺服器架構,主要包含以下工作流程:

  1. 開發階段:使用 Dockerfile 定義應用程式環境
  2. 建構階段:透過 docker build 將 Dockerfile 轉換為映像檔
  3. 分享階段:將映像檔推送到 Docker Registry 進行分享
  4. 部署階段:在任何支援 Docker 的環境中運行容器

這個流程確保了「一次建構,到處運行」的目標。


Docker Engine

Docker 的核心運行引擎

  • 負責管理容器的整個生命週期
  • 包含 Docker 守護程序(dockerd)和 REST API
  • 提供容器的建立、啟動、停止和刪除等功能

Container(容器)

應用程式的輕量化運行環境

  • 基於映像檔建立的可執行實例
  • 提供隔離的運行環境,包含應用程式及其所有依賴
  • 相較於虛擬機器,具有更快的啟動速度和更低的資源消耗
  • 每個容器都有獨立的檔案系統、網路和程序空間

Image(映像檔)

容器的唯讀模板

  • 包含執行應用程式所需的所有檔案、函式庫和設定
  • 採用分層架構,支援增量更新和快速部署
  • 具有不可變性,確保環境一致性
  • 可以透過 Dockerfile 自動化建構

Dockerfile

映像檔的建構腳本

  • 定義映像檔建構過程的文字檔案
  • 包含一系列指令,如 FROM、RUN、COPY、CMD 等
  • 實現基礎設施即程式碼(Infrastructure as Code)
  • 支援版本控制和自動化建構

提示
Dockerfile 是實現可重現部署的關鍵,建議遵循最佳實踐來優化映像檔大小和安全性

Docker Registry

映像檔的儲存和分發中心

  • 提供映像檔的上傳、下載和版本管理
  • Docker Hub 是官方的公共註冊中心
  • 支援私有註冊中心,滿足企業安全需求
  • 實現映像檔的集中管理和團隊協作

Volume(資料卷)

持久化資料儲存

  • 解決容器重啟時資料遺失的問題
  • 提供容器間的資料共享機制
  • 支援多種儲存驅動,如本機儲存、網路儲存等
  • 資料生命週期獨立於容器生命週期

Network(網路)

容器間的通訊管理

  • 提供容器與外部世界的網路連接
  • 支援多種網路驅動模式:
    • bridge: 預設網路模式,適用於單機容器通訊
    • host: 直接使用主機網路,提供最佳性能
    • overlay: 跨主機容器通訊,適用於叢集環境
    • none: 無網路存取,適用於安全要求較高的場景

註解
適當的網路配置對於容器安全性和性能至關重要

Docker Compose

多容器應用程式的編排工具

  • 透過 YAML 檔案定義和管理多容器應用程式
  • 簡化複雜應用程式的部署和管理
  • 支援服務依賴關係和啟動順序控制
  • 提供開發、測試和生產環境的一致性

重要提示
Docker Compose 非常適合開發環境和小規模部署,對於大規模生產環境建議使用 Kubernetes 等編排工具

安裝 Docker

Docker 提供了跨平台的安裝支援。以下將介紹最常用的安裝方式和注意事項。

推薦安裝方式

Windows/macOS 使用者:直接下載 Docker Desktop,這是最簡單且完整的解決方案。

Linux 使用者:使用以下方式之一:

  • 推薦:官方安裝腳本(最新版本)
  • 替代:套件管理器安裝(簡單快速)

系統需求

平台 最低需求 建議配置
Linux 64位元、Kernel 3.10+ Ubuntu 20.04+、Debian 10+、CentOS 8+
Windows Windows 10 Pro 64位元 Windows 11 + WSL 2
macOS macOS 10.15+ macOS 12+ 含 Apple Silicon 支援

方法一:官方一鍵安裝腳本(推薦)

這是 Docker 官方提供的最簡單安裝方式:

1
2
3
4
5
6
7
8
9
10
11
12
# 下載並執行官方安裝腳本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 啟動 Docker 服務
sudo systemctl enable --now docker

# 將使用者加入 docker 群組
sudo usermod -aG docker $USER

# 重新載入群組設定
newgrp docker

方法二:手動安裝(Ubuntu/Debian)

如果您需要更精確的控制,可以使用手動安裝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 更新套件索引
sudo apt update

# 安裝必要的套件
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 金鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加 Docker 軟體源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新套件索引並安裝 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 啟動 Docker 服務並設定為開機自動啟動
sudo systemctl enable --now docker

# 將目前使用者加入 docker 群組,避免每次都需要 sudo
sudo usermod -aG docker $USER

方法三:套件管理器安裝(簡單快速)

適用於快速測試或學習環境:

1
2
3
4
5
6
7
8
9
10
# Ubuntu/Debian
sudo apt update && sudo apt install -y docker.io docker-compose-plugin

# CentOS/RHEL
sudo yum install -y docker docker-compose-plugin

# 啟動服務並設定開機自啟
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
newgrp docker

安裝後必要步驟

無論使用哪種安裝方式,都需要完成以下步驟:

1. 驗證安裝

1
2
3
4
5
6
7
8
# 檢查 Docker 版本
docker --version

# 檢查 Docker 狀態
docker info

# 執行測試容器
docker run --rm hello-world

2. 確認權限設定

1
2
3
4
5
6
# 確認使用者在 docker 群組中
groups $USER | grep docker

# 如果沒有,執行以下指令:
sudo usermod -aG docker $USER
newgrp docker

安全提醒:將使用者加入 docker 群組會給予該使用者等同 root 的 Docker 操作權限。在生產環境中請謹慎考慮安全性。

Windows 和 macOS 安裝

這兩個平台的安裝非常簡單:

  1. 下載 Docker Desktop
  2. 執行安裝檔並遵循安裝精靈
  3. 安裝完成後重新啟動電腦(Windows)或啟動應用程式(macOS)
  4. 等待 Docker 服務啟動完成
  5. 使用上述驗證步驟確認安裝成功

安裝 Docker Compose

Docker Compose 是用於定義和管理多容器 Docker 應用程式的工具。現代版本的 Docker 已經內建 Compose 功能,但您也可以單獨安裝 Docker Compose。

檢查是否已安裝

現代版本的 Docker Desktop 和 Docker Engine 已經內建了 Docker Compose:

1
2
3
4
5
# 檢查 Docker Compose 版本(新版語法)
docker compose version

# 檢查 Docker Compose 版本(舊版語法)
docker-compose --version

Linux 手動安裝 Docker Compose

如果您的系統沒有內建 Docker Compose,可以手動安裝。有兩種主要的安裝方式:

方法一:作為 Docker CLI 插件安裝(推薦)

1
2
3
4
5
6
7
8
9
10
# 設定 Docker 配置目錄
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins

# 下載 Docker Compose 插件
curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 \
-o $DOCKER_CONFIG/cli-plugins/docker-compose

# 給予執行權限
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

方法二:作為獨立執行檔安裝

1
2
3
4
5
6
7
8
# 下載最新版本的 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 給予執行權限
sudo chmod +x /usr/local/bin/docker-compose

# 建立軟連結(可選)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

兩種安裝方式的區別

特性 插件安裝(方法一) 獨立安裝(方法二)
安裝位置 ~/.docker/cli-plugins/ /usr/local/bin/
權限需求 用戶權限即可 需要 sudo 權限
使用語法 docker compose docker-compose
整合性 與 Docker CLI 深度整合 獨立運行
更新方式 替換插件檔案 重新下載執行檔
系統影響 僅影響當前用戶 全系統可用
Docker 版本 需要 Docker 20.10+ 支援較舊版本

推薦使用插件安裝的原因:

  • 不需要 sudo 權限,更安全
  • 與 Docker CLI 更好的整合
  • 支援新的 docker compose 語法
  • 更容易管理和更新

使用套件管理器安裝

Ubuntu/Debian

1
sudo apt install -y docker-compose-plugin

CentOS/RHEL

1
sudo yum install -y docker-compose-plugin

驗證安裝

1
2
3
4
5
# 驗證 Docker Compose 安裝
docker compose version

# 查看幫助資訊
docker compose --help

新舊語法差異

  • 新版語法docker compose (推薦使用)
  • 舊版語法docker-compose

新版 Docker Compose 作為 Docker CLI 的插件,提供更好的整合性和性能。


完整環境驗證

完成 Docker 和 Docker Compose 安裝後,使用以下步驟驗證整個環境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. 檢查 Docker 基本狀態
docker --version && docker compose version

# 2. 檢查 Docker 服務狀態
docker info | grep -E "Server Version|Storage Driver|Cgroup Driver"

# 3. 執行簡單的容器測試
docker run --rm hello-world

# 4. 測試 Docker Compose 功能
echo 'version: "3.8"
services:
test:
image: hello-world' > docker-compose.yml
docker compose up
docker compose down
rm docker-compose.yml

# 5. 清理測試資源
docker system prune -f

如果以上所有步驟都成功執行,恰喜您!Docker 環境已經準備就緒,可以開始您的容器化之旅了!


下一步學習建議

現在您已經了解了 Docker 的核心概念並完成了安裝,接下來建議:

  1. 學習基本指令:熟悉 docker rundocker builddocker ps 等常用指令
  2. 編寫 Dockerfile:學習如何建立自己的映像檔
  3. 使用 Docker Compose:管理多容器應用程式
  4. 探索實際專案:將現有應用程式容器化