场景

在docker的使用中随着下载镜像越来越多,构建镜像、运行容器越来越多, 数据目录必然会逐渐增大;当所有docker镜像、容器对磁盘的使用达到上限时,就需要对数据目录进行迁移。

如何避免:

1.在安装前对/var/lib/docker(docker默认数据存储目录)目录进行扩容;

2.在docker安装完成后,修改docker默认存储位置为磁盘容量较大的位置;规避迁移数据过程中造成的风险。

前置工作

  1. 在迁移前确认迁移的目标目录空间是否充足
  2. 在迁移时需停止docker服务,务必在平台不使用时进行迁移

使用以下命令查询当前docker数据目录安装路径:

docker info | grep "Docker Root Dir"

下文以 /home/rain/docker 这个路径作为要迁移的新 Docker 安装(存储)目录

迁移方案

方法一:软链接

停掉Docker服务:

systemctl stop docker

根据上面查到的路径,移动整个/var/lib/docker目录到数据盘的目的路径(没有rsync命令时需安装rsync):

rsync -avzP /var/lib/docker  /home/rain/

参数解释:

-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

方法三:通过mount挂载的bind命令

备份 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

Docker数据目录迁移解决方案的更多相关文章

  1. docker数据目录迁移

    一.描述 docker默认的数据目录为/var/lib/docker,有的系统数据盘挂载在其他目录下,比如/home为数据盘,这时需要将docker数据目录更改,除了修改docker配置文件的方法,还 ...

  2. HDFS数据迁移解决方案之DistCp工具的巧妙使用

    前言 在当今每日信息量巨大的社会中,源源不断的数据需要被安全的存储.等到数据的规模越来越大的时候,也许瓶颈就来了,没有存储空间了.这时候怎么办,你也许会说,加机器解决,显然这是一个很简单直接但是又显得 ...

  3. Hadoop数据目录迁移

    Hadoop数据目录迁移 @(Hadoop) 随着数据的不断导入和增大,原本集群部署的目录磁盘空间不足了,所以要把hadoop存储数据的位置迁移到另外一个巨大的磁盘上,另外的一个用意是将数据和程序分离 ...

  4. Docker备份迁移

    目录 Docker备份迁移 1.容器保存为镜像 2.镜像打包成压缩文件 3.把压缩文件恢复成镜像 Docker备份迁移 1.容器保存为镜像 将已经装好各种软件的容器再次打包为镜像,这样下次直接装这个镜 ...

  5. docker gitlab迁移 备份 部署 搭建以及各种问题

    当前环境 服务器A 服务器B ubuntu docker gitlab(版本一致) docker安装gitlab 由于考虑到gitlab 包含了⾃身的nginx.数据库.端⼝占⽤等等因数,这⾥使⽤的是 ...

  6. Docker - 手动迁移镜像

    在没有Docker Registry时,可以通过docker save和docker load命令完成镜像迁移的过程,先将镜像保存为压缩包,然后在其他位置再加载压缩包. 将镜像保存为压缩包文件 [ro ...

  7. docker镜像文件的导入与导出(docker镜像迁移)

    1.查看镜像ID # docker images [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myto ...

  8. docker的完整解决方案2

    这个解决方案很简单 使用docker自带的swarm 首先初始化集群 docker swarm init 然后其余节点加入集群,这个就不说,太简单了 集群初始化后,可以查看下集群状态 docker n ...

  9. XTTS系列之一:U2L迁移解决方案之XTTS的使用

    本系列的定位是对XTTS及相关技术进行深入的学习研究.作为本系列的开篇,本着实用性的原则,我先把一次实际生产环境U2L的迁移实战实施方案进行提炼简化,旨在能清楚说明该如何使用XTTS这种解决方案来进行 ...

随机推荐

  1. 带你学习Python-基础知识的框架梳理

    对于编程初学者来说,在刚刚开始学习Python语言的时候,需要学习的内容有不少,比如计算机原理.网络.Web前端.后端.架构. 数据库都是必须掌握的知识点.因此初学者常常会陷入"只见树木,不 ...

  2. python函数收集不确定数量的值

    python写函数的时候,有时候会不确定到底传入多少值. 首先是,*args,单星号参数收集参数: 1 #!usr/bin/python 2 #-*-coding:utf-8-*- 3 4 #定义一个 ...

  3. SQL 查询增加语句

    Select 'Insert into Auth_Key Values('''+convert(nvarchar(50),NEWID())+''','''+AuthKey+''',''' +Modul ...

  4. AWS中国区使用https访问部署在S3上的网站

    问题描述 最近一个项目需要通过https的方式访问部署在S3上的网站,通过搜索引擎找到一篇文章,可以在AWS Global实现整个过程.但是目前AWS中国区有限制,CloudFront不能使用AWS ...

  5. java时间的一些处理

    获取当前时间 System.currentTimeMillis() //第一种 Date date = new Date(); System.out.println(date.getTime()); ...

  6. Jquery真的不难~第一回 编程基础知识

    Jquery真的不难~第一回 编程基础知识   回到目录 前言 说Jquery之前,先来学习一下Javascript(以后简称为JS)语言中的基础知识问题,其时对于每种编程语言来说基础知识都是大同小异 ...

  7. 【Linux】使用笔记

    前言 搜狗输入法,作为我体验最好的一个输入法,一直陪我从小学走到了现在,优麒麟线上发布会时,搜狗团队代表用"聪明"来形同它,事实也确实如此,它能十分人性地记录使用者常用的热词,并且 ...

  8. Redis缓存篇(二)淘汰机制:缓存满了怎么办?

    上一讲提到,缓存的容量总是小于后端数据库的.随着业务系统的使用,缓存数据会撑满内存空间,该怎么处理呢? 本节我们来学习内存淘汰机制.在Redis 4.0之前有6种内存淘汰策略,之后又增加2种,一共8种 ...

  9. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  10. 【Flutter】容器类组件之Container容器

    前言 Container是一个组合类容器,它本身不对应具体的RenderObject,它是DecoratedBox.ConstrainedBox.Transform.Padding.Align等组件组 ...