当前位置: 首页 > news >正文

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

目录

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提供的工具或第三方备份解决方案来制定和执行备份策略。

相关文章:

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

目录 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 备份当前…...

新加坡服务器延迟大吗?如何进行优化

新加坡服务器延迟大吗&#xff1f;新加坡服务器的延迟通常在全国平均延迟111ms左右&#xff0c;其中移动网络约为90ms&#xff0c;联通网络106ms&#xff0c;电信网络最低约为85ms。为了进行优化&#xff0c;一般可以采取使用CDN、优化路由线路、增加带宽和服务器升级等方法。 …...

uniapp——列表图片加载太多且空间占用太大的处理方法(降低清晰度)

解决方法 列表默认显示的降低清晰度&#xff0c;预览图片的时候加载原图。 如果图片是上传到阿里云的OSS上&#xff0c;可以快速获取图片缩略图的方法 直接在后端返回的URL后面拼接字符串&#xff1a; XXX.png?x-oss-process 缩略图方法介绍&#xff1a; ?x-oss-proces…...

spring+SSM+Mybatis面试题(上)(30道)

目录 1. 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗?2. Spring IOC 如何理解?3. Spring DI 如何理解?4. Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?1.配置作用域需要注解Scope(“Singleton”)2.开启延迟加载&#xff1a;La…...

odoo17 翻译一个小bug

odoo17 翻译一个小bug 用户界面的没译过来 标红处&#xff0c;但在zh_CN.po中明显已经翻译过来了&#xff0c;采取暴力点的&#xff0c;直接把base下的base.pot删除&#xff0c;再更新一下&#xff0c;可以正常显示了...

sqli-labs-php7-master第5-10关

第五关&#xff1a; 根据提示输入ID,随便来个一 输入100&#xff0c;因为数据库没有&#xff0c;所以这里没输出内容 还是先找注入点&#xff1a;输入单引号试试 注入点找到了‘ 查询数据库列数&#xff1b;&#xff1f;id1 order by 4 -- 测试发现order by 3时页面正常&…...

全方位教程:接入视频美颜SDK与直播美颜插件的完整步骤

今天&#xff0c;小编将为您详细介绍如何接入视频美颜SDK与直播美颜插件的完整步骤。 一、准备工作 开发环境的搭建 在开始集成之前&#xff0c;确保您的开发环境已配置完毕。无论是使用iOS、Android&#xff0c;还是Web开发&#xff0c;您都需要准备好对应的开发工具链&…...

Apache Curator 分布式锁的介绍,以及案例

可重入锁&#xff08;InterProcessMutex&#xff09;&#xff1a;这种锁允许同一个客户端多次获取同一把锁而不会被阻塞&#xff0c;类似于Java中的ReentrantLock。它通过在Zookeeper的指定路径下创建临时序列节点来实现锁的功能。如果获取锁失败&#xff0c;当前线程会监听前一…...

自动化测试 — selenium + Java

什么是自动化测试 将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括UI 自动化&#xff0c;接口自动化&#xff0c;单元测试自动化。按照这个金字塔模型来进行自动化测试规划&#xff0c;可以产生最佳的自贡话测试产出投入比&#xff08;ROI &#xff09;&#xff0c…...

【SpringBoot系列】接口参数的默认值与必要性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

茶余饭后(五)

真正出类拔萃的人 往往都是狠角色&#xff0c; 他们具备着一种独特的特质 那就是&#xff1a; 目标清晰 意志如铁 底线分明 同时手段又极为高明 且勤奋不屑 在处于劣势时 他们表现的极为谦逊和低调 像一只温顺无害的小羊羔 然而一旦时机成熟 他们便会毫不犹豫的展现出强…...

【网络编程详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &#x1f525…...

C# winform三层架构 实现增删改查( 显示数据,查询数据 显示,查询篇)

一.留言 上一篇讲解了如何去添加数据&#xff0c;那么本章节我们来做&#xff0c;添加数据后显示&#xff0c;以及咋现有的数据里&#xff0c;查询我们所需要的数据。 二.显示 首先我们看上一篇更新&#xff0c;我们在添加成功后跳转页面显示数据&#xff0c;那么跳转代码只…...

Apache Kylin 系列入门教程

Apache Kylin 是一款开源的分布式分析引擎&#xff0c;主要用于提供SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据集。它能在亚秒级时间内完成PB级别的数据查询。本文将带你一步步了解如何安装、配置和使用Apache Kylin来构建数据仓库&#xff0c;并执…...

如何识别并防御漏洞扫描类攻击

随着网络安全威胁的不断演变&#xff0c;漏洞扫描已成为黑客常用的手段之一&#xff0c;旨在发现目标系统中的弱点以便进行后续攻击。高防服务作为一种专业的安全防护措施&#xff0c;能够在一定程度上识别并阻止这类攻击行为。本文将深入探讨高防服务是如何识别并防御漏洞扫描…...

冷思考:低代码的AI Agent构建平台能创造价值吗?

当前AI 圈中热点讨论的产品&#xff0c;除了以ChatGPT为代表的Chatbot领域&#xff0c;以及以Character.ai 为代表的AI虚拟社交领域&#xff0c;另一个热度较高的领域就是AI Agent领域。 大模型发展到今天&#xff0c;已经基本达成了一个共识&#xff1a;错综复杂的工作任务无…...

