Docker文件迁移到TF卡或者U盘,最大限度减少空间占用
简介: 在docker的使用中随着下载镜像越来越多,构建镜像、运行容器越来越多, 数据目录必然会逐渐增大;当所有docker镜像、容器对磁盘的使用达到上限时,就需要对数据目录进行迁移。
前置工作
在迁移前确认迁移的目标目录空间是否充足
在迁移时需停止docker服务,务必在平台不使用时进行迁移
使用以下命令查询当前docker数据目录安装路径:docker info | grep "Docker Root Dir"
下文以/mnt/mmcblk1p1/docker 这个TF卡上的路径作为要迁移的新 Docker 安装(存储)目录为例子,对于安装在U盘的,一般是/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 镜像前,设置安装位置到U盘
首先必须是使用 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