Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘

摘要:大家在Linux上用Docker部署项目的时候,有时候会部署多个项目,系统盘空间不足,数据盘又挂载有很多空间,这时候就会想要将 Docker 镜像和容器数据迁移到数据盘,本文主要讲解迁移步骤和迁移过程中遇到的一些坑,记录给大家避免再次入坑。

1.Docker基础知识

Docker 是一种容器化平台,可用于将应用程序及其所有依赖项打包到一个标准化的单元中,从而实现快速部署、可移植性和可扩展性。以下是一些 Docker 的基础知识:

(1)容器: Docker 使用容器来打包应用程序及其所有依赖项,包括运行时、系统库、环境变量等。容器是一个独立、可执行的软件包,可以在任何支持 Docker 的环境中运行。

(2)镜像: 镜像是容器的基础,它包含了一个应用程序运行所需的所有文件系统内容、运行时、库和环境变量。镜像是只读的,可用于创建容器实例。

(3)Docker 引擎: Docker 引擎是一个客户端-服务器应用程序,用于创建和管理 Docker 容器。它包括一个守护进程(服务器)和一个 CLI(客户端),通过 REST API 与守护进程通信。

(4)Dockerfile: Dockerfile 是一个文本文件,其中包含一系列指令,用于自动化创建 Docker 镜像。通过 Dockerfile,可以定义容器的环境、运行时设置和启动命令等信息。

(5)Docker 镜像仓库: Docker 镜像仓库是用于存储和分享 Docker 镜像的地方。Docker Hub 是 Docker 官方提供的公共镜像仓库,还有一些私有的镜像仓库,如 Docker Trusted Registry(DTR)等。

(6)Docker 容器网络: Docker 容器可以在自己的网络命名空间中运行,每个容器都有自己的 IP 地址,并且可以与其他容器和主机通信。Docker 提供了多种网络模式,如桥接、主机模式、容器模式等,以满足不同场景下的网络需求。

(7)Docker Volume: Docker Volume 是一种用于持久化数据的机制,它可以在容器之间共享数据,并且在容器被删除后数据仍然保留。可以使用 Docker CLI 或 Docker Compose 来管理 Volume。

(8)Docker Compose: Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,通过一个 YAML 文件来配置应用程序的服务、网络和卷等信息,并且可以一键启动、停止和管理整个应用程序。

以上是 Docker 的一些基础知识,希望能帮助你了解 Docker 的基本概念和用法。

2.将 Docker 镜像和容器数据迁移到数据盘

2.1 操作具体步骤

如果您的 Linux 系统盘空间不足,并且想要将 Docker 镜像和容器数据迁移到数据盘,可以按照以下步骤进行操作:

  1. 停止 Docker 服务:在迁移数据之前,需要停止 Docker 服务。

    bash

    sudo systemctl stop docker
    
  2. 备份数据:为了安全起见,建议在迁移之前备份当前的数据。

    bash

    sudo rsync -a /var/lib/docker /mnt/data/docker-data
    

    这里的 /var/lib/docker 是默认的 Docker 数据存储目录,您需要将其替换为实际的 Docker 数据目录(如果之前已经更改过)。/mnt/docker-data 是新的数据盘挂载点。

  3. 修改 Docker 配置:根据您使用的 Docker 版本,选择使用 "graph" 或 "data-root" 配置项。如果您使用的是 Docker 17.05.0 或更高版本,使用以下配置:

    json

    {"data-root": "/mnt/data/docker-data"
    }
    

    将上述内容保存到 /etc/docker/daemon.json 文件中。

  4. 移动数据:如果您没有在步骤 2 中使用 rsync 进行备份,现在可以手动将数据移动到新的位置。由于已经使用 rsync 备份,这里不再需要移动数据。

  5. 启动 Docker 服务:完成配置后,重新启动 Docker 服务。

    bash

    sudo systemctl start docker
    
  6. 验证迁移:检查 Docker 是否正确地使用新的数据目录,并验证镜像和容器是否正常运行。

    bash

    docker info | grep "Docker Root Dir"
    

    这将显示 Docker 正在使用的根目录,应该与您设置的 "/mnt/docker-data" 匹配。

  7. 清理旧数据(可选):如果确认新数据目录一切正常,可以清理旧的数据目录以释放空间。

    bash

    sudo rm -rf /var/lib/docker
    

