VMware虚拟机和Docker的备份与恢复

news2024/9/21 16:38:19

目录

1. VMware虚拟机的快照备份

1.1 VMware本机的快照备份

1.2 VMware快照备份到另一电脑

2. Docker知识点

2.1 Docker镜像和容器的关系

2.2 Docker的存储卷

2.3 Docker命令简介

2.4 删除Anylink镜像

3. Docker备份和恢复

3.1 确定要回滚的容器和版本

3.2 备份当前容器(可选)

3.3 备份存储卷

3.4 停止并删除当前容器

3.5 获取指定版本的镜像

3.6 运行指定版本的容器

3.7 验证回滚和注意事项


1. VMware虚拟机的快照备份

1.1 VMware本机的快照备份

        VMware虚拟机的快照功能,应该能手动把所有东西都备份和恢复,包括Docker的镜像,如果是数据出问题,回滚到某个版本,应该手动把数据备份然后快照就行了,不过磁盘空间占用有点大。(虚拟机的备份与恢复也完成了Docker容器和存储卷的备份与恢复)

下面是步骤

将上面文件当成快照1保存,然后在此基础添加以下文件(圈出来的都是新加的,除了anylink镜像)

恢复到快照1

数据完全恢复到初始状态:

再恢复到快照2:

  • 创建快照:在VMware虚拟机安装或配置过程中,特别是在进行重要更改之前,应创建虚拟机的快照。这样,如果后续出现问题,可以从快照点快速恢复到之前的状态。
  • 恢复快照:在VMware vSphere Client或VMware Workstation中,找到虚拟机并选择“快照”选项。从快照列表中选择要恢复的点,然后点击“恢复到此状态”或类似选项。

注意:快照虽然方便,但过多或过旧的快照可能会占用大量磁盘空间并影响性能。因此,建议定期清理不再需要的快照。


1.2 VMware快照备份到另一电脑

VMware虚拟机快照保存位置应该就是保存在Windows电脑的磁盘上:

可以通过以下步骤把VMware快照备份到另一电脑

方法一:使用克隆功能(适用于VMware Workstation)

  1. 关闭虚拟机:首先,确保目标虚拟机已关闭。
  2. 克隆虚拟机:在VMware Workstation中,选中目标虚拟机,点击上方工具栏中的“虚拟机”>“管理”>“克隆”。
  3. 选择快照进行克隆:在克隆向导中,选择“现有快照(仅限关闭的虚拟机)”,然后选择你想要克隆的快照。
  4. 设置克隆选项:选择克隆类型(链接克隆或完整克隆),并设置新虚拟机的名称和目标位置。
  5. 完成克隆:按照向导完成克隆过程。克隆完成后,你可以在另一台电脑上打开VMware Workstation,并导入克隆得到的虚拟机文件(.vmx文件)。

方法二:手动复制虚拟机文件(适用于VMware ESXi和Workstation)

  1. 关闭虚拟机:确保目标虚拟机已关闭。
  2. 访问数据存储:使用vSphere Web Client(对于ESXi)或Windows文件资源管理器(对于Workstation)访问虚拟机所在的数据存储。
  3. 复制虚拟机文件:找到虚拟机文件夹,复制其中的所有文件(包括快照文件)。
  4. 转移文件:将复制的文件转移到另一台电脑上的相应位置。
  5. 注册虚拟机:在另一台电脑上,使用vSphere Web Client(对于ESXi)或VMware Workstation(对于Workstation)注册新的虚拟机。选择复制过来的虚拟机文件夹中的.vmx文件进行注册。
  6. 恢复快照:注册完成后,打开虚拟机电源,并根据需要恢复特定的快照。

2. Docker知识点

2.1 Docker镜像和容器的关系

        Docker镜像相当于C++/Java的“类”,容器是“对象”,是镜像的运行实体,是一个应用进程。如下图一个镜像可以启动多个容器,Docker daemon里放着存储卷,是存储在本机磁盘的。


