Docker③_VMware虚拟机和Docker的备份与恢复

news2024/11/26 16:34:08

目录

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/2035420.html

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

相关文章

【C语言-扫雷游戏】mineweeper【未完成】

编程小白如何成为大神&#xff1f;大学新生的最佳入门攻略 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&…

psychopy stroop 实验设计

斯特鲁stroop实验就是色词一致/不一致实验。 设计步骤如下&#xff1a; 1. 先去设置中将Input改为PsychToolbox&#xff0c; 2. 然后左上角File-New新建一个 3. 右键trial&#xff0c;rename改名 改成自己想要的名字即可&#xff0c;比如欢迎界面welcome。 4. 接下来添加提示语…

老阳推荐的temu选品师项目能不能做成?

在不断变化的电商领域&#xff0c;temU选品师项目作为一种新兴职业&#xff0c;受到了越来越多的关注。老阳的推荐使得这一项目引起了不少人的兴趣&#xff0c;那么&#xff0c;temU选品师项目究竟能否成功呢?让我们从一个新的角度来探讨这一问题。 新兴市场的机遇与挑战 temU…

C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

目录 题目要求 代码思路 代码实现 题目要求 写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串 例如 s1 "AABCD" &#xff1b;s2 "BCDAA" &#xff0c;返回1 s1 "AABcd" &#xff1b;s2 "BCDAA" …

免费分享一套SpringBoot+Vue仓库(进销存)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue仓库(进销存)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue仓库(进销存)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 该系统的设计初衷是解决传统仓库管理中存…

高可用集群KEEPALIVED

文章目录 高可用集群KEEPALIVEDVRRPkeepalived 部署环境准备 开启通信功能设置独立日志设置独立子配置文件抢占模式和非抢占模式延迟抢占非抢占模式 单播模式邮箱邮件通知脚本 双主架构实现ipvs的高可用性lvs-dr VRRP Script实现HAProxy高可用 文章相关连接如下&#xff1a; 如…

力扣 | 动态规划 | 在字符串的应用 | 最长回文子串、最长回文子序列、单词拆分、编辑距离

文章目录 1.最长回文子串2.最长回文子序列3.单词拆分4.编辑距离5. 共同点和思路6. 各个问题的思路和扩展1. 最长回文子串2. 最长回文子序列3. 单词拆分4. 编辑距离 在解答字符串动态规划的应用时&#xff0c;我们需要非常注意一个问题&#xff1a;   有时候我们定义 d p [ i …

MoonBit 周报 Vol.53:新增高级循环语法、引入字符串插值、MoonBit AI 支持代码解释!

weekly 2024-08-05 MoonBit更新 添加了基于 Iter 和 Iter2 类型的 for .. in 循环支持&#xff1a; fn main {for x in [ 1, 2, 3 ] {println(x)}for k, v in { "x": 1, "y": 2 } {println("\{k} > \{v}")} }for 与 in 之间可以使用 1&…

事务及事务的控制.特性

一.事务 1.事务定义 ​ 逻辑上多个DML操作形成的一个整体,多个DML操作要么全都执行成功,要么全都执行失败,如果是DDL的操作会自动提交事务. 2.事务的控制 命令 start transaction开启事务rollback 回滚commit提交事务 mysql默认自动提交事务,每个DML执行完毕后,直接提交事…

【Linux】编译器gcc/g++ 、程序翻译过程、动静态库

目录 1.gcc/g Linux编译器1.1. gcc与g的安装1.2. gcc与g用法1.2.1.gcc用法1.2.2. g用法 1.3. 程序翻译的过程1.3.1. 前提知识&#xff1a;1.3.2. 预处理&#xff08;语言种类不变&#xff09;条件编译用途&#xff1a; 1.3.3. 编译&#xff08;生成汇编语言&#xff09;1.3.4. …

性能测试工具之JMeter