在执行这些操作时,请确保您有足够的权限,并且操作过程中不会影响到正在运行的服务。另外,迁移数据时,请确保新数据盘挂载点的文件系统格式是兼容 Docker 的,通常是 ext4 或 xfs。

请注意以下几点:

  • 在操作之前,确保目标磁盘已经挂载并且有足够的可用空间。
  • 如果您的系统正在运行重要的服务,请在迁移前做好充分备份,以防数据丢失。
  • 在移动数据之后,可能需要重新启动 Docker 容器,因为它们可能还在使用旧的数据目录。
  • 如果您的系统使用的是 overlay2 或其他特定的存储驱动,确保新磁盘的文件系统支持这些特性。
  • 如果您在迁移过程中遇到问题,可以随时将数据复制回原来的位置,并恢复原来的配置。

2.2 常见问题1 daemon.json报错

1.1问题描述:修改完daemon后重启(命令:systemctl restart docker)docker报错,如下图所示

1.2问题分析:

上面的问题日志复制到百度和AI去寻找解决方案,常识各种办法去解决还是搞不定,心里贼难受,这时请教了一下办公室里的前辈(广西潘总),他分析说可能是我用的kimi大模型寻找答案踩坑了,然后把重启docker日志实时监听,于是找了以下命令打开另一个窗口执行:

sudo journalctl -u docker.service -f

然后再到原来窗口重启docker,重启命令:

sudo systemctl restart docker

好家伙,终于发现是Docker的配置报错了:无法使用文件 /etc/docker/daemon.json 配置 Docker 守护进程:以下指令与任何配置选项都不匹配:graph,如下图所示:

1.3解决方案:

查看了本人Linux服务器安装的Docker版本号,操作命令和查看如下图所示:

docker --version

我的docker版本号是18.03.1-ce ,大于或等于17.05.0,配置文件不能用graph,将daemon.json

{
  "graph": "/mnt/data/docker-data"
}

graph参数名改成data -root

{"data-root": "/mnt/data/docker-data"
}

然后重启docker,发现问题解决。

2.3 常见问题2 权限不足

1.1 问题描述:修改配置后重启docker,提示权限不足。

1.2 问题分析:操作必须要用原来安装docker的用户账号或者root最高权限用户操作,而且迁移目标确保路径正确,目录也需要授权。

1.3 解决方案:

切换root账号进行操作,切换命令如下,执行后输入root密码即可成功切换

su -

确保 /mnt/docker-data 目录存在并且具有正确的权限。你可以使用以下命令来检查和设置权限:

sudo mkdir -p /mnt/data/docker-data
sudo chown root:root /mnt/data/docker-data
sudo chmod 755 /mnt/data/docker-data

 

3. 将Docker容器镜像移动到另一个磁盘

在Linux系统中,如果你想要将Docker容器镜像移动到另一个磁盘,你可以按照以下步骤操作:

  1. 查找镜像ID: 首先,你需要找到你想要移动的Docker镜像的ID。可以使用以下命令列出所有镜像及其ID:

    docker images
  2. 保存镜像为tar文件: 使用 docker save 命令将镜像保存为tar文件。例如,如果你的镜像ID是 1234567890abcdef,你可以使用以下命令:

    docker save 1234567890abcdef > /path/to/your/disk/mirror.tar

    这里的 /path/to/your/disk/ 是你想要保存tar文件的目标路径。

  3. 删除本地镜像(可选): 如果你不再需要在当前位置保留这个镜像,可以使用 docker rmi 命令删除它:

    docker rmi 1234567890abcdef
  4. 将tar文件移动到目标磁盘: 如果tar文件不在目标磁盘上,你可以使用 mv 命令将其移动:

    mv /path/to/current/disk/mirror.tar /path/to/your/disk/
  5. 在目标磁盘上加载镜像: 在目标磁盘上,使用 docker load 命令加载tar文件:

    docker load < /path/to/your/disk/mirror.tar
  6. 验证镜像: 使用 docker images 命令再次检查,确保镜像已经成功加载到Docker中。