2.2 Docker的存储卷

按照上面的类比(面向对象语言的“类和对象”,“镜像和容器很好理解”,现在了解下“存储卷”)

        存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系(比如Anylink项目 conf 里的文件)。这就意味着,在容器中的这个目录下写入数据时(如anylink网页操作就会往容器目录写数据),容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。卷的本质是文件或者目录。

存储卷的特性:

  1. 可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。
  2. 宿主机的/data/web 目录与容器中的/container/data/web 目录绑定关系,然后容器中的 进程向这个目录中写数据时,是直接写在宿主机的目录上的,绕过容器文件系统与宿 主机的文件系统建立关联关系,使得可以在宿主机和容器内共享数据库内容,让容器直接访问宿主机中的内容,也可以宿主机向容器写入内容,容器和宿主机的数据读写是同步的。
  3. 容器销毁了,容器指定的存储卷不会销毁。

为什么需要存储卷?

  • 数据丢失问题,容器按照业务类型,总体可以分为两类: ①无状态的(数据不需要被持久化)②有状态的(数据需要被持久化) 显然,容器更擅长无状态应用。因为未持久化数据的容器根目录的生命周期与容器的生命周期一样,容器文件系统的本质是在镜像层上面创建的读写层,运行中的容器对任何文件的修改都存在于该读写层,当容器被删除时,容器中的读写层也会随之消失。 虽然容器希望所有的业务都尽量保持无状态,这样容器就可以开箱即用,并且可以任意调度,但实际业务总是有各种需要数据持久化的场景,比如 MySQL、Kafka 等有状 态的业务。因此为了解决有状态业务的需求,Docker 提出了卷(Volume)的概念。
  • 性能问题,UnionFS 对于修改删除等,一般效率非常低,如果对一于 I/O 要求比较高的应用,如 redis 在实现持化存储时,是在底层存储时的性能要求比较高。
  • 宿主机和容器互访不方便,宿主机访问容器,或者容器访问要通过 docker cp 来完成,应用很难操作。
  • 容器和容器共享不方便。

存储卷的使用。

存储卷有三种,这里只介绍最常用的绑定卷。

-v 参数创建卷


2.3 Docker命令简介

docker 的常用命令:

#镜像命令
docker images:列出所有镜像
docker search [image]:搜索 Docker 镜像
docker pull [image]:拉取指定镜像
docker rmi [image]:删除指定镜像
#容器命令
docker ps:列出当前所有正在运行的容器
docker ps -a:列出所有容器,包括已经停止的容器
docker create [image]:创建一个新的容器,但不启动它
docker start [container]:启动一个容器
docker stop [container]:停止一个容器
docker rm [container]:删除一个容器
docker exec -it [container] [command]:在运行中的容器中执行命令
#其他命令
docker info:显示 Docker 系统信息
docker version:显示 Docker 版本信息
docker logs [container]:查看容器的日志
docker network ls:列出 Docker 网络
docker network create [network]:创建一个新的 Docker 网络
docker network connect [network] [container]:将容器连接到指定的 Docker 网络
docker network disconnect [network] [container]:将容器从指定的 Docker 网络中断开连接 

2.4 删除Anylink镜像

  1. 停止并删除使用该镜像的容器
    首先,你可以停止并删除正在使用这个镜像的容器。使用以下命令:

    docker stop 05d3701e38ad
    docker rm 05d3701e38ad

    然后,你可以尝试再次删除镜像:

    docker rmi bjdgyc/anylink

    或者,如果你知道镜像的确切 ID 或部分名称,也可以使用:

    docker rmi cfd0134cbd8a
  2. 使用 --force 或 -f 选项强制删除镜像
    如果你确定要删除镜像,即使它正在被使用,你也可以使用 --force 或 -f 选项来强制删除。但请注意,这可能会导致使用该镜像的容器无法正常工作。

    docker rmi -f bjdgyc/anylink

    或者,如果你知道镜像的确切 ID:

    docker rmi -f cfd0134cbd8a
  3. 检查并删除所有使用该镜像的容器
    如果你不确定哪些容器正在使用这个镜像,你可以使用以下命令来查找所有使用该镜像的容器,并逐一停止和删除它们:

    docker ps -a --filter reference=bjdgyc/anylink

    这个命令会列出所有使用 bjdgyc/anylink 镜像的容器。然后,你可以按照上面的方法停止并删除这些容器。

        选择哪种方法取决于你的具体需求和你是否愿意冒删除正在运行的容器的风险。通常,停止并删除容器是最安全的方法。


