Docker數據目錄遷移解決方案

場景

在docker的使用中隨着下載鏡像愈來愈多,構建鏡像、運行容器愈來愈多, 數據目錄必然會逐漸增大;當全部docker鏡像、容器對磁盤的使用達到上限時,就須要對數據目錄進行遷移。docker

如何避免:

1.在安裝前對/var/lib/docker(docker默認數據存儲目錄)目錄進行擴容;
2.在docker安裝完成後,修改docker默認存儲位置爲磁盤容量較大的位置;規避遷移數據過程當中形成的風險。vim

前置工做

  1. 在遷移前確認遷移的目標目錄空間是否充足
  2. 在遷移時需中止docker服務,務必在平臺不使用時進行遷移

使用如下命令查詢當前docker數據目錄安裝路徑:bash

docker info | grep "Docker Root Dir"

下文以 /home/rain/docker 這個路徑做爲要遷移的新 Docker 安裝(存儲)目錄服務器

遷移方案

方法一:軟連接

停掉Docker服務:code

systemctl stop docker

根據上面查到的路徑,移動整個/var/lib/docker目錄到數據盤的目的路徑(沒有rsync命令時需安裝rsync):遞歸

rsync -avzP /var/lib/docker  /home/rain/

參數解釋:class

-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
相關文章
相關標籤/搜索