前言
Docker 預設將所有映像檔、容器、卷和網路配置儲存在 /var/lib/docker
目錄下。隨著 Docker 使用量的增加,這個目錄可能會快速消耗系統磁碟空間,特別是在以下情況:
- 使用 Raspberry Pi 或 MiniPC 等儲存空間有限的裝置
- 頻繁建立和刪除容器
- 使用大型映像檔
- 累積大量未清理的映像檔和容器
本指南將詳細說明如何安全地將 Docker 儲存目錄遷移到其他位置,確保資料完整性和系統穩定性。
事前準備
檢查當前 Docker 使用情況
在開始遷移前,建議先檢查當前 Docker 的磁碟使用情況:
1
2
3
4
5
6
7
8
9
| # 檢查 Docker 目錄大小
sudo du -sh /var/lib/docker
# 檢查系統磁碟空間
df -h
# 列出 Docker 映像檔和容器
docker images
docker ps -a
|
選擇新的儲存位置
選擇新儲存位置時需考慮:
- 足夠的磁碟空間:建議至少是當前 Docker 目錄大小的 2-3 倍
- 效能考量:SSD 優於傳統硬碟,特別是對於頻繁的 I/O 操作
- 權限設定:確保 Docker 有適當的讀寫權限
常見的選擇:
/opt/docker
- 適合獨立磁碟分割區/home/docker
- 適合個人使用環境/mnt/external/docker
- 適合外部儲存裝置
遷移步驟
步驟 1:停止 Docker 服務
1
2
3
4
5
| # 停止 Docker 服務
sudo systemctl stop docker
# 確認服務已停止
sudo systemctl status docker
|
步驟 2:備份現有資料
重要:在進行任何修改前,務必先備份現有資料。
1
2
3
4
5
| # 創建備份目錄
sudo mkdir -p /backup/docker-backup-$(date +%Y%m%d)
# 備份 Docker 目錄
sudo cp -r /var/lib/docker /backup/docker-backup-$(date +%Y%m%d)/
|
步驟 3:創建新目錄並設定權限
1
2
3
4
5
6
| # 創建新的 Docker 目錄
sudo mkdir -p /new/docker/path
# 設定適當的權限
sudo chown root:root /new/docker/path
sudo chmod 755 /new/docker/path
|
步驟 4:配置 Docker daemon
創建或編輯 /etc/docker/daemon.json
檔案:
1
| sudo nano /etc/docker/daemon.json
|
添加以下內容:
1
2
3
4
5
6
7
8
| {
"data-root": "/new/docker/path",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
|
步驟 5:遷移資料
使用 rsync
進行資料遷移,這比 cp
更安全且支援斷點續傳:
1
2
3
4
5
| # 使用 rsync 複製資料(保留權限和時間戳)
sudo rsync -avxP /var/lib/docker/ /new/docker/path/
# 驗證遷移完整性
sudo rsync -avxP --dry-run /var/lib/docker/ /new/docker/path/
|
步驟 6:重命名舊目錄
為了安全起見,先重命名舊目錄而不是直接刪除:
1
| sudo mv /var/lib/docker /var/lib/docker.backup.$(date +%Y%m%d)
|
步驟 7:創建符號連結(可選)
如果您希望保持 /var/lib/docker
路徑的相容性,可以創建符號連結:
1
| sudo ln -s /new/docker/path /var/lib/docker
|
步驟 8:啟動 Docker 服務
1
2
3
4
5
6
7
8
9
| # 啟動 Docker 服務
sudo systemctl start docker
# 檢查服務狀態
sudo systemctl status docker
# 驗證 Docker 是否正常運作
docker version
docker info
|
驗證遷移結果
檢查 Docker 資訊
1
2
3
4
5
6
| # 查看 Docker 根目錄
docker info | grep "Docker Root Dir"
# 檢查映像檔和容器
docker images
docker ps -a
|
測試 Docker 功能
1
2
3
4
5
6
7
8
| # 測試拉取映像檔
docker pull hello-world
# 測試運行容器
docker run hello-world
# 清理測試容器
docker rmi hello-world
|
清理舊資料
確認新配置運作正常後,可以清理舊的備份資料:
1
2
3
| # 等待 24-48 小時確認系統穩定後再執行
sudo rm -rf /var/lib/docker.backup.*
sudo rm -rf /backup/docker-backup-*
|
常見問題與解決方案
問題 1:權限錯誤
如果遇到權限問題:
1
2
3
4
5
6
| # 檢查目錄權限
ls -la /new/docker/path
# 修正權限
sudo chown -R root:root /new/docker/path
sudo chmod -R 755 /new/docker/path
|
問題 2:Docker 服務無法啟動
檢查 daemon 配置:
1
2
3
4
5
| # 檢查配置檔案語法
sudo docker daemon --config-file /etc/docker/daemon.json --validate
# 查看 Docker 日誌
sudo journalctl -u docker.service
|
問題 3:磁碟空間不足
如果新位置空間不足:
1
2
3
4
5
| # 清理未使用的 Docker 資源
docker system prune -a
# 檢查磁碟使用情況
du -sh /new/docker/path
|
最佳實踐建議
- 定期清理:設定定期清理未使用的映像檔和容器
- 監控空間:定期監控新位置的磁碟使用情況
- 備份策略:建立定期備份策略
- 效能優化:考慮使用 SSD 或 RAID 配置提升效能
總結
成功遷移 Docker 儲存目錄後,您將獲得:
- 更多的磁碟空間用於系統運作
- 更好的 Docker 效能(如果使用 SSD)
- 更靈活的儲存管理選項
記住,在進行任何系統級修改前,務必做好備份,並在測試環境中先驗證步驟的正確性。