3. Docker备份和恢复

        当Docker数据出现问题时,回滚到某个版本通常涉及Docker镜像和容器的管理。以下是一系列步骤,可以帮助你回滚Docker数据到某个特定版本:

3.1 确定要回滚的容器和版本

        首先,你需要确定哪个容器出现了问题,以及你想要回滚到的具体版本,(版本没有变化就不用标签)。这通常需要你事先已经为Docker镜像打上了不同的标签(tag),每个标签对应一个不同的版本。

3.2 备份当前容器(可选)

在回滚之前,强烈建议备份当前的容器状态,以防万一回滚后的版本不符合预期,可以恢复到当前状态。你可以使用docker commit命令将容器的当前状态保存为一个新的镜像。

docker commit <container_id> <new_image_name>:<tag>

备份演示:(备份成1.5,下下张图片是Anylink网页状态,四个组)

添加一组测试组后备份为标签1.6:(此时备份的时候是五个组)

3.3 备份存储卷

在根目录拷贝备份/conf文件为/conf2:


3.4 停止并删除当前容器

在回滚之前,你需要停止并删除正在运行的容器。这可以通过docker stopdocker rm命令来完成。

docker stop <container_id>
docker rm <container_id>

现在停止正在运行的Anylink容器:


3.5 获取指定版本的镜像

        如果你已经有一个带有特定版本标签的镜像,你可以直接拉取(如果镜像不在本地的话)或使用该镜像。如果镜像不在本地且你也没有拉取权限,你可能需要从镜像仓库中拉取。

docker pull <image_name>:<version>

现在镜像在本地了,就不用操作了。


3.6 运行指定版本的容器

一旦你有了指定版本的镜像,你就可以使用docker run命令来启动一个新的容器,该容器将基于你选择的版本运行。

docker run -d <image_name>:<version>

如果你需要挂载数据卷或设置其他启动参数,也可以在docker run命令中指定。

这里的 run 命令应该只用把宿主机的conf改名字就行,app/conf不用改,现在恢复到有测试组7的数据,此时假设出了问题,此时conf是存在的,或者之前某一时间段把conf拷贝备份成了一个目录(比如前面的conf2),也可以恢复到当时目录的状态,

现在在anylink创建一个问题组代表出问题了,(创建的测试组3_conf可以理解为正常的创建,或者现在先无视):

此时可以删除容器,或者是容器出问题自动删除,然后用之前备份的conf2文件再起一个容器:

docker run -d \
    --name anylink \
    --restart always \
    --privileged=true \
    -p 55555:443/tcp \
    -p 55555:443/udp \
    -p 8800:8800/tcp \
    -p 8800:8800/udp \
    -v /conf2:/app/conf \
bjdgyc/anylink -c=/app/conf/server.toml

此时就成功恢复到了没有问题组,即没有出问题的状态:

3.7 验证回滚和注意事项

        启动新容器后,你应该验证回滚是否成功。这通常包括检查容器的运行状态、应用程序的日志以及数据是否按预期恢复。可以通过docker inspect 镜像名/ID来验证。

注意事项

