在docker的使用中隨着下載鏡像愈來愈多,構建鏡像、運行容器愈來愈多, 數據目錄必然會逐漸增大;當全部docker鏡像、容器對磁盤的使用達到上限時,就須要對數據目錄進行遷移。docker
1.在安裝前對/var/lib/docker
(docker默認數據存儲目錄)目錄進行擴容;
2.在docker安裝完成後,修改docker默認存儲位置爲磁盤容量較大的位置;規避遷移數據過程當中形成的風險。vim
使用如下命令查詢當前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
備份 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