JMeter Apache JMeter应用程序是开源软件,是一个100%纯Java应用程序,旨在负载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。 JMeter是一个免费、开源、跨平台的性能测试工具,于20世纪90年代后期面世。这是一个成熟、健全且具有…

‘Task‘ object is not callable ERROR

pycharm 调试异步的代码报错 TypeError: ‘Task‘ object is not callable ERROR: Exception in callback &#xff1c;Task 解决方法&#xff1a;点击菜单栏帮助-查找操作-注册表&#xff0c;在注册表中搜索python.debug.asyncio.repl禁用即可

卷大模型,还是卷应用?一次看明白

自从ChatGPT横空出世以来&#xff0c;中美之间围绕大模型的科技竞争愈演愈烈&#xff0c;也渐渐分化出两条差异化发展路线&#xff1a;一派侧重将AI能力投入应用场景&#xff0c;另一派则侧重让基础模型能力更强。于是&#xff0c;“卷应用”还是“卷大模型”成为中国许多新入场…

phpmailer如何配置SSL以发送安全电子邮件?

phpmailer支持哪些邮件附件类型&#xff1f;如何使用phpmailer&#xff1f; PHPMailer作为一个广泛使用的PHP邮件发送类库&#xff0c;支持通过SSL发送加密邮件&#xff0c;以确保信息在传输过程中的安全性。AokSend将探讨如何配置PHPMailer以使用SSL发送安全的电子邮件。 Ph…

M12防水分线盒双通道PNP型8路预铸线缆半导体制造设备

M12防水分线盒双通道PNP型8路预铸线缆&#xff0c;作为工业自动化设备中关键的组件之一&#xff0c;在提升系统稳定性与可靠性方面发挥着至关重要的作用。以钡铼技术DB系列为例&#xff0c;这款8路M12双通道预铸线缆分线盒在设计和材料选择上均体现了工业级的高标准&#xff0c…

解决方案:如何在虚拟机中扩展 Windows 11 C 盘,绕过恢复分区的限制!

第2章 背景 不管是虚拟化还是物理机&#xff0c;我们安装Windows 11 时候经常遇到无法直接扩容盘&#xff0c;我们简单介绍下Windows中C盘组成。 ### 恢复分区的目的 恢复分区是 Windows 操作系统安装过程中创建的一个特殊分区&#xff0c;主要用于以下目的&#xff1a; 1. …

如何修复 VLC 无法播放 MKV 问题

VLC 是一个媒体播放器&#xff0c;您可以用它来播放各种格式的音频或视频文件。但有时&#xff0c;您无法在 VLC 媒体播放器上运行 MKV 文件。问题可能是黑屏、没有声音、视频断断续续或错误消息&#xff08;例如“无法识别的编解码器&#xff1a;VLC 无法识别音频或视频编解码…

自助创建 1Panel 应用

自助创建 1Panel 应用 前言 1Panel 作为一款开源的 Linux 服务器运维管理面板&#xff0c;其优质的 应用商店 想必也是很多人喜爱它的原因&#xff0c;除了官方的 应用列表 &#xff0c;开源社区内也涌现出了许多优质的第三方应用商店资源&#xff0c;比如 okxlin/appstore 等…

【MySQL】什么是索引?了解索引的底层原理

索引的概念 索引是一种用于提高数据库查询效率的数据结构。它类似于书籍的目录&#xff0c;通过快速定位数据的方式&#xff0c;减少了数据检索的时间。索引在数据库表中可以被看作是一个指向数据的指针&#xff0c;它们存储了列的值及其对应行的位置&#xff0c;从而使得数据…

《老俞闲话|唯爱和热情不可辜负》读后感

《老俞闲话&#xff5c;唯爱和热情不可辜负》读后感 俞敏洪先生的这篇讲话充满了深情与智慧&#xff0c;他以自己丰富的人生经历和教育实践&#xff0c;向我们展现了一位教育家对于教育事业的热爱和对教师角色的深刻理解。 情感真挚&#xff0c;触动人心 俞敏洪先生的讲话中流…