簡介: 在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/
重新啟動dockersystemctl 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