開發與維運

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默認存放路徑位置

停掉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

Leave a Reply

Your email address will not be published. Required fields are marked *