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 };//本质是类型转换(构造拷贝构造 -> 优化 …...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...