请注意,这个过程不会移动容器的数据卷,如果你的容器有挂载的数据卷,你需要单独处理这些数据卷。另外,确保你有足够的权限来执行这些操作,并且在移动镜像之前停止并删除任何正在使用该镜像的容器。

如果你的Docker守护进程配置为使用特定的存储驱动,你可能需要确保目标磁盘支持该存储驱动,并且Docker守护进程有权限访问该磁盘。

 总结

Linux系统上,若Docker镜像占满系统盘,可迁移至数据盘。首先,停止Docker服务,使用`systemctl stop docker`。接着,通过`rsync -a /var/lib/docker /path/to/new/disk/docker`命令将Docker数据同步到新盘。然后,编辑`/etc/docker/daemon.json`,将`"data-root"`设置为新路径。移动数据后,启动Docker服务,并验证新路径是否生效。确保新磁盘挂载且空间充足,迁移前后做好备份,以防数据丢失。迁移后可能需要重启容器,以使用新数据目录。
 

希望这篇博客能够为你在Docker镜像迁移过程中提供一些启发和指导。如果你有任何问题或需要进一步的建议,欢迎在评论区留言交流。让我们一起探索IT世界的无限可能!


博主还分享了本文相关文章,请各位大佬批评指正:

1、Intellij idea高效使用教程

2、AI编程工具合集

3、CodeGeeX一款基于大模型全能的智能编程助手

4、Git 代码提交注释管理规范

5、解释 Git 的基本概念和使用方式。

6、postman介绍、安装、使用、功能特点、注意事项

7、Windows10安装Docker Desktop(大妈看了都会)

8、02-pycharm详细安装教程(大妈看了都会)

9、01-Python详细安装教程(大妈看了都会)

10、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/142062.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue2的diff算法

Vue2 的虚拟 DOM diff 算法是一种高效的算法&#xff0c;用于比较新旧两个虚拟 DOM 树&#xff0c;找出差异并更新到真实 DOM 上。这个算法的核心在于尽量减少不必要的 DOM 操作&#xff0c;提高性能。 虚拟dom&#xff1a;把DOM数据化&#xff0c;先通过不断地操作数据&#…

数据集 CULane 车道线检测 >> DataBall

数据集 CULane 车道线检测 自动驾驶 无人驾驶目标检测 CULane是用于行车道检测学术研究的大规模具有挑战性的数据集。它由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集。收集了超过55小时的视频&#xff0c;并提取了133,235帧。数据示例如上所示。我们将数据集分为…

【C++算法】前缀和

前缀和 题目链接 前缀和https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%2…

传神论文中心|第25期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;传神社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自…

Java-idea小锤子图标

这一版的idea小锤子图标其实就在这里 点进去就找到了~

mtk7628 网口灯问题

板子上电插入网线到网口&#xff0c;只有wan口灯会亮&#xff0c;插入lan口灯不会亮。对比了ok的代码&#xff0c;先对比设备树&#xff0c;未看到网口相关的GPIO。 mt7628an_WMD-7688A-12816.dts mt7628an_hilink_hlk-7628n.dts 继续查看网口相关代码&#xff0c;加打印&…

在实际LabVIEW开发中,哪些算法是常用的?

在LabVIEW的实际开发中&#xff0c;常用的算法主要集中在数据处理、控制系统、信号处理、图像处理等领域。以下是一些常用算法的介绍&#xff1a; 1. PID控制算法 PID&#xff08;比例-积分-微分&#xff09;控制是LabVIEW中常用的算法之一&#xff0c;广泛应用于工业自动化和…

Leetcode—1184. 公交站间的距离【简单】

2024每日刷题&#xff08;161&#xff09; Leetcode—1184. 公交站间的距离 实现代码 class Solution { public:int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {int clockwise 0;int counterclockwise 0;if(start > desti…

