跳轉到內容

Docker 簡介與完全安裝指南:從入門到實踐

在當今的軟件開發領域,Docker 已經成為不可或缺的技術棧。它不僅改變了軟件的打包、分發和部署方式,更推動了 DevOps 文化的普及和微服務架構的落地。無論您是開發者、測試工程師還是運維人員,掌握 Docker 都將顯著提升您的工作效率。

本文將為您提供 Docker 技術的全面介紹,包括核心概念解析、實際應用場景、多平臺安裝指南以及配置優化建議,幫助您快速入門並建立扎實的 Docker 基礎。

Docker 技術簡介

什麼是 Docker?

Docker 是一個開源的應用容器引擎,基於 Go 語言開發並遵從 Apache 2.0 協議開源。它允許開發者將應用及其所有依賴打包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 或 Windows 機器上,也可以實現虛擬化。

Docker 如日中天,這不是單純的炒的概念,Docker 的確解決了開發和運維的痛點,比如版本的搬遷,從測試環境搬遷到預發、生產環境,在企業開發與測試中,得到了非常廣泛的應用。

Docker 的核心特性

  • 開放源碼:Docker 是一個開放源碼的軟件項目,基於 GO 語言,擁有活躍的社區支持
  • 輕量級容器:Docker 可以讓開發打包他們的應用以及依賴包到一個輕量級、可移植的容器中
  • 跨平臺部署:Docker 打包好容器,可以發佈到任何流行的 Linux 機器上,也可以實現虛擬化
  • 完全隔離:容器是完全使用沙箱機制,互相之間不會有任何接口,確保安全性
  • 性能優異:Docker 容器性能開銷極低,這個才是關鍵(通常只有 1-5% 的性能損耗)
  • C/S 架構:Docker 使用客戶端-服務器(C/S)架構模式,使用遠程 API 來管理和創建 Docker 容器

Docker 的設計理念

Docker 借鑑了標準的集裝箱的概念。標準的集裝箱將貨物運往世界各地,Docker 將這個模型運行到自己的設計中。唯一不同的是:集裝箱是運輸貨物,Docker 是運輸軟件

這種標準化的"軟件集裝箱"帶來了革命性的變化:

  • 標準化:統一的容器格式,一次構建,到處運行
  • 隔離性:每個容器都有獨立的文件系統、網絡和資源
  • 可移植性:無需關心底層基礎設施差異
  • 版本控制:鏡像支持分層存儲和版本管理

Docker vs 傳統虛擬機

理解 Docker 與傳統虛擬機(VM)的區別,有助於更好地選擇合適的技術方案。

核心對比

特性Docker 容器傳統虛擬機 (VM)
啟動速度幾秒甚至毫秒級幾十秒到幾分鐘
資源佔用幾 MB 到幾百 MB幾 GB
性能損耗1-5%10-30%
隔離級別進程級隔離系統級隔離
密度單機可運行數百個容器單機通常幾十個 VM
操作系統共享宿主機內核每個 VM 獨立 OS
適用場景微服務、持續集成多租戶、強隔離需求

架構圖解

傳統虛擬機架構:

┌─────────────────────────────────┐
│         應用程序 A/B/C           │
├─────────────────────────────────┤
│      Guest OS (完整操作系統)     │
├─────────────────────────────────┤
│         Hypervisor (虛擬化層)    │
├─────────────────────────────────┤
│         Host OS (宿主操作系統)   │
├─────────────────────────────────┤
│           硬件基礎設施           │
└─────────────────────────────────┘

Docker 容器架構:

┌─────────────────────────────────┐
│      容器 A  |  容器 B  | 容器 C  │
├─────────────────────────────────┤
│      Docker Engine (容器引擎)    │
├─────────────────────────────────┤
│         Host OS (宿主操作系統)   │
├─────────────────────────────────┤
│           硬件基礎設施           │
└─────────────────────────────────┘

關鍵區別:

  • VM 需要完整的 Guest OS,而容器共享宿主機內核
  • Hypervisor 層較重,Docker Engine 更輕量
  • 容器啟動無需引導操作系統,因此速度極快

