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 };//本质是类型转换(构造拷贝构造 -> 优化 …...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
