如何避免:
1.在安裝前對/var/lib/docker
(docker默認數據存儲目錄)目錄進行擴容;
2.在docker安裝完成後,修改docker默認存儲位置為磁盤容量較大的位置;規避遷移數據過程中造成的風險。
前置工作
- 在遷移前確認遷移的目標目錄空間是否充足
- 在遷移時需停止docker服務,務必在平臺不使用時進行遷移
使用以下命令查詢當前docker數據目錄安裝路徑:
docker info | grep "Docker Root Dir"
下文以 /home/rain/docker
這個路徑作為要遷移的新 Docker 安裝(存儲)目錄
遷移方案
方法一:軟鏈接
停掉Docker服務:
systemctl stop docker
根據上面查到的路徑,移動整個/var/lib/docker
目錄到數據盤的目的路徑(沒有rsync命令時需安裝rsync):
rsync -avzP /var/lib/docker /home/rain/
參數解釋:
-a,歸檔模式,表示遞歸傳輸並保持文件屬性。
-v,顯示rsync過程中詳細信息。可以使用"-vvvv"獲取更詳細信息。
-P,顯示文件傳輸的進度信息。(實際上"-P"="--partial --progress",其中的"--progress"才是顯示進度信息的)。
-z, 傳輸時進行壓縮提高效率。
備份數據目錄
mv /var/lib/docker /var/lib/docker.bak
添加軟鏈接
ln -s /home/rain/docker /var/lib/
重新啟動docker
systemctl start docker
啟動 Docker 之後,Docker 寫入的路徑依然是 /var/lib/docker
,但是因為軟鏈接的設置,實際已經是往新的目錄寫入了。至此,完成了 Docker 安裝(存儲)目錄的遷移。
通過上述方法完成遷移之後,在確認 Docker 能正常工作之後,刪除原目錄備份數據:
rm -rf /var/lib/docker.bak
方法二:修改默認存儲路徑
直接移出數據,並修改docker默認存放路徑位置
停掉Docker服務:
systemctl stop docker
根據上面查到的路徑,移動整個/var/lib/docker
目錄到數據盤的目的路徑(沒有rsync命令時需安裝rsync):
rsync -avzP /var/lib/docker /home/rain/
修改配置默認路徑
在EXECStart後面添加--graph=/home/rain/docker/
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --graph=/home/rain/docker
重啟docker
systemctl daemon-reload
systemctl start docker
查看docker數據存儲目錄
[root@ ~]#: docker info | grep "Docker Root Dir"
Docker Root Dir: /home/rain/docker
確認之前的鏡像是否還在
docker images
通過上述方法完成遷移之後,在確認 Docker 能正常工作之後,刪除原目錄數據:
rm -rf /var/lib/docker
方法三:通過mount掛載的bind命令
備份 fstab文件
cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
停掉Docker服務:
systemctl stop docker
根據上面查到的路徑,移動整個/var/lib/docker
目錄到數據盤的目的路徑(沒有rsync命令時需安裝rsync):
rsync -avzP /var/lib/docker /home/rain/
將備份保存
mv /var/lib/docker/ /var/lib/docker.bak
通過mount掛載的bind命令將新位置掛載到老位置
# 創建掛載點
mkdir /var/lib/docker
mount --bind /home/rain/docker /var/lib/docker
mount -a
創建開機自動掛載
vim /etc/fstab
# 最後一行添加
/home/rain/docker /var/lib/docker none bind 0 0
# 掛載
mount -a
如有必要重啟服務器確認是否成功遷移
reboot
通過上述方法完成遷移之後,在確認 Docker 能正常工作之後,刪除原目錄備份數據:
rm -rf /var/lib/docker.bak