Docker檔案遷移到TF卡或者隨身碟,最大限度減少空間佔用

流云1發表於2024-06-22

簡介: 在docker的使用中隨著下載映象越來越多,構建映象、執行容器越來越多, 資料目錄必然會逐漸增大;當所有docker映象、容器對磁碟的使用達到上限時,就需要對資料目錄進行遷移。

前置工作
在遷移前確認遷移的目標目錄空間是否充足
在遷移時需停止docker服務,務必在平臺不使用時進行遷移

使用以下命令查詢當前docker資料目錄安裝路徑:
docker info | grep "Docker Root Dir"

下文以/mnt/mmcblk1p1/docker 這個TF卡上的路徑作為要遷移的新 Docker 安裝(儲存)目錄為例子,對於安裝在隨身碟的,一般是/mnt/sda1/,可以使用 df -h命令自行確定外掛儲存路徑

遷移方案
方法一:軟連結
停掉Docker服務:
systemctl stop docker

根據上面查到的路徑,移動整個/var/lib/docker目錄到資料盤的目的路徑(沒有rsync命令時需安裝rsync):
sudo apt-get install rsync
rsync -avzP /var/lib/docker /mnt/mmcblk1p1/
引數解釋:
-a,歸檔模式,表示遞迴傳輸並保持檔案屬性。
-v,顯示rsync過程中詳細資訊。可以使用"-vvvv"獲取更詳細資訊。
-P,顯示檔案傳輸的進度資訊。(實際上"-P"="--partial --progress",其中的"--progress"才是顯示進度資訊的)。
-z, 傳輸時進行壓縮提高效率。

備份資料目錄
mv /var/lib/docker /var/lib/docker.bak

新增軟連結
ln -s /mnt/mmcblk1p1/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):
sudo apt-get install rsync
rsync -avzP /var/lib/docker /mnt/mmcblk1p1/

修改配置預設路徑
在EXECStart後面新增--data-root /mnt/mmcblk1p1/docker/

vim /usr/lib/systemd/system/docker.service
在最後手動加上
ExecStart=/usr/bin/dockerd --data-root /mnt/mmcblk1p1/docker -H fd:// --containerd=/run/containerd/containerd.sock
按Esc後輸入:wq退出編輯

重啟docker

systemctl daemon-reload
systemctl start docker

檢視docker資料儲存目錄
docker info | grep "Docker Root Dir"
看一看是不是Docker Root Dir: /mnt/mmcblk1p1/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):
sudo apt-get install rsync
rsync -avzP /var/lib/docker /mnt/mmcblk1p1/

將備份儲存
mv /var/lib/docker/ /var/lib/docker.bak

透過mount掛載的bind命令將新位置掛載到老位置

建立掛載點

mkdir /var/lib/docker
mount --bind /mnt/mmcblk1p1/docker /var/lib/docker
mount -a

建立開機自動掛載

vim /etc/fstab
最後一行新增
/mnt/mmcblk1p1/docker /var/lib/docker none bind 0 0
按Esc後輸入:wq退出編輯

掛載

mount -a

如有必要重啟伺服器確認是否成功遷移
reboot

透過上述方法完成遷移之後,在確認 Docker 能正常工作之後,刪除原目錄備份資料:
rm -rf /var/lib/docker.bak

安裝到tf卡

安裝 Docker 映象前,設定安裝位置到隨身碟

首先必須是使用 install-docker.sh 獲得最新版

注意,請確保你的磁碟穩定線上,否則將會程式錯誤無法訪問 docker

停止 Docker 服務

systemctl stop docker

建立資料夾

mkdir -p /mnt/mmcblk1p1/docker

賦予許可權

chmod 777 -R /mnt/mmcblk1p1/docker

安裝rsync

sudo apt-get install rsync

移動整個/var/lib/docker目錄到資料盤的目的路徑

rsync -avzP /var/lib/docker /mnt/mmcblk1p1/

刪除原目錄資料

rm -rf /var/lib/docker

編輯配置檔案

vi /lib/systemd/system/docker.service
找到
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
插上一句 --data-root /mnt/sda1/docker 變為如下:
ExecStart=/usr/bin/dockerd --data-root /mnt/mmcblk1p1/docker -H fd:// --containerd=/run/containerd/containerd.sock

重啟docker.

systemctl daemon-reload
systemctl start docker

相關文章