场景

在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

最新文章

  1. 基于OpenSLL的RSA加密应用(非算法)
  2. 2Struts2基础----青软S2SH(笔记)
  3. jQueryt过滤选择器
  4. python和nodejs的aes128加密对比
  5. php连接多数据库
  6. c c++怎么判断一个字符串中是否含有汉字
  7. ADT公司G729 方案指标
  8. (转)@SuppressWarnings的使用、作用、用法
  9. c#中$.ajax的使用
  10. Loadrunner脚本录制注意事项(七)
  11. 配置 VirtualBox backend - 每天5分钟玩转 Docker 容器技术(75)
  12. Jdbc访问数据库篇
  13. 关于字符latin capital letter sharp s "ß"( U+1E9E)显示的问题
  14. 整理的Java List Set Map是否有序,元素是否允许重复
  15. 10个Python基础练习项目,你可能不会想到练手教程还这么有趣
  16. “天龙八步”细说浏览器输入URL后发生了什么
  17. python早期看书笔记
  18. RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
  19. Java 多线程(四)之守护线程(Daemon)
  20. 单元测试——测试神器,testng

热门文章

  1. $$ PHP 的含义
  2. PHP可回调类型
  3. oracle 19c dataguard aws ORA-03186报错
  4. 如何优雅排查现网服务器cpu飙高的问题
  5. vue+element对常用表格的简单封装
  6. flowable的多人会签和一票否决
  7. [leetcode72]166. Fraction to Recurring Decimal手动实现除法
  8. HTML颜色
  9. 表单综合HTML
  10. 有关em的个人理解