首页 > 其他分享 >Docker文件迁移到TF卡或者U盘,最大限度减少空间占用

Docker文件迁移到TF卡或者U盘,最大限度减少空间占用

时间:2024-06-22 16:21:22浏览次数:13  
标签:U盘 lib mnt var mmcblk1p1 TF docker Docker

简介: 在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/

重新启动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 镜像前,设置安装位置到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

标签:U盘,lib,mnt,var,mmcblk1p1,TF,docker,Docker
From: https://www.cnblogs.com/ban1234/p/18262445

相关文章

  • docker命令大全
    dockerattach#连接到正在运行中的容器dockerbuild#使用Dockerfile创建镜像dockerbuilder#管理buildsdockerbuilderprune#清除build缓存dockercheckpoint#管理checkpointsdockercheckpointcreate#从正在运行的容器创建检查点dockercheckp......
  • docker 使用
    docker使用科普名词​平台:docker程序就是一个类似平台一样的程序,为了方便理解,你可以把它比喻为类虚拟机。镜像:技术人员构建的各种包含了特殊环境的可以在docker上运行的独立子系统包。容器:拉取镜像运行后,封装在一个指定的文件夹位置里的子进程。海纳思系统内置......
  • three.js 第八节 - gltf加载器、解码器
    //@ts-nocheck//引入three.jsimport*asTHREEfrom'three'//导入轨道控制器import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'//导入hdr加载器(专门加载hdr的)import{RGBELoader}from'three/examples/jsm/loaders/RGBELoad......
  • Docker部署Nginx1.21.5(保姆级图文教程)
    系列文章目录Docker部署Nginx1.21.5(保姆级图文教程)Docker部署MySQL8.3.0(保姆级图文教程)文章目录一、环境二、拉取镜像2.1查找DockerHub上的nginx镜像2.2拉取Nginx镜像2.3查看Nginx镜像三、在宿主机创建目录四、启动临时容器,拷贝nginx容器内配置文件4.1启动......
  • Docker部署MySQL8.3.0(保姆级图文教程)
    系列文章目录Docker部署Nginx1.21.5(保姆级图文教程)Docker部署MySQL8.3.0(保姆级图文教程)文章目录一、环境二、拉取镜像2.1查找DockerHub上的MySQL镜像2.2拉取MySQL镜像2.3查看MySQL镜像三、在宿主机创建目录3.1创建挂载目录3.2创建配置文件四、启动MySQL......
  • nssctf (2)
    misc*1.转为十六进制编码先是放入winhex,没有发现什么。然后属性也没有。就放入binwalk分离得到一个文档 S1ADBBQAAQAAADkwl0xs4x98WgAAAE4AAAAEAAAAY29kZePegfAPrkdnhMG2gb86/AHHpS0GMqCrR9s21bP43SqmesL+oQGo50ljz4zIctqxIsTHV25+1mTE7vFc9gl5IUif7f1/rHIpHql7nqKPb+2M......
  • Crypto(18)——CTFHub
    栅栏解救signinlittleRSA脚本:点击查看代码importmodc=32949n=64741e=42667p=Noneforiinrange(2,n):ifn%i==0:p=ibreakq=n//pem=mod.Mod(e,(p-1)*(q-1))d=int(1//em)cm=mod......
  • Misc(17)——CTFHub
    Gradientsky下载题目附件,是一张图片:查看属性:无重要信息,拖入010中,搜索ctf,得到flag:word文件本质下载附件,是一个word文件,打开一堆文字:楚人居贫,读《淮南子》,得“螳螂伺蝉自障叶,可以隐形”,大喜。遂于树下仰望,欲觅螳螂伺蝉自障叶。偶见之,即缘而摘之,然不慎叶落树下。树下先有落......
  • Docker构建不同平台架构(x86、arm)镜像
    在Dockerfile同级目录下,image:tag替换成镜像名称和tag:构建x86系统镜像:dockerbuildxbuild-timage:tag--platform=linux/amd64.构建arm镜像:dockerbuildxbuild-timage:tag--platform=linux/arm64.构建完成后查看镜像适用系统架构:dockerinspectimageId注......
  • Docker 主机网络和空网络
    在docker的网络设置有,默认有三种类型的网络,分别是bridge、host和null,如下图所示:     在启动容器时,如果不指定网络参数,则默认使用bridge网络,而另外两种类型的网络则使用的较少,而在本文中,我们将探讨这两种预定义且有些独特的网络类型,即docker主机网络和空网络。主机......