如果是以下指令,就会恢复成初始状态了。因为app/conf2是原本不存在的:


  • 数据持久化:如果容器中的数据很重要,你应该在创建容器时使用数据卷(volume)或绑定挂载(bind mount)来持久化数据。这样,即使容器被删除,数据也会保留在宿主机上,并可以在新容器中重新挂载。
  • 版本控制:良好的版本控制实践是避免数据丢失和快速恢复的关键。为Docker镜像打上清晰的版本标签,并在每次重大更改后保存新的镜像版本。
  • 备份策略:定期备份Docker镜像和容器数据是确保数据安全的重要措施。你可以使用Docker提供的工具或第三方备份解决方案来制定和执行备份策略。

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

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

相关文章

UE开发中的设计模式(二) —— 中介者模式

上一篇文章介绍了观察者模式如何降低观察者和目标之间的耦合&#xff0c;并通过一个实例具体实现了观察者模式&#xff0c;本篇文章从上篇文章的实例继续&#xff0c;介绍中介者模式是如何带来对象间进一步的松耦合。 文章目录 问题提出概述问题解决总结优点缺点模式应用 参考资…

Powershell 禁用系统更新

创建一个关闭系统更新脚本 脚本系统兼容10,11,2012,206,2019,2022,2025powershell-install-stop-System-update.ps1 <# Powershell Install stop System update +++++++++++++++++++++++++++++++++++++++++++++++++++++ + _____ _____ _ …

【竞技宝】奥运会:法国国奥VS西班牙国奥

北京时间8月10日法国国奥在巴黎奥运会男足决赛中跟西班牙国奥狭路相逢&#xff0c;这场比赛对于主帅亨利来说&#xff0c;有着极为特殊的意义。因为&#xff0c;亨利将带领法国国奥队冲击他执教生涯首枚奥运会金牌。法国足协邀请亨利出任国奥队主帅&#xff0c;就是希望他能带领…

Mac 连接 Synology NAS【Finder】

对于 Mac 用户&#xff0c;建议使用 Finder 或 Cyberduck 通过WebDAV连接到Synology NAS 在上一篇文章中介绍了如何使用【Cyberduck 】连接到Synology NAS 这一篇文章介绍【Finder】连接到Synology NAS 相关文章&#xff1a; 注重任如何使用 Synology NAS 的套件或其他软件…

纸质文物的数字化革命:RFID技术的应用与影响

在这个数字化的时代&#xff0c;我们见证了技术的革新如何将历史重新点燃。纸质文物&#xff0c;这些人类文明的宝贵篇章&#xff0c;正经历一场由RFID技术引领的革命。 数字化浪潮不仅改变了我们的生活&#xff0c;也重塑了我们保护和传承历史的方式。纸质文物的数字化管理&am…

代码随想录训练营 Day24打卡 回溯算法part03 93. 复原IP地址 78. 子集 90. 子集II

代码随想录训练营 Day24打卡 回溯算法part03 一、 力扣93. 复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1…

扩展【从0制作自己的ros导航小车】C++_ROS_QT5联合编译,简单界面为ROS开发增添交互

从0制作自己的ros导航小车 前言一、环境搭建二、联合编译三、测试 前言 前面已经实现了导航功能&#xff0c;对于之后的一些开发&#xff0c;有交互能力是比较重要的&#xff0c;比如小车上连接一块屏幕&#xff0c;通过屏幕来选择模式&#xff0c;可视化等等。QT是不错的选择…

2024年云计算企业CRM应用与选型研究报告

数字化时代&#xff0c;所有行业都在经历着数字化转型带来的效率革命。在业务流程、协同办公、数据收集和利用、决策方式等诸多方面&#xff0c;在数字化转型的加持下&#xff0c;各行各业的企业都会经历从低效到高效、从无序杂乱到标准化流程和数据驱动决策的成长蜕变。 在IC…

LeetCode 100道题目和答案(一)

1.两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按…

【安卓】SQLite数据库存储-创建数据库与增删改查

文章目录 创建数据库更新数据库增加数据修改数据删除数据查询数据 安卓专门提供了一个SQLiteOpenHelper帮助类&#xff0c;借助这个类可以非常简单地对数据库进行创建和升级。SQLiteOpenHelper是一个抽象类&#xff0c;使用它需要创建一个自己的帮助类去继承它。SQLiteOpenHelp…

