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:卸載舊版本(如果存在)
sudo apt-get remove docker docker-engine docker.io containerd runc步驟 2:更新軟件包索引
sudo apt-get update步驟 3:安裝必要的依賴
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release步驟 4:添加 Docker 官方 GPG 密鑰
# 創建目錄
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:設置穩定版倉庫
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
# 更新軟件包索引
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:驗證安裝
# 檢查 Docker 版本
docker --version
# 運行測試容器
sudo docker run hello-world如果看到 "Hello from Docker!" 的消息,說明安裝成功!
CentOS / RHEL / Fedora 系統
步驟 1:卸載舊版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine步驟 2:安裝必要的依賴
sudo yum install -y yum-utils步驟 3:添加 Docker 倉庫
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo步驟 4:安裝 Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin步驟 5:啟動 Docker
sudo systemctl start docker
sudo systemctl enable docker步驟 6:驗證安裝
sudo docker run hello-world一鍵安裝腳本(適用於大多數 Linux 發行版)
Docker 官方提供了一個便捷的安裝腳本,適合快速部署:
# 下載並執行安裝腳本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh安全提示:在生產環境中,建議審查腳本內容後再執行:
bashcat 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
- 雙擊下載的
.dmg文件 - 將 Docker 圖標拖拽到 Applications 文件夾
- 打開 Applications 文件夾,雙擊 Docker.app
- 按照提示完成安裝
步驟 3:啟動並驗證
- 在 Launchpad 中找到 Docker 並啟動
- 首次啟動會要求授權,點擊 OK
- 等待 Docker 啟動完成(菜單欄會出現 Docker 圖標)
- 打開終端,運行:
docker --version
docker run hello-world使用 Homebrew 安裝(可選)
如果您已安裝 Homebrew,可以使用以下命令:
# 安裝 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):
- 以管理員身份打開 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下載並安裝 WSL 2 Linux 內核更新包: WSL2 Linux kernel update package
設置 WSL 2 為默認版本:
wsl --set-default-version 2步驟 1:下載 Docker Desktop
訪問 Docker Desktop for Windows 下載頁面
步驟 2:安裝
- 雙擊下載的
.exe安裝文件 - 確保勾選 "Use WSL 2 instead of Hyper-V"(推薦)
- 按照安裝嚮導完成安裝
- 重啟計算機
步驟 3:啟動並驗證
- 從開始菜單啟動 Docker Desktop
- 接受服務條款
- 等待 Docker 啟動(系統托盤會出現 Docker 圖標)
- 打開 PowerShell 或 CMD,運行:
docker --version
docker run hello-world方法四:其他安裝方式
使用 Snap 安裝(Ubuntu)
sudo snap install docker使用 Fish 包管理器安裝
# Arch Linux
sudo pacman -S docker
# 啟動服務
sudo systemctl start docker
sudo systemctl enable dockerDocker 配置與優化
安裝完成後,進行適當的配置可以提升使用體驗。
1. 配置非 root 用戶使用 Docker
默認情況下,Docker 需要 root 權限。為了方便使用,可以將當前用戶添加到 docker 用戶組:
# 創建 docker 用戶組(如果不存在)
sudo groupadd docker
# 將當前用戶添加到 docker 組
sudo usermod -aG docker $USER
# 激活組更改(或重新登錄)
newgrp docker
# 驗證(不需要 sudo)
docker run hello-world安全提示:加入 docker 組的用戶具有與 root 等效的權限,請謹慎操作。
2. 配置國內鏡像加速器
由於 Docker Hub 在國外,國內訪問速度較慢。建議配置鏡像加速器:
創建或編輯配置文件
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 服務
sudo systemctl daemon-reload
sudo systemctl restart docker驗證配置
docker info | grep -A 10 "Registry Mirrors"3. 配置開機自啟
# 設置 Docker 開機自啟
sudo systemctl enable docker
# 查看狀態
sudo systemctl status docker4. 調整存儲驅動(高級)
Docker 支持多種存儲驅動,默認使用 overlay2。如需調整:
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 dockerDocker 基本命令速查
安裝完成後,以下是一些常用的 Docker 命令:
鏡像管理
# 搜索鏡像
docker search nginx
# 拉取鏡像
docker pull nginx:latest
# 查看本地鏡像
docker images
# 刪除鏡像
docker rmi <image_id>
# 構建鏡像
docker build -t myapp:1.0 .容器管理
# 運行容器
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系統管理
# 查看 Docker 信息
docker info
# 查看版本
docker version
# 清理未使用的資源
docker system prune
# 查看磁盤使用
docker system df常見問題與故障排查
問題一:Docker 服務無法啟動
現象:
sudo systemctl start docker
# 報錯:Failed to start docker.service解決方案:
查看詳細錯誤信息:
bashsudo journalctl -u docker.service -n 50 --no-pager檢查配置文件語法:
bashsudo dockerd --validate重置 Docker(會刪除所有容器和鏡像):
bashsudo systemctl stop docker sudo rm -rf /var/lib/docker sudo systemctl start docker
問題二:權限被拒絕
現象:
docker run hello-world
# Got permission denied while trying to connect to the Docker daemon socket解決方案:
使用 sudo:
bashsudo docker run hello-world或將用戶加入 docker 組(見上文配置部分)
問題三:拉取鏡像速度慢
現象:docker pull 非常慢或超時
解決方案:
配置國內鏡像加速器(見上文配置部分)
手動指定鏡像源:
bashdocker pull registry.docker-cn.com/library/nginx檢查網絡連接:
bashping docker.io
問題四:端口衝突
現象:
Error starting userland proxy: Bind for 0.0.0.0:80 failed: port is already allocated解決方案:
查找佔用端口的進程:
bashsudo lsof -i :80停止佔用端口的服務,或使用其他端口:
bashdocker run -p 8080:80 nginx
問題五:磁盤空間不足
現象:
No space left on device解決方案:
清理未使用的資源:
bash# 清理停止的容器、未使用的網絡和懸空鏡像 docker system prune # 清理所有未使用的鏡像 docker image prune -a # 清理所有未使用的卷 docker volume prune查看磁盤使用情況:
bashdocker system df移動 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 通外部地址
解決方案:
檢查防火牆規則:
bashsudo iptables -L -n重啟 Docker 網絡:
bashsudo systemctl restart docker檢查 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 中創建非 root 用戶
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser2. 限制容器資源
# 限制內存和 CPU
docker run -d --memory=512m --cpus=1.5 nginx
# 限制進程數
docker run -d --pids-limit=100 nginx3. 只讀文件系統
# 以只讀模式掛載文件系統
docker run -d --read-only nginx
# 需要寫入時使用 tmpfs
docker run -d --read-only --tmpfs /tmp nginx4. 定期更新
# 更新 Docker Engine
sudo apt-get update
sudo apt-get upgrade docker-ce
# 更新鏡像
docker pull nginx:latest5. 掃描鏡像漏洞
# 安裝 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 Community Forums
- Stack Overflow: docker 標籤
- Reddit: r/docker
總結
通過本文的詳細教程,您已經掌握了:
✅ Docker 核心概念:鏡像、容器、倉庫的關係和工作原理
✅ 技術優勢:與傳統虛擬機的對比及應用場景
✅ 多平臺安裝:Linux、macOS、Windows 的詳細安裝步驟
✅ 配置優化:用戶權限、鏡像加速、存儲驅動等配置
✅ 常用命令:鏡像和容器管理的基本操作
✅ 故障排查:6 類常見問題及解決方案
✅ 安全實踐:容器安全的最佳實踐
下一步學習建議
- 動手實踐:嘗試部署一個簡單的 Web 應用(如 Nginx、WordPress)
- 學習 Dockerfile:編寫自己的鏡像構建文件
- 探索 Docker Compose:管理多容器應用
- 瞭解編排工具:學習 Kubernetes 或 Docker Swarm
- 實戰項目:將現有項目容器化
Docker 是現代軟件開發和運維的基石技術,掌握它將為您打開 DevOps、雲計算、微服務等領域的大門。祝您學習愉快!
延伸閱讀:如果您對 Docker 的其他主題感興趣,可以查看我們的 Docker 容器管理、Docker 鏡像詳解、Docker 進程管理 以及 Docker 鏡像源配置。