如何避免:
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預設存放路徑位置
systemctl stop docker
/var/lib/docker
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)
systemctl stop docker
/var/lib/docker
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
rm -rf /var/lib/docker.bak