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 备份当前容器(可选)
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)
- 关闭虚拟机:首先,确保目标虚拟机已关闭。
- 克隆虚拟机:在VMware Workstation中,选中目标虚拟机,点击上方工具栏中的“虚拟机”>“管理”>“克隆”。
- 选择快照进行克隆:在克隆向导中,选择“现有快照(仅限关闭的虚拟机)”,然后选择你想要克隆的快照。
- 设置克隆选项:选择克隆类型(链接克隆或完整克隆),并设置新虚拟机的名称和目标位置。
- 完成克隆:按照向导完成克隆过程。克隆完成后,你可以在另一台电脑上打开VMware Workstation,并导入克隆得到的虚拟机文件(.vmx文件)。
方法二:手动复制虚拟机文件(适用于VMware ESXi和Workstation)
- 关闭虚拟机:确保目标虚拟机已关闭。
- 访问数据存储:使用vSphere Web Client(对于ESXi)或Windows文件资源管理器(对于Workstation)访问虚拟机所在的数据存储。
- 复制虚拟机文件:找到虚拟机文件夹,复制其中的所有文件(包括快照文件)。
- 转移文件:将复制的文件转移到另一台电脑上的相应位置。
- 注册虚拟机:在另一台电脑上,使用vSphere Web Client(对于ESXi)或VMware Workstation(对于Workstation)注册新的虚拟机。选择复制过来的虚拟机文件夹中的.vmx文件进行注册。
- 恢复快照:注册完成后,打开虚拟机电源,并根据需要恢复特定的快照。
2. Docker知识点
2.1 Docker镜像和容器的关系
Docker镜像相当于C++/Java的“类”,容器是“对象”,是镜像的运行实体,是一个应用进程。如下图一个镜像可以启动多个容器,Docker daemon里放着存储卷,是存储在本机磁盘的。
2.2 Docker的存储卷
按照上面的类比(面向对象语言的“类和对象”,“镜像和容器很好理解”,现在了解下“存储卷”)
存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系(比如Anylink项目 conf 里的文件)。这就意味着,在容器中的这个目录下写入数据时(如anylink网页操作就会往容器目录写数据),容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。卷的本质是文件或者目录。
存储卷的特性:
- 可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。
- 宿主机的/data/web 目录与容器中的/container/data/web 目录绑定关系,然后容器中的 进程向这个目录中写数据时,是直接写在宿主机的目录上的,绕过容器文件系统与宿 主机的文件系统建立关联关系,使得可以在宿主机和容器内共享数据库内容,让容器直接访问宿主机中的内容,也可以宿主机向容器写入内容,容器和宿主机的数据读写是同步的。
- 容器销毁了,容器指定的存储卷不会销毁。
为什么需要存储卷?
- 数据丢失问题,容器按照业务类型,总体可以分为两类: ①无状态的(数据不需要被持久化)②有状态的(数据需要被持久化) 显然,容器更擅长无状态应用。因为未持久化数据的容器根目录的生命周期与容器的生命周期一样,容器文件系统的本质是在镜像层上面创建的读写层,运行中的容器对任何文件的修改都存在于该读写层,当容器被删除时,容器中的读写层也会随之消失。 虽然容器希望所有的业务都尽量保持无状态,这样容器就可以开箱即用,并且可以任意调度,但实际业务总是有各种需要数据持久化的场景,比如 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镜像
-
停止并删除使用该镜像的容器:
首先,你可以停止并删除正在使用这个镜像的容器。使用以下命令:docker stop 05d3701e38ad
docker rm 05d3701e38ad
然后,你可以尝试再次删除镜像:
docker rmi bjdgyc/anylink
或者,如果你知道镜像的确切 ID 或部分名称,也可以使用:
docker rmi cfd0134cbd8a
-
使用
--force
或-f
选项强制删除镜像:
如果你确定要删除镜像,即使它正在被使用,你也可以使用--force
或-f
选项来强制删除。但请注意,这可能会导致使用该镜像的容器无法正常工作。docker rmi -f bjdgyc/anylink
或者,如果你知道镜像的确切 ID:
docker rmi -f cfd0134cbd8a
-
检查并删除所有使用该镜像的容器:
如果你不确定哪些容器正在使用这个镜像,你可以使用以下命令来查找所有使用该镜像的容器,并逐一停止和删除它们:docker ps -a --filter reference=bjdgyc/anylink
这个命令会列出所有使用
bjdgyc/anylink
镜像的容器。然后,你可以按照上面的方法停止并删除这些容器。
选择哪种方法取决于你的具体需求和你是否愿意冒删除正在运行的容器的风险。通常,停止并删除容器是最安全的方法。
3. Docker备份和恢复
当Docker数据出现问题时,回滚到某个版本通常涉及Docker镜像和容器的管理。以下是一系列步骤,可以帮助你回滚Docker数据到某个特定版本:
3.1 确定要回滚的容器和版本
首先,你需要确定哪个容器出现了问题,以及你想要回滚到的具体版本,(版本没有变化就不用标签)。这通常需要你事先已经为Docker镜像打上了不同的标签(tag),每个标签对应一个不同的版本。
3.2 备份当前容器(可选)
在回滚之前,强烈建议备份当前的容器状态,以防万一回滚后的版本不符合预期,可以恢复到当前状态。你可以使用docker commit
命令将容器的当前状态保存为一个新的镜像。
|
备份演示:(备份成1.5,下下张图片是Anylink网页状态,四个组)
添加一组测试组后备份为标签1.6:(此时备份的时候是五个组)
3.3 备份存储卷
在根目录拷贝备份/conf文件为/conf2:
3.4 停止并删除当前容器
在回滚之前,你需要停止并删除正在运行的容器。这可以通过docker stop
和docker 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提供的工具或第三方备份解决方案来制定和执行备份策略。
相关文章:
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 备份当前…...
【EMC专题】ESD抑制器简要介绍
在ESD保护器件中可以分为陶瓷基类型和半导体基类型。其中有一类陶瓷基类型,使用的机制是电极间放电方法的产品就是ESD抑制器。本文章简要介绍了ESD抑制器的特点、基本结构和特性。 ESD抑制器的特点 ESD抑制器是间隙型的ESD(静电放电 Electrostatic Discharge)对策保护元件,…...
贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)
目录 标题:贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询) 内容: 一,环境部署 二,源码分析 三,sql注入 总结: [回到顶部](#article_top) 一&am…...
『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!
『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…...
基于SpringBoot+Vue框架的租车管理系统
文章目录 一、项目介绍二、项目类型三、技术栈介绍1.客户端技术栈2.服务端技术栈 四、项目创新点五、项目功能介绍1.客户端功能2.服务端功能 六、项目的主要截图页面如下展示1.客户端展示2.服务端展示 七、项目源码 一、项目介绍 大家好,我是执手天涯,…...
HAProxy基本配置及参数实操
目录 编辑什么是负载均衡 为什么用负载均衡 四层和七层的区别 实验环境 实验步骤 webserver上安装nginx 启动nginx 安装haproxy 编辑配置文件 多进程 多线程 SORRY SERVER 访问重定向 maxconne最大可承受连接 socat 工具 常用示例 ha p r ox y 的 算 法 静 …...
go-zero中间件的使用
一、自定义中间件 1、在api中在服务中定义一个中间件,名字随便取 type PostDemoReq {Name string json:"name" validate:"required" // 姓名Age int64 json:"age" validate:"required,gte1,lte130" // 年龄// optional 表示可选,omi…...
六、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色优化超时和线程
实现通过ESP32S3连接Wi-Fi并使用Web页面控制WS2812灯珠的颜色,可以使用ESP32的WebServer库来创建一个简单的Web界面。通过这个界面,可以动态地控制灯珠的显示效果。 针对 五、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色…...
(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程
Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比: 1、Element-plus 提供 TimePicker 组件情况: 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码): // Element-plus 提供的组件代码: <template>…...
UIAbility组件基础(一)
一、概述 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…...
神经网络的数学原理
前言:Hello大家好,我是小哥谈。人工智能技术的发展与成功应用已经成为21世纪科技领域最大的新现象。然而,科学地理解人工智能原理已经超出了现有科学体系的范畴。显然,人工智能是人类科学技术发展的必然结果,人工智能科学也将是人类科学进步与发展必然实现的目标🌈 …...
Java设计模式-抽象工厂模式-一次性理解透
1. 抽象工厂模式简介 抽象工厂设计模式是创建型模式之一。抽象工厂模式与工厂模式几乎相似,只是它更像工厂中的工厂。 如果您熟悉Java 中的工厂设计模式,或看过上一篇我写的“java简单工厂模式”,您会注意到我们有一个工厂类。此工厂类根据…...
day16-测试自动化之selenium的PO模式
一、PO模式介绍 PO(Page Object)模式是一种在自动化测试中常用的设计模式,将页面的每个元素封装成一个对象,通过操作对象来进行页面的交互。 一般分为六个版本,现在大部分企业都用的V4版本,三层结构…...
Springboot+freemarker大段文本内容动态修改输出,所见即所得
场景:给领导导出数据时,需要给出一个针对专业名词的解释说明,因此会存在有大批量的、大段的文本内容。如果直接写在代码里面,没啥大问题,但是大量的拼接替换、格式样式、后续修改维护等,都不是很方便。如果…...
Kali Linux网络问题解决与静态IP配置技巧
很多用户在使用 Kali Linux 时会遇到无法联网的问题,尤其是在 VMware 虚拟机中。这种情况相当常见,一般都是没有配置DNS服务器或者网卡配置文件的IP和虚拟网络编辑器的IP不一致所导致的,下面我们将探讨如何在 Kali Linux 中配置 DNS 服务和设…...
网络状态码-经验笔记
网络状态码-经验笔记 引言 在网络通信中,HTTP(Hypertext Transfer Protocol)状态码是服务器向客户端(通常是Web浏览器)发送响应时所包含的重要信息之一。 这些状态码指示了客户端请求的结果。 了解并正确使用这些状态…...
c++ 实现 actor 框架
服务端:https://github.com/xukeawsl/coro_actor 客户端:https://github.com/xukeawsl/coro_actor_client...
应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK
随着养宠人群的增多,铲屎官们的需求日益增长,市场上出现了很多品牌的宠物空气净化器。然而,产品质量参差不齐,给消费者选择带来不少困难。劣质宠物空气净化器不仅无法有效去除宠物毛发、皮屑、异味及空气中的有害微粒,…...
0002 保险会计及其特殊性
保险会计是将会计理论专门应用于保险公司的专业会计领域,它是会计学的一个重要分支。作为一个分支,保险会计具有独特的特性,这些特性主要表现在以下几个方面: 产品的无形性:保险产品本质上是一种无形的商品,…...
ChatTTS:终极文本转语音工具,支持API!
ChatTTS:终极文本转语音工具,支持API! 文本转语音(TTS)系统的发展已经取得了长足的进步。从最初的机械化、平坦的声音,到如今听起来令人惊讶的人声,ChatTTS作为这一领域的新成员,旨…...
VUE和Element Plus
1.VUE 1.下载和配置环境 使用vue编程,我们需要使用到的编程软件是vs code,还需要使用node.js,这个的作用就类似于JDK,当我们都下载好之后,winR键打开命令提示符,我们在这里可以查看版本, npm…...
Python学习笔记(五)
""" 演示tuple元组的定义和操作 """# 元组一旦定义完成,就不可修改 # 定义元组 # t1 (1, "Hello", True) # t2 () # 定义空元组 # t3 tuple() #定义空元组 # print(f"t1的类型是:{type(t1)}, 内容是&…...
Linux企业级应用(一)构建企业级Linux应用平台:全面指南
文章目录 构建企业级Linux应用平台:全面指南前言1. Linux企业级应用简介2. 构建企业级网站应用平台使用LNMP架构构建Web服务器部署MySQL数据库主从复制与读写分离 3. 实施虚拟化技术部署KVM虚拟化平台使用LVS和Keepalived实现负载均衡与高可用性 4. 文件系统与分布式…...
LeetCode112 路径总和
前言 题目: 112. 路径总和 文档: 代码随想录——路径总和 编程语言: C 解题状态: 成功解答! 思路 比较简单的一个思路是遍历所有的路径,求和后再查找目标值。但是,最好的方法是一边遍历&#x…...
TI AWR1843 毫米波雷达实物展示
引言 随着自动驾驶、工业自动化以及智能交通系统的快速发展,雷达传感器在现代科技中的重要性日益提升。毫米波雷达凭借其高精度测距、抗干扰能力强等特点,逐渐成为各类感知系统中的关键技术。德州仪器(TI)推出的 AWR1843 毫米波雷…...
前端JS总结(下)之事件操作
目录 前言 事件基础 事件的三部分: 常见的事件: 鼠标事件: 键盘事件: 表单事件: onfocus和onblur:获取焦点和失去焦点 onselect:选中单行文本框/多行文本框中的内容 onchangeÿ…...
如何妙用哈希表来优化遍历查找过程?刷题感悟总结,c++实现
先上题目 题目链接:题目链接 这题我最先想到的就是前缀和a,构造好了以后就遍历每一个[l,r]数组(满足题目要求的连续区间数组),奈何倒数第二个样例时间超限 先给出原思路代码 class Solution { public:int subarray…...
【设计模式】漫谈设计模式
这篇文章里说一下对设计模式的个人的理解。本篇文章更类似于随笔而非技术文档。 设计模式最早是在上个世纪就被人提出来了,如今被奉为圣经,也就是GOF等人写的《设计模式》,其中的设计模式,是指导开发者如何进行开发出高内聚、低耦…...
第N5周:Pytorch文本分类入门
本文为365天深度学习训练营 中的学习记录博客原作者:K同学啊 任务: ●1. 了解文本分类的基本流程 ●2. 学习常用数据清洗方法 ●3. 学习如何使用jieba实现英文分词 ●4. 学习如何构建文本向量 一、前期准备 环境安装 这是一个使用PyTorch实现的简单文…...
SpringBoot 自定义 starter
1. 官方文档 SpringBoot 版本 2.6.13,相关链接 Developing with Spring Boot 1.1 什么是 Starter Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop shop for all the Spring and relate…...
外网设计素材网站/制造企业网站建设
根据前面的文章,我们会发现我们会在很多类前面加很多XLua的标签,有LuaCallCSharp,CSharpCallLua,Hotfix 等等。关于这些配置的作用官方文档也有相应的说明:https://github.com/Tencent/xLua/blob/master/Assets/XLua/D…...
wordpress插件搬家/广告代发平台
本文实例讲述了JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法。分享给大家供大家参考,具体如下:当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 模型被构造为对象的树。通过可编程的对象…...
有了域名怎么建网站/新闻株洲最新
第五章 多输出门电路 5.1 门电路的级数 5.1.1 二级电路 5.1.2 三级电路 5.1.3 二级电路的8种基本形式 两输入 三输入 5.1.4 使用与非门、或非门 使用与非门、或非门比使用与门、非门好处是:速度快,性价比高,使用器件种类少。 5.2 使用单…...
章丘建网站/广州网站营销优化qq
一、SGI 标准的空间配置器,std::allocator SGI也定义了一个符合部分标准,名为allocator的配置器,但是它自己不使用,也不建议我们使用,主要原因是效率不佳。 它只是把C的操作符::operator new和::operator delete做了一…...
国内包装设计网站/百度浏览器打开
第一次, 写点啥呢? 分享一下订阅的资源吧! 1 <?xml version"1.0" encoding"UTF-8"?>2 3 <opml version"1.0">4 <head>5 <title>建勇 subscriptions in feedly Cloud</title>6 </head>7…...
网站设计中级/seopeix
/// // ServerDemo.cpp文件 #include <winsock2.h> // 为了使用Winsock API函数 #include <stdio.h> #include <windows.h> // 告诉连接器与WS2_32库连接 #pragma comment(lib,"WS2_32.lib") int main(int argc, char* argv[]) { // 初始…...