Docker 的應用場景

Docker 在現代軟件開發和運維中有著廣泛的應用:

1. 開發環境一致性

問題: "在我機器上是好的!"——這是開發團隊最常見的抱怨。

解決方案

  • 使用 Docker 定義開發環境(Dockerfile)
  • 所有開發者使用相同的容器環境
  • 消除"環境差異"導致的問題

2. Web 應用自動化打包和發佈

  • 將 Web 應用及其依賴(Nginx、Node.js、Python 等)打包成鏡像
  • 一鍵部署到測試、預發、生產環境
  • 支持藍綠部署、滾動更新等高級發佈策略

3. 自動化測試和持續集成/持續部署(CI/CD)

  • 在乾淨的容器環境中運行測試,避免汙染
  • Jenkins、GitLab CI 等工具原生支持 Docker
  • 並行執行多個測試任務,提升效率

4. 微服務架構

  • 每個微服務運行在獨立容器中
  • 服務間通過網絡通信,天然解耦
  • 易於水平擴展和負載均衡

5. 數據庫和後臺應用部署

  • 快速部署 MySQL、PostgreSQL、Redis 等常見服務
  • 通過卷(Volume)持久化數據
  • 輕鬆實現主從複製、集群等高可用架構

6. 環境隔離與多租戶

  • 在同一臺機器上運行多個互不干擾的應用
  • 為不同客戶/項目提供隔離的運行環境
  • 資源限制防止某個應用佔用過多資源

7. 快速原型開發和實驗

  • 快速搭建臨時環境進行測試
  • 嘗試新技術無需擔心汙染系統
  • 用完即刪,不留痕跡

Docker 的核心組件

Docker 生態系統由三個核心概念組成:鏡像(Image)容器(Container)倉庫(Registry)

核心概念詳解

組件說明類比
Docker 鏡像Docker 鏡像是用於創建 Docker 容器的模板。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。類的定義 / 光盤鏡像
Docker 容器容器是鏡像的運行實例,是獨立運行的一個或多個應用。鏡像相當於類,容器相當於類的實例。類的實例 / 運行中的程序
Docker 倉庫Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。Docker Hub 提供了龐大的鏡像集合供使用,用戶也可以將自己本地的鏡像推送到 Docker 倉庫供其他人下載。Git 倉庫 / 應用商店

其他重要組件

組件說明
Docker 客戶端Docker 客戶端通過命令行或者其他工具使用 Docker API 與 Docker 的守護進程通信。用戶通過客戶端發送指令。
Docker 主機(Host)一個物理或者虛擬的機器用於執行 Docker 守護進程和容器。可以是 Linux 服務器、macOS 或 Windows 機器。
Docker 守護進程(Docker Daemon)是 Docker 服務器端進程(dockerd),負責支撐 Docker 容器的運行以及鏡像的管理。監聽 Docker API 請求。
Dockerfile一個文本文件,包含構建鏡像的所有指令。定義了鏡像的構建步驟。
Docker Compose用於定義和運行多容器 Docker 應用的工具。通過 YAML 文件配置應用服務。
Docker Volume數據卷,用於持久化容器數據和在容器間共享數據。
Docker Network網絡驅動,管理容器間的通信以及容器與外部的網絡連接。

工作流程

1. 編寫 Dockerfile

2. 構建鏡像 (docker build)

3. 推送鏡像到倉庫 (docker push) [可選]

4. 從倉庫拉取鏡像 (docker pull) [可選]

5. 運行容器 (docker run)

6. 管理容器生命週期 (start/stop/restart)

Docker 安裝完全指南

Docker 支持多種操作系統,下面將詳細介紹各平臺的安裝方法。

前置要求

在安裝 Docker 之前,請確保您的系統滿足以下要求:

Linux 系統:

  • 64 位 CPU 架構(x86_64、amd64、armhf、arm64 等)
  • Linux 內核版本 3.10 或更高版本
  • 至少 1GB 可用內存(推薦 2GB+)
  • 足夠的磁盤空間(取決於您要運行的容器)

