一、Docker簡介與環境準備
1.1 什么是Docker
Docker是一個開源的容器化平臺,它使用Linux內核的cgroup,namespace以及OverlayFS類的UnionFS等技術,對進程進行封裝隔離,屬于操作系統層面的虛擬化技術。Docker能夠自動執行重復性任務,例如搭建和配置開發環境,從而解放了開發人員以便他們專注在真正重要的事情上:構建杰出的軟件。
Docker的核心概念:
- 鏡像(Image):Docker鏡像是用于創建Docker容器的模板
- 容器(Container):鏡像運行時的實體,可以被創建、啟動、停止、刪除和暫停等
- 倉庫(Repository):集中存放鏡像文件的場所
Linux中Docker的優勢:
- 輕量級虛擬化,資源利用率高
- 快速部署和擴縮容
- 環境一致性,解決"在我機器上能跑"的問題
- 便于DevOps實踐和微服務架構
1.2 系統環境要求
支持的Linux發行版:
- Ubuntu 18.04 LTS及以上版本
- CentOS 7/8/Stream
- RHEL 7/8/9
- Debian 9及以上版本
- Fedora 32及以上版本
內核版本要求:
- 最低內核版本:3.10
- 推薦內核版本:4.0及以上
- 必須啟用cgroups和namespace功能
硬件資源要求:
- 最小內存:512MB(推薦2GB以上)
- 磁盤空間:至少10GB可用空間
- CPU架構:x86_64或ARM64
1.3 安裝前的系統檢查
檢查系統版本和內核:
# 查看系統版本
cat /etc/os-release
lsb_release -a# 查看內核版本
uname -r# 檢查內核是否支持Docker
docker version
卸載舊版本Docker:
# Ubuntu/Debian系統
sudo apt-get remove docker docker-engine docker.io containerd runc# CentOS/RHEL系統
sudo yum remove docker docker-client docker-client-latest docker-common \docker-latest docker-latest-logrotate docker-logrotate docker-engine
二、Docker安裝步驟詳解
2.1 Ubuntu/Debian系統安裝
方法一:官方倉庫安裝(推薦)
# 1. 更新包索引
sudo apt-get update# 2. 安裝必要的依賴包
sudo apt-get install \ca-certificates \curl \gnupg \lsb-release# 3. 添加Docker官方GPG密鑰
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg# 4. 設置穩定版倉庫
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# 5. 更新包索引
sudo apt-get update# 6. 安裝Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
方法二:腳本一鍵安裝
# 下載并執行官方安裝腳本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh# 國內用戶可使用阿里云腳本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.2 CentOS/RHEL系統安裝
yum倉庫安裝:
# 1. 安裝yum-utils包
sudo yum install -y yum-utils# 2. 設置穩定版倉庫
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 3. 安裝Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin# 4. 啟動Docker
sudo systemctl start docker
sudo systemctl enable docker
CentOS 8/Stream使用dnf:
# 安裝dnf-plugins-core包
sudo dnf install dnf-plugins-core# 添加Docker倉庫
sudo dnf config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 安裝Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2.3 其他Linux發行版安裝
Fedora系統:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager \--add-repo \https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Arch Linux系統:
sudo pacman -S docker
sudo systemctl start docker.service
sudo systemctl enable docker.service
三、Docker服務配置與啟動
3.1 Docker守護進程配置
systemd服務配置:
# 啟動Docker服務
sudo systemctl start docker# 設置開機自啟動
sudo systemctl enable docker# 查看服務狀態
sudo systemctl status docker# 重啟服務
sudo systemctl restart docker
daemon.json配置文件:
創建或編輯/etc/docker/daemon.json
文件:
{"data-root": "/var/lib/docker","log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "3"},"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"],"storage-driver": "overlay2"
}
3.2 用戶權限配置
將用戶加入docker組:
# 創建docker組(通常安裝時會自動創建)
sudo groupadd docker# 將當前用戶加入docker組
sudo usermod -aG docker $USER# 注銷后重新登錄,或使用以下命令刷新組成員身份
newgrp docker# 測試無sudo運行docker命令
docker run hello-world
3.3 鏡像源配置
國內鏡像加速器配置:
常用的鏡像加速器:
- 阿里云:https://cr.console.aliyun.com/
- 騰訊云:https://mirror.ccs.tencentyun.com
- 中科大:https://docker.mirrors.ustc.edu.cn
- 網易:https://hub-mirror.c.163.com
配置方法:
# 創建或修改daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]
}
EOF# 重啟Docker服務
sudo systemctl daemon-reload
sudo systemctl restart docker
四、Docker環境驗證與測試
4.1 安裝驗證
版本檢查命令:
# 查看Docker版本
docker --version
docker version# 查看詳細信息
docker info# 查看系統信息
docker system info
Hello World容器測試:
# 運行測試容器
docker run hello-world# 查看運行中的容器
docker ps# 查看所有容器(包括已停止的)
docker ps -a# 查看鏡像列表
docker images
4.2 網絡配置驗證
網橋配置檢查:
# 查看Docker網絡
docker network ls# 查看默認bridge網絡詳情
docker network inspect bridge# 查看系統網絡接口
ip addr show docker0
端口映射測試:
# 運行nginx容器并映射端口
docker run -d -p 8080:80 --name test-nginx nginx# 測試端口連通性
curl http://localhost:8080# 停止并刪除測試容器
docker stop test-nginx
docker rm test-nginx
五、重要注意事項
5.1 安全注意事項
Docker守護進程安全配置:
- 不要在生產環境中將Docker守護進程暴露在公網
- 使用TLS加密Docker守護進程通信
- 定期更新Docker版本以獲取安全補丁
# 配置TLS加密
sudo dockerd \--tlsverify \--tlscacert=ca.pem \--tlscert=server-cert.pem \--tlskey=server-key.pem \-H=0.0.0.0:2376
容器運行安全:
- 避免以root用戶運行容器
- 使用最小權限原則
- 定期掃描鏡像漏洞
5.2 性能優化注意事項
存儲驅動選擇:
- 推薦使用overlay2存儲驅動
- 確保文件系統支持(ext4、xfs等)
資源限制配置:
# 限制容器內存使用
docker run -m 512m nginx# 限制CPU使用
docker run --cpus="1.5" nginx# 設置存儲限制
docker run --storage-opt size=10G nginx
5.3 生產環境注意事項
日志輪轉配置:
{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}
}
監控配置:
- 配置容器資源監控
- 設置日志收集
- 建立告警機制
六、常見問題排除
6.1 安裝過程問題
問題1:依賴包沖突
# 錯誤信息
Package docker-ce conflicts with docker# 解決方案
sudo yum remove docker
sudo yum install docker-ce
問題2:權限不足問題
# 錯誤信息
Got permission denied while trying to connect to the Docker daemon socket# 解決方案
sudo usermod -aG docker $USER
newgrp docker
問題3:網絡連接問題
# 錯誤信息
Could not connect to download.docker.com# 解決方案:使用國內源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
6.2 運行時問題
問題1:容器啟動失敗
# 查看容器日志
docker logs <container_id># 查看詳細錯誤信息
docker events --filter container=<container_name># 檢查容器配置
docker inspect <container_id>
問題2:端口占用問題
# 查看端口占用
sudo netstat -tulpn | grep <port>
sudo ss -tulpn | grep <port># 查找并停止占用端口的進程
sudo fuser -k <port>/tcp
問題3:存儲空間問題
# 查看Docker磁盤使用情況
docker system df# 清理無用數據
docker system prune -a# 清理無用卷
docker volume prune# 清理無用網絡
docker network prune
6.3 性能問題排查
容器資源占用過高:
# 查看容器資源使用情況
docker stats# 查看詳細資源使用
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"# 限制容器資源
docker update --memory 512m --cpus 1 <container_id>
網絡延遲問題:
# 檢查DNS設置
docker run --rm busybox nslookup google.com# 測試網絡連通性
docker run --rm busybox ping -c 4 8.8.8.8# 檢查Docker網絡配置
docker network inspect bridge
七、最佳實踐與運維建議
7.1 Docker運維最佳實踐
鏡像管理策略:
- 使用官方鏡像作為基礎鏡像
- 定期更新和清理無用鏡像
- 使用多階段構建減小鏡像大小
# 多階段構建示例
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm installFROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
容器生命周期管理:
# 健康檢查配置
docker run -d \--health-cmd="curl -f http://localhost/ || exit 1" \--health-interval=30s \--health-timeout=10s \--health-retries=3 \nginx# 自動重啟策略
docker run -d --restart=unless-stopped nginx
7.2 故障排查工具與方法
日志分析工具:
# 實時查看日志
docker logs -f <container_name># 查看最近的日志
docker logs --tail 100 <container_name># 查看指定時間的日志
docker logs --since 2023-01-01T00:00:00 <container_name>
性能監控工具:
# 安裝docker-compose用于監控棧
sudo apt install docker-compose# 使用ctop監控容器
docker run --rm -ti \--name=ctop \--volume /var/run/docker.sock:/var/run/docker.sock:ro \quay.io/vektorlab/ctop:latest
調試命令集合:
# 進入運行中的容器
docker exec -it <container_name> /bin/bash# 查看容器進程
docker top <container_name># 檢查容器文件系統變化
docker diff <container_name># 導出容器文件系統
docker export <container_name> > container.tar# 查看鏡像構建歷史
docker history <image_name>
總結:
Docker在Linux系統中的安裝和配置是一個系統性工程,需要考慮系統環境、安全性、性能優化等多個方面。通過本文的詳細介紹,相信大家能夠成功安裝和配置Docker環境,并具備基本的故障排查能力。
在實際生產環境中,建議:
- 定期備份重要數據
- 建立完善的監控體系
- 制定應急預案
- 保持Docker版本更新
- 關注安全漏洞和補丁
希望這篇文章能夠幫助大家更好地使用Docker技術,提升開發和運維效率。