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 };//本质是类型转换(构造拷贝构造 -> 优化 …...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...