macOS 系統:

  • macOS 10.15 (Catalina) 或更高版本
  • 至少 4GB RAM

Windows 系統:

  • Windows 10 64 位:專業版、企業版或教育版(Build 15063 或更高)
  • Windows 11
  • 啟用 Hyper-V 和容器功能

方法一:Linux 系統安裝(推薦)

Ubuntu / Debian 系統

步驟 1:卸載舊版本(如果存在)
bash
sudo apt-get remove docker docker-engine docker.io containerd runc
步驟 2:更新軟件包索引
bash
sudo apt-get update
步驟 3:安裝必要的依賴
bash
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
步驟 4:添加 Docker 官方 GPG 密鑰
bash
# 創建目錄
sudo mkdir -p /etc/apt/keyrings

# 下載 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 設置權限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
步驟 5:設置穩定版倉庫
bash
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

注意:如果您使用的是 Debian,將 ubuntu 替換為 debian

步驟 6:安裝 Docker Engine
bash
# 更新軟件包索引
sudo apt-get update

# 安裝最新版本的 Docker Engine、containerd 和 Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步驟 7:驗證安裝
bash
# 檢查 Docker 版本
docker --version

# 運行測試容器
sudo docker run hello-world

如果看到 "Hello from Docker!" 的消息,說明安裝成功!

CentOS / RHEL / Fedora 系統

步驟 1:卸載舊版本
bash
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
步驟 2:安裝必要的依賴
bash
sudo yum install -y yum-utils
步驟 3:添加 Docker 倉庫
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
步驟 4:安裝 Docker Engine
bash
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步驟 5:啟動 Docker
bash
sudo systemctl start docker
sudo systemctl enable docker
步驟 6:驗證安裝
bash
sudo docker run hello-world

一鍵安裝腳本(適用於大多數 Linux 發行版)

Docker 官方提供了一個便捷的安裝腳本,適合快速部署:

bash
# 下載並執行安裝腳本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

安全提示:在生產環境中,建議審查腳本內容後再執行:

bash
cat get-docker.sh  # 查看腳本內容

方法二:macOS 系統安裝

macOS 用戶使用 Docker Desktop for Mac,它提供了圖形界面和完整的 Docker 功能。

步驟 1:下載安裝包

訪問 Docker Desktop for Mac 下載頁面

根據您的芯片類型選擇:

  • Intel 芯片:下載 Docker Desktop for Mac (Intel)
  • Apple Silicon (M1/M2/M3):下載 Docker Desktop for Mac (Apple Silicon)

步驟 2:安裝 Docker Desktop

  1. 雙擊下載的 .dmg 文件
  2. 將 Docker 圖標拖拽到 Applications 文件夾
  3. 打開 Applications 文件夾,雙擊 Docker.app
  4. 按照提示完成安裝

步驟 3:啟動並驗證

  1. 在 Launchpad 中找到 Docker 並啟動
  2. 首次啟動會要求授權,點擊 OK
  3. 等待 Docker 啟動完成(菜單欄會出現 Docker 圖標)
  4. 打開終端,運行:
bash
docker --version
docker run hello-world

使用 Homebrew 安裝(可選)

如果您已安裝 Homebrew,可以使用以下命令:

bash
# 安裝 Docker Desktop
brew install --cask docker

# 啟動 Docker Desktop
open /Applications/Docker.app

方法三:Windows 系統安裝

Windows 10/11 用戶使用 Docker Desktop for Windows

前置要求

啟用 WSL 2(Windows Subsystem for Linux):

  1. 以管理員身份打開 PowerShell
  2. 運行以下命令:
powershell
# 啟用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 啟用虛擬機平臺
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 重啟計算機
Restart-Computer
  1. 下載並安裝 WSL 2 Linux 內核更新包: WSL2 Linux kernel update package

  2. 設置 WSL 2 為默認版本:

powershell
wsl --set-default-version 2

步驟 1:下載 Docker Desktop

訪問 Docker Desktop for Windows 下載頁面