巴黎同款,六自由度技术还原赛场决定性瞬间!

现代纪实摄影大师亨利布列松&#xff0c;曾提出了“决定性瞬间”&#xff08;The Decisive Moment&#xff09;理论——拍摄者捕捉到的画面越稍纵即逝&#xff0c;越难以复制&#xff0c;越宝贵。 很多摄影师的经典作品&#xff0c;都来自那决定性的千分之一秒。 ● 布列松摄于…

OpenCV 读取 MP4 视频

在 C 中结合 OpenCV 库来读取 MP4 视频文件是一个常见的任务。以下是一个简单的示例程序&#xff0c;说明了如何使用 OpenCV 的 VideoCapture 类来打开一个 MP4 文件并逐帧显示每一帧。 VideoCapture::VideoCapture(const string& filename)&#xff1b;参数&#xff1a;f…

一个Android下载网络图片显示并保存到系统相册的完整案例

文章目录 1. 案例简介1.1 效果演示 2. 工程配置3. 网络层3.1 网络接口定义3.2 Retrofit工具类 4. 主界面及完整代码4.1 完整主界面代码 ImageDownloadActivity4.2 布局文件 5. 总结 1. 案例简介 在 Android开发 中&#xff0c;下载图片保存到本地是常见的需求&#xff0c;看似…

一个简单的录音软件(利用QT录音,ffmpeg进行音频重采样,fdk-aac编码)

录音软件是一种非常有用的工具&#xff0c;可以帮助我们记录和存储语音信息。在本文中&#xff0c;我们将介绍一个简单的录音软件&#xff0c;该软件利用QT进行录音&#xff0c;使用ffmpeg进行音频重采样&#xff0c;并使用fdk-aac编码。 一、 环境介绍 1、QT版本: QT5.…

绕过微信电脑版旧版本限制,版本过低不给登录的问题

这张图&#xff0c;对于还在使用低版本微信电脑版的人很熟悉了吧&#xff01;因为微信逐步开始限制低版本的客户端了&#xff0c;导致无法登陆进去。 为什么这么多人还在使用旧版&#xff1f; 因为很多机器人、框架、HOOK版本的微信等等都是在旧版的基础上开发的&#xff0c;…

嘉立创PCB板子降层(从4层到2层实例)

降层导致的改变 走线和连接&#xff0c;若想正常设计先把要用的内容全部移动到其他层。若不使用可以按照下面方式全部删除。 删除定义使用的规则 删除在需要删除层的走线等所有内容

相同的 LLM 在「不同 GPU 上」会产生不同输出?为什么?

编者按&#xff1a; 在大语言模型(LLMs)的部署及其相关的算力扩容过程中&#xff0c;更换 GPU 是否也可能会对模型的输出产生重大影响&#xff1f;这个问题的答案对于确保 LLMs 在不同硬件环境下的一致性和可靠性至关重要。 我们今天为大家带来的这篇文章&#xff0c;作者的核心…

利用docker部署图形化工具 portainer

docker查找图形化工具 Portainer 拉取镜像 docker pull portainer/portainer启动docker UI容器 docker run -d -p 9209:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /opt/data3/mydocker/portainer_data:/data portainer/porta…

MFC多个控件组合存在显示不出来现象

MFC多个控件组合存在显示不出来现象 1、找到rc文件 &#xff0c; 右键查看代码 2、 3、将基础组件放在最前面即可

C++(week16): C++提高:(六) Qt基础

文章目录 零、课前须知一、Qt基础1.CLI与GUI2.事件驱动模型3.Qt快捷键 二、QtCreator1.Qt的安装&#xff1a;Qt框架、IDE2.Qt的六大模式3.核心模块4.布局5.Qt项目中的文件6.信号与槽机制7.添加资源&#xff1a;资源文件qrc8.main.cpp解析(1)ui文件 和 纯代码(2)按钮 信号槽机制…