当前位置: 首页 > news >正文

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-clientpgcli等。
  • 文件操作工具:如rsyncscp等。

常用命令总结

  • 创建数据卷

    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 爬取旅游景点相关数据(五)

本期内容&#xff1a;&#xff08;1&#xff09;爬取日本其他城市数据存入数据库&#xff08;2&#xff09;爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的&#xff0c;因为数据样本量少嘛&#xff0c;本期来爬取其他城市的景…...

程序员纯粹八股文的危害有哪些,应该如何来解决?

“八股文”这个词在程序员面试的上下文中通常指的是那些被广泛讨论、反复练习的问题和答案&#xff0c;它们往往围绕着一些经典的技术知识点&#xff0c;例如算法、数据结构、设计模式等。这些知识在面试中被频繁提及&#xff0c;以至于应聘者经常会提前准备并背诵这些答案&…...

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…...

【前端 09】JavaScript中的对象与JSON

JavaScript中的对象与JSON 在JavaScript中&#xff0c;对象和JSON&#xff08;JavaScript Object Notation&#xff09;是两个紧密相连但又有区别的概念。它们都在数据处理和交换中扮演着重要角色。本文将详细讲解JavaScript中的自定义对象以及JSON对象的基本概念、格式、用法…...

C# 字符串罗马数字123转汉字一二三

要将字符串 "123" 转换为 "一二三"&#xff0c;可以通过以下几种方法来实现。 1. 使用映射字典 可以创建一个映射字典&#xff0c;将数字字符映射到对应的中文数字&#xff0c;然后遍历原始字符串进行替换&#xff1a; using System; using System.Coll…...

红杉资本视角:大公司在AI领域的投资策略与市场影响

在人工智能&#xff08;AI&#xff09;的快速发展浪潮中&#xff0c;大型科技公司如谷歌、Meta等正在积极投资&#xff0c;以确保在未来技术竞争中占据有利地位。红杉资本等投资机构对此现象进行了深入分析&#xff0c;探讨了大公司在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信息&#xff01; 您的IP地址不仅显示您的位置&#xff0c;它包含几乎所有的互联网活动信息&#xff01; 如果出现IP泄漏&#xff0c;几乎所有的信息都会被捕获甚至非法利用&#xff01; 那么&#xff0c;网站究竟如何追踪您的IP地址&#xff1f;您又如何有效…...

深⼊理解指针(1)

1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 1. 内存和地址 1.1 内存 计算机内存空间如何高效率的管理&#xff1f; 也是把内存划分为⼀个个的内存单元&#xff0c;每个…...

Photoshop 2023:创意无限的图像编辑神器

Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件&#xff0c;为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具&#xff0c;如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…...

高校是需要AIGC 实验室还是大数据人工智能实验室呢

AIGC&#xff08;人工智能与图形计算&#xff09;实验室和大数据人工智能实验室虽然都隶属于人工智能的范畴&#xff0c;但它们的关注点、研究方向和具体应用领域有所不同。 我们分别从研发方向、技术侧重、应用领域、研究工具和方法等方面去分析两者的区别&#xff0c;希…...

Nginx系列-12 Nginx使用Lua脚本进行JWT校验

背景 本文介绍Nginx中Lua模块使用方式&#xff0c;并结合案例进行介绍。案例介绍通过lua脚本提取HTTP请求头中的token字段&#xff0c;经过JWT校验并提取id和name信息&#xff0c;设置到http请求头中发向后段服务器。 默认情况下&#xff0c;Nginx自身不携带lua模块&#xff0…...

数据库设计三范式

目录 第一范式 第二范式 第三范式 数据库的设计范式&#xff0c;即数据库设计的原则&#xff1b; 在设计数据库时尽量遵守这三个条件&#xff0c;因为在实际的设计中&#xff0c;根据要求是空间换时间还是时间换空间来遵守范式&#xff1b; 第一范式 每一张表都必须有主键…...

VirtualBox创建共享磁盘

VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI&#xff08;VirtualBox 磁盘映像&#xff09;】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…...

2024年中职云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算作为新一代信息技术的核心&#xff0c;正逐步渗透到各行各业&#xff0c;成为推动数字化转型的重要力量。为了适应这一趋势&#xff0c;中职教育作为技能型人才培养的重要阵地&#xff0c;亟需加强云计算实验室建设与云计算实训平台的…...

[C++] C++11新增

一、列表初始化 C98&#xff1a; 在C98中&#xff0c;标准允许使用花括号{}对数组元素进行统一的列表初始值设定。 struct Simple1 {int _a;int _b; };//C98 int main() {int a1[] { 1,2,3,4,5,6 };int a2[7] { 0 };//本质是类型转换&#xff08;构造拷贝构造 -> 优化 …...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

听写流程自动化实践,轻量级教育辅助

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

AI,如何重构理解、匹配与决策?

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

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;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 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...