Spring Boot如何自定义注解?

1.什么是注解 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元…...

gin框架传入的gin.context参数是池化的

1. gin.context参数不但是池化的&#xff0c;而且是指针 2. 但是gin.context又实现了context的接口。因此&#xff0c;可以当作context去使用 3. 这就会导致一个很严重的问题&#xff1a; 1. 池化导致了复用后的ctx将会将之前使用的ctx中的内容进行覆盖。 2. 实现了context接…...

AWS注册是否必须使用美元银行卡

亚马逊网络服务(AWS)作为全球领先的云计算平台,吸引了众多企业和个人用户。然而,不少人在注册AWS账户时会产生疑问:是否必须使用美元银行卡?实际上,这种说法并不准确。虽然AWS的主要结算货币是美元,但用户在注册和使用过程中有多种支付方式可供选择。我们结合九河云的分析来告…...

Spring IOC 注入的3种方式

Spring IOC 注入的3种方式 1. 构造器注入&#xff08;Constructor Injection&#xff09;2. Setter方法注入&#xff08;Setter Injection&#xff09;3. 字段注入&#xff08;Field Injection&#xff09; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路…...

无人机影像基于机器学习的遥感反演及其结果可视化,定量遥感反演结果出图,相关性分析,指标筛选,特征选择

无人机影像或者卫星遥感反演分类模型的建立&#xff0c;反演模型的可视化制图出图&#xff0c;相关性分析&#xff0c;指标筛选&#xff0c;特征选择。代码太多&#xff0c;可企鹅联系&#xff1a; 指标的相关性分析。572 特征选择&#xff0c;贡献性最大的特征。412 LAI反演&…...

Eclipse插件之Java Dependency Viewer(显示类和包的关系图)

Java Dependency Viewer 插件的作用 Eclipse插件Java Dependency Viewer是一个为Java项目提供依赖关系可视化功能的工具。 在复杂的Java项目中&#xff0c;理解和分析类与类之间、包与包之间的依赖关系是非常有用的。Java Dependency Viewer插件通过生成依赖关系图&#xff0c…...

H5小游戏出海,如何流量变现?

根据数据显示&#xff0c; 90%的轻度休闲游戏收入来自广告&#xff0c;即IAA&#xff08;In-App Advertising&#xff09;。使用这种形式进行变现的游戏类型大多以超休闲游戏为主&#xff0c;玩法简单、游戏内容轻度、风格简洁、游戏时间碎片化且即时娱乐性较高&#xff0c;收益…...

轻空间六大专利优势:引领气膜建筑新时代

在绿色建筑和科技创新的驱动下&#xff0c;轻空间不断突破传统建筑的限制&#xff0c;推出了一系列具有前瞻性和高性能的专利技术。通过这些技术&#xff0c;轻空间不仅为建筑行业注入了新动力&#xff0c;也为未来的气膜建筑设定了更高的标准。 低碳建材&#xff1a;“clearsk…...

LeetCode-day37-2940. 找到 Alice 和 Bob 可以相遇的建筑

LeetCode-day37-2940. 找到 Alice 和 Bob 可以相遇的建筑 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个下标从 0 开始的正整数数组 heights &#xff0c;其中 heights[i] 表示第 i 栋建筑的高度。 如果一个人在建筑 i &#xff0c;且存在 i &…...

unity 判断平台

原文链接 Unity中判断平台的方法 Unity提供了一些方法来判断当前运行的平台&#xff0c;其中包括了判断是否为i0S平台。以下是几种常用的方法1.Application.platform Applicaion,platom 是Unity中的一个枚举类型&#xff0c;用于表示当前运行的平台。可以通过比较 Apication,p…...

PyCharm找不到Python了咋办

Python发生了重装的&#xff0c;且新的路径和原有路径不同&#xff0c;就会出现如下的错误&#xff1a; 解决办法&#xff1a; 点开PyCharm菜单的File/Setting 然后&#xff1a; 有上图的提示&#xff0c;说明需要将原来的venv进行清空。 如此操作之后&#xff0c;原来的红色…...

BRC-100 协议

BRC-100 协议 BRC-100 是一种基于序数理论的可扩展的去中心化计算协议。 BRC-100 协议会以下面的方式定义。未来所有的 BRC-100 协议栈都应该使用类似的规范来定义。 1. 摘要 BRC-100 协议是一种基于序数理论的可扩展的去中心化计算协议。 2. 抽象 BRC-100 协议本质上描述…...

茶余饭后(六)

年少成长的时候&#xff0c;多遇到一些所谓的“坏人”&#xff0c;“烂人”&#xff0c;其实是好的&#xff0c;因为这些人让你见识到了人性最丑陋的一面&#xff0c;他们让你磨炼了心性&#xff0c;在以后遇到难处理的人或事的时候&#xff0c;能够有一定的心理承受能力。遇见…...

秋招复习笔记——八股文部分:网络IP

终于来到了网络的最后一篇&#xff0c;继续加油&#xff01; IP 知识全家桶 IP 基本认识 IP 在 TCP/IP 参考模型中处于第三层&#xff0c;也就是网络层。 网络层的主要作用是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点&#xff08;end to end&#xff09…...