天天看點

Docker資料目錄遷移解決方案

如何避免:

1.在安裝前對

/var/lib/docker

(docker預設資料存儲目錄)目錄進行擴容;

2.在docker安裝完成後,修改docker預設存儲位置為磁盤容量較大的位置;規避遷移資料過程中造成的風險。

前置工作

  1. 在遷移前确認遷移的目标目錄空間是否充足
  2. 在遷移時需停止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