步驟 2:安裝

  1. 雙擊下載的 .exe 安裝文件
  2. 確保勾選 "Use WSL 2 instead of Hyper-V"(推薦)
  3. 按照安裝嚮導完成安裝
  4. 重啟計算機

步驟 3:啟動並驗證

  1. 從開始菜單啟動 Docker Desktop
  2. 接受服務條款
  3. 等待 Docker 啟動(系統托盤會出現 Docker 圖標)
  4. 打開 PowerShell 或 CMD,運行:
powershell
docker --version
docker run hello-world

方法四:其他安裝方式

使用 Snap 安裝(Ubuntu)

bash
sudo snap install docker

使用 Fish 包管理器安裝

bash
# Arch Linux
sudo pacman -S docker

# 啟動服務
sudo systemctl start docker
sudo systemctl enable docker

Docker 配置與優化

安裝完成後,進行適當的配置可以提升使用體驗。

1. 配置非 root 用戶使用 Docker

默認情況下,Docker 需要 root 權限。為了方便使用,可以將當前用戶添加到 docker 用戶組:

bash
# 創建 docker 用戶組(如果不存在)
sudo groupadd docker

# 將當前用戶添加到 docker 組
sudo usermod -aG docker $USER

# 激活組更改(或重新登錄)
newgrp docker

# 驗證(不需要 sudo)
docker run hello-world

安全提示:加入 docker 組的用戶具有與 root 等效的權限,請謹慎操作。

2. 配置國內鏡像加速器

由於 Docker Hub 在國外,國內訪問速度較慢。建議配置鏡像加速器:

創建或編輯配置文件

bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru"
  ]
}
EOF

重啟 Docker 服務

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

驗證配置

bash
docker info | grep -A 10 "Registry Mirrors"

3. 配置開機自啟

bash
# 設置 Docker 開機自啟
sudo systemctl enable docker

# 查看狀態
sudo systemctl status docker

4. 調整存儲驅動(高級)

Docker 支持多種存儲驅動,默認使用 overlay2。如需調整:

bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

sudo systemctl restart docker

Docker 基本命令速查

安裝完成後,以下是一些常用的 Docker 命令:

鏡像管理

bash
# 搜索鏡像
docker search nginx

# 拉取鏡像
docker pull nginx:latest

# 查看本地鏡像
docker images

# 刪除鏡像
docker rmi <image_id>

# 構建鏡像
docker build -t myapp:1.0 .

容器管理

bash
# 運行容器
docker run -d --name my-nginx -p 8080:80 nginx

# 查看運行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 停止容器
docker stop <container_id>

# 啟動容器
docker start <container_id>

# 重啟容器
docker restart <container_id>

# 刪除容器
docker rm <container_id>

# 查看容器日誌
docker logs <container_id>

# 進入容器內部
docker exec -it <container_id> /bin/bash

系統管理

bash
# 查看 Docker 信息
docker info

# 查看版本
docker version

# 清理未使用的資源
docker system prune

# 查看磁盤使用
docker system df

常見問題與故障排查

問題一:Docker 服務無法啟動

現象:

bash
sudo systemctl start docker
# 報錯:Failed to start docker.service

解決方案:

  1. 查看詳細錯誤信息:

    bash
    sudo journalctl -u docker.service -n 50 --no-pager
  2. 檢查配置文件語法:

    bash
    sudo dockerd --validate
  3. 重置 Docker(會刪除所有容器和鏡像):

    bash
    sudo systemctl stop docker
    sudo rm -rf /var/lib/docker
    sudo systemctl start docker

問題二:權限被拒絕

現象:

bash
docker run hello-world
# Got permission denied while trying to connect to the Docker daemon socket

解決方案:

  1. 使用 sudo:

    bash
    sudo docker run hello-world
  2. 或將用戶加入 docker 組(見上文配置部分)

問題三:拉取鏡像速度慢

現象:docker pull 非常慢或超時

解決方案:

  1. 配置國內鏡像加速器(見上文配置部分)

  2. 手動指定鏡像源:

    bash
    docker pull registry.docker-cn.com/library/nginx
  3. 檢查網絡連接:

    bash
    ping docker.io

