3. Docker的数据管理与持久化
在Docker容器化应用中,数据的持久化和管理是一个关键问题。容器的生命周期短暂,容器的停止和删除会导致数据丢失。因此,了解Docker的数据卷(Volumes)和挂载(Mounts)的管理方式,对保障数据的持久性和可用性至关重要。本文将详细介绍Docker的数据管理与持久化,涵盖数据卷的创建、管理、备份与恢复以及Bind Mounts的使用。
1. 数据卷与挂载卷
数据卷(Volumes)
数据卷是Docker管理数据持久化的推荐方式,它们独立于容器的生命周期,可以在多个容器之间共享数据。数据卷存储在Docker主机上的一个特定目录下,并且可以通过Docker API进行管理。
创建数据卷
docker volume create my_volume
查看数据卷
docker volume ls
示例输出:
DRIVER VOLUME NAME
local my_volume
使用数据卷启动容器
docker run -d --name my_container -v my_volume:/data nginx
在这个例子中,my_volume被挂载到容器内的/data目录。
挂载卷(Bind Mounts)
挂载卷是将宿主机的一个目录映射到容器内的目录,适用于开发和测试环境,允许宿主机上的文件直接映射到容器中。
创建挂载卷
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
例如,将宿主机的/var/log目录挂载到容器的/logs目录:
docker run -d --name my_container -v /var/log:/logs nginx
2. 管理数据卷
数据卷的管理是Docker数据持久化的核心部分。以下是一些常用的数据卷管理命令和操作。
查看数据卷信息
docker volume inspect my_volume
示例输出:
[{"Name": "my_volume","Driver": "local","Mountpoint": "/var/lib/docker/volumes/my_volume/_data","Labels": {},"Scope": "local"}
]
删除数据卷
删除数据卷前,确保没有容器依赖该数据卷。
docker volume rm my_volume
数据卷备份与恢复
备份和恢复数据卷是维护数据安全的重要步骤。
备份数据卷
可以使用tar命令将数据卷内容打包到一个文件中。
docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar cvf /backup/volume_backup.tar /volume
此命令将my_volume的数据备份到当前目录下的volume_backup.tar文件中。
恢复数据卷
恢复数据卷时,需要先创建一个数据卷,然后将备份文件解压到该数据卷中。
docker volume create my_new_volumedocker run --rm -v my_new_volume:/volume -v $(pwd):/backup busybox tar xvf /backup/volume_backup.tar -C /volume
这将备份文件恢复到my_new_volume数据卷中。
3. 使用Bind Mounts
Bind Mounts允许将宿主机上的一个目录直接挂载到容器中,适合开发和测试环境。它们提供了数据的实时共享和即时修改的能力。
示例:使用Bind Mounts
创建Bind Mount容器
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
例如,将宿主机的/home/user/data目录挂载到容器的/data目录:
docker run -d --name my_container -v /home/user/data:/data nginx
实际案例:开发环境的代码同步
在开发环境中,使用Bind Mounts可以实现宿主机和容器之间的文件同步。
Dockerfile
FROM python:3.8-slimWORKDIR /appCOPY . /appRUN pip install -r requirements.txtCMD ["python", "app.py"]
docker-compose.yml
version: '3'services:web:build: .volumes:- ./app:/app- /app/venvports:- "5000:5000"
在这个例子中,宿主机的./app目录被挂载到容器的/app目录,方便开发者实时修改代码。
4. 数据卷与挂载卷的选择与比较
在实际应用中,选择数据卷还是挂载卷取决于具体的需求。
数据卷的优缺点
优点:
- 数据持久性:独立于容器生命周期。
- 数据共享:多个容器可以共享同一数据卷。
- 便于备份和恢复:数据卷可以方便地备份和恢复。
缺点:
- 灵活性较差:不适合需要频繁修改的文件。
挂载卷的优缺点
优点:
- 灵活性高:可以直接映射宿主机的文件或目录。
- 实时同步:文件修改后,容器内即刻生效。
缺点:
- 数据持久性差:容器删除后,挂载的文件和目录会被清除。
- 可能影响性能:频繁的读写操作可能会影响性能。
5. 其它
Docker数据卷管理最佳实践
- 使用数据卷而非挂载卷:在生产环境中,优先使用数据卷来确保数据的持久性。
- 合理规划数据卷和挂载点:根据应用需求,合理规划数据卷和挂载点,避免数据丢失和安全问题。
- 定期备份数据:定期对数据卷进行备份,以防数据丢失。
高级用法
数据卷驱动
Docker支持自定义数据卷驱动,允许用户定义数据卷的存储后端。
docker volume create --driver mydriver my_custom_volume
数据卷插件
使用数据卷插件可以实现数据持久化的扩展功能,例如使用Cloud Storage、NFS等。
docker volume create --driver local-persist --opt type=nfs --opt o=addr=nfs-server,vers=4 my_nfs_volume
容器内数据管理工具
在容器内管理数据,常用的工具和命令包括:
- 数据库管理工具:如
mysql-client、pgcli等。 - 文件操作工具:如
rsync、scp等。
常用命令总结
-
创建数据卷:
docker volume create my_volume -
列出数据卷:
docker volume ls -
查看数据卷详情:
docker volume inspect my_volume -
删除数据卷:
docker volume rm my_volume -
创建容器并挂载数据卷:
docker run -d --name my_container -v my_volume:/data nginx -
创建容器并使用Bind Mount:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
相关文章:
3. Docker的数据管理与持久化
在Docker容器化应用中,数据的持久化和管理是一个关键问题。容器的生命周期短暂,容器的停止和删除会导致数据丢失。因此,了解Docker的数据卷(Volumes)和挂载(Mounts)的管理方式,对保障…...
Logback原理及应用详解(九)
本系列文章简介: 在软件开发的过程中,日志记录是一项至关重要的功能。它不仅帮助开发者在开发阶段追踪代码的执行流程和调试问题,还在生产环境中扮演着监控应用运行状态、记录关键业务信息和排查故障的重要角色。随着软件系统的日益复杂和分布…...
SpringBoot 禁用RabbitMQ自启动
1.背景 在实际开发中,项目中使用了mq,但是在测试的时候用不到mq,或者测试环境的mq挂了, 希望能正常启动项目 2.步骤 这很简单在配置文件中增加一个配置就可以了 spring:autoconfigure:exclude: org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration 表示启…...
unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)
1创建UnityHelper.cs using UnityEngine.Events; using UnityEngine.EventSystems;public class UnityHelper {/// <summary>/// 简化向EventTrigger组件添加事件的操作。/// </summary>/// <param name"_eventTrigger">要添加事件监听的UI元素上…...
Scrapy 爬取旅游景点相关数据(五)
本期内容:(1)爬取日本其他城市数据存入数据库(2)爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的,因为数据样本量少嘛,本期来爬取其他城市的景…...
程序员纯粹八股文的危害有哪些,应该如何来解决?
“八股文”这个词在程序员面试的上下文中通常指的是那些被广泛讨论、反复练习的问题和答案,它们往往围绕着一些经典的技术知识点,例如算法、数据结构、设计模式等。这些知识在面试中被频繁提及,以至于应聘者经常会提前准备并背诵这些答案&…...
LabVIEW操作系列1
系列文章目录 我的记录: LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…...
【前端 09】JavaScript中的对象与JSON
JavaScript中的对象与JSON 在JavaScript中,对象和JSON(JavaScript Object Notation)是两个紧密相连但又有区别的概念。它们都在数据处理和交换中扮演着重要角色。本文将详细讲解JavaScript中的自定义对象以及JSON对象的基本概念、格式、用法…...
C# 字符串罗马数字123转汉字一二三
要将字符串 "123" 转换为 "一二三",可以通过以下几种方法来实现。 1. 使用映射字典 可以创建一个映射字典,将数字字符映射到对应的中文数字,然后遍历原始字符串进行替换: using System; using System.Coll…...
红杉资本视角:大公司在AI领域的投资策略与市场影响
在人工智能(AI)的快速发展浪潮中,大型科技公司如谷歌、Meta等正在积极投资,以确保在未来技术竞争中占据有利地位。红杉资本等投资机构对此现象进行了深入分析,探讨了大公司在AI领域的投资策略及其对市场的影响。本文将…...
CI/CD学习之路
CI/CD之路 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg4NDg0MjQ0MQ&actiongetalbum&album_id3433192036428447744&scene173&subscene&sessionidsvr_0b1e7fe1d6b&enterid1721879847&from_msgid2247485821&from_itemidx1&count3&am…...
IP 泄露: 原因与避免方法
始终关注您的IP信息! 您的IP地址不仅显示您的位置,它包含几乎所有的互联网活动信息! 如果出现IP泄漏,几乎所有的信息都会被捕获甚至非法利用! 那么,网站究竟如何追踪您的IP地址?您又如何有效…...
深⼊理解指针(1)
1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 1. 内存和地址 1.1 内存 计算机内存空间如何高效率的管理? 也是把内存划分为⼀个个的内存单元,每个…...
Photoshop 2023:创意无限的图像编辑神器
Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件,为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具,如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…...
高校是需要AIGC 实验室还是大数据人工智能实验室呢
AIGC(人工智能与图形计算)实验室和大数据人工智能实验室虽然都隶属于人工智能的范畴,但它们的关注点、研究方向和具体应用领域有所不同。 我们分别从研发方向、技术侧重、应用领域、研究工具和方法等方面去分析两者的区别,希…...
Nginx系列-12 Nginx使用Lua脚本进行JWT校验
背景 本文介绍Nginx中Lua模块使用方式,并结合案例进行介绍。案例介绍通过lua脚本提取HTTP请求头中的token字段,经过JWT校验并提取id和name信息,设置到http请求头中发向后段服务器。 默认情况下,Nginx自身不携带lua模块࿰…...
数据库设计三范式
目录 第一范式 第二范式 第三范式 数据库的设计范式,即数据库设计的原则; 在设计数据库时尽量遵守这三个条件,因为在实际的设计中,根据要求是空间换时间还是时间换空间来遵守范式; 第一范式 每一张表都必须有主键…...
VirtualBox创建共享磁盘
VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI(VirtualBox 磁盘映像)】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…...
2024年中职云计算实验室建设及云计算实训平台整体解决方案
随着信息技术的飞速发展,云计算作为新一代信息技术的核心,正逐步渗透到各行各业,成为推动数字化转型的重要力量。为了适应这一趋势,中职教育作为技能型人才培养的重要阵地,亟需加强云计算实验室建设与云计算实训平台的…...
[C++] C++11新增
一、列表初始化 C98: 在C98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。 struct Simple1 {int _a;int _b; };//C98 int main() {int a1[] { 1,2,3,4,5,6 };int a2[7] { 0 };//本质是类型转换(构造拷贝构造 -> 优化 …...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