华为防火墙智能选路篇之链路权重(带宽)负载分担

基于链路的权重负载分担&#xff08;真机演示&#xff09; 这里博主采用真机演示&#xff0c;模拟器只能配置没办法模拟出效果&#xff0c;真机能够真实的体验出效果&#xff0c;更好的去理解&#xff0c;所以这边采用真机配置了。环境简化了&#xff0c;防火墙内网接了一台测试…

Zookeeper工作机制和特点

1. Zookeeper工作机制 Zookeeper从设计模式角度来理解&#xff1a; 是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的 注册&#xff0c;一旦这些数据的状态发生变化&#xff0c;Zookeeper就将负责通知…

2-3.Android 存储之存储空间(私有空间、公共空间)

一、内部存储与外部存储 内部存储指位于设备的内部存储空间 外部存储指位于设备的外部存储介质&#xff0c;例如&#xff0c;SD 卡 简单理解&#xff0c;内部存储就是存储在手机自身&#xff0c;外部存储就是存储在手机可以外接的东西&#xff0c;好比电脑的硬盘和 U 盘 二、…

Scratch教学案例 —— 制作生日蛋糕

小虎鲸Scratch资源站-免费少儿编程Scratch作品源码,素材,教程分享网站! 简介 在这个教学案例中&#xff0c;我们将使用Scratch制作一个简单而有趣的生日蛋糕动画。通过这个项目&#xff0c;学生可以学习到如何使用Scratch中的基本编程块进行角色控制、造型切换、舞台背景设置以…

CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)

一、界面预览 1.1 设置透明(整个页面透明80%示例) 限制输入值:10-100(数字太小会不好看见) 1.2 vue标题栏 //注册类与js调用 (async function(

如何从 GitHub 上克隆项目

GitHub 是一个广泛使用的代码托管平台&#xff0c;开发者们可以在上面共享和管理他们的代码。如果你想要快速获取一个项目的代码&#xff0c;可以通过克隆&#xff08;clone&#xff09;仓库来实现。本文将详细介绍如何从 GitHub 上克隆项目的步骤。更多内容&#xff0c;请查询…

中介者模式:提升代码可维护性的利器

一&#xff0c;介绍 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个中介者对象来封装一系列对象之间的交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;可以独立地改变它们之间的交互。 …

CefSharp_Vue交互(Element UI)_WinFormWeb应用(2)---置顶和取消置顶(含示例代码)

一、预览 获取winform的置顶参数,和设置置顶参数 1.1 置顶(默认不置顶) 1.2 示例代码

进程间关系和守护进程

序言 当我们使用指令 ps 查看进程的相关信息时&#xff0c;在以前我们只是关注该进程的 PID(该进程的标识符) &#xff0c; PPID(其父进程的标识符) 以及 STAT(该进程的状态)。  那 PGID 和 SID 又是什么&#xff1f;有什么作用呢&#xff1f; 1. 进程组 1.1 什么是进程组&am…

视频工具EasyDarwin将本地视频生成RTSP给WVP拉流列表

效果 ffmpeg生成rtsp流 EasyDarwin的rtsp端口默认的是10054, 使用ffmpeg将本地视频转到EasyDarwin的rtsp。 F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://127.0.0.1:10054/video11 它的直播…

基于SpringBoot+Vue+MySQL的在线视频教育平台

系统展示 用户前台界面 管理员后台界面 系统背景 随着信息技术的飞速发展和互联网普及率的不断提高&#xff0c;传统教育模式正面临深刻变革。在线视频教育平台作为数字化教育的重要载体&#xff0c;以其灵活性强、资源丰富、覆盖广泛等优势&#xff0c;逐渐成为人们获取知识、…

RS232

What is RS232 Protocol? In RS232, ‘RS’ stands for Recommended Standard. It defines the serial communication using DTE and DCE signals. Here, DTE refers to Data Terminal Equipment and DCE refers to the Data Communication Equipment. Example of DTE device…