問題四:端口衝突

現象:

Error starting userland proxy: Bind for 0.0.0.0:80 failed: port is already allocated

解決方案:

  1. 查找佔用端口的進程:

    bash
    sudo lsof -i :80
  2. 停止佔用端口的服務,或使用其他端口:

    bash
    docker run -p 8080:80 nginx

問題五:磁盤空間不足

現象:

No space left on device

解決方案:

  1. 清理未使用的資源:

    bash
    # 清理停止的容器、未使用的網絡和懸空鏡像
    docker system prune
    
    # 清理所有未使用的鏡像
    docker image prune -a
    
    # 清理所有未使用的卷
    docker volume prune
  2. 查看磁盤使用情況:

    bash
    docker system df
  3. 移動 Docker 數據目錄到大容量磁盤:

    bash
    # 編輯配置文件
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "data-root": "/path/to/large/disk/docker"
    }
    EOF
    
    # 遷移現有數據
    sudo systemctl stop docker
    sudo rsync -avz /var/lib/docker/ /path/to/large/disk/docker/
    sudo systemctl start docker

問題六:容器無法訪問網絡

現象: 容器內無法 ping 通外部地址

解決方案:

  1. 檢查防火牆規則:

    bash
    sudo iptables -L -n
  2. 重啟 Docker 網絡:

    bash
    sudo systemctl restart docker
  3. 檢查 DNS 配置:

    bash
    # 編輯配置文件
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "dns": ["8.8.8.8", "114.114.114.114"]
    }
    EOF
    
    sudo systemctl restart docker

Docker 安全最佳實踐

1. 不要以 root 身份運行容器

dockerfile
# 在 Dockerfile 中創建非 root 用戶
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

2. 限制容器資源

bash
# 限制內存和 CPU
docker run -d --memory=512m --cpus=1.5 nginx

# 限制進程數
docker run -d --pids-limit=100 nginx

3. 只讀文件系統

bash
# 以只讀模式掛載文件系統
docker run -d --read-only nginx

# 需要寫入時使用 tmpfs
docker run -d --read-only --tmpfs /tmp nginx

4. 定期更新

bash
# 更新 Docker Engine
sudo apt-get update
sudo apt-get upgrade docker-ce

# 更新鏡像
docker pull nginx:latest

5. 掃描鏡像漏洞

bash
# 安裝 Trivy
sudo apt-get install trivy

# 掃描鏡像
trivy image nginx:latest

學習資源推薦

官方文檔

在線課程

  • Docker 官方認證課程(DCA)
  • Udemy: Docker Mastery
  • Coursera: Containerization with Docker

書籍推薦

  • 《Docker 技術入門與實戰》
  • 《Docker Deep Dive》by Nigel Poulton
  • 《Using Docker》by Adrian Mouat

社區資源

總結

通過本文的詳細教程,您已經掌握了:

Docker 核心概念:鏡像、容器、倉庫的關係和工作原理
技術優勢:與傳統虛擬機的對比及應用場景
多平臺安裝:Linux、macOS、Windows 的詳細安裝步驟
配置優化:用戶權限、鏡像加速、存儲驅動等配置
常用命令:鏡像和容器管理的基本操作
故障排查:6 類常見問題及解決方案
安全實踐:容器安全的最佳實踐

下一步學習建議

  1. 動手實踐:嘗試部署一個簡單的 Web 應用(如 Nginx、WordPress)
  2. 學習 Dockerfile:編寫自己的鏡像構建文件
  3. 探索 Docker Compose:管理多容器應用
  4. 瞭解編排工具:學習 Kubernetes 或 Docker Swarm
  5. 實戰項目:將現有項目容器化

Docker 是現代軟件開發和運維的基石技術,掌握它將為您打開 DevOps、雲計算、微服務等領域的大門。祝您學習愉快!

Docker 容器技術概念圖

延伸閱讀:如果您對 Docker 的其他主題感興趣,可以查看我們的 Docker 容器管理Docker 鏡像詳解Docker 進程管理 以及 Docker 鏡像源配置

最後更新於: