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

docker 数据管理,数据持久化详解 二 数据卷容器

数据卷和数据卷容器核心区别

持久性对比
数据卷:当您直接在启动容器时指定了一个数据卷(例如,使用docker run -v /data),这个数据卷会自动创建,并且其内容会在容器停止或删除后继续存在。您可以随时通过Docker CLI命令来查看、备份、恢复或删除这些数据卷。
数据卷容器:当您创建了一个专门用于存储数据的数据卷容器,并通过--volumes-from选项让其他容器共享这个数据卷时,实际上也是在使用Docker的数据卷机制。因此,只要不显式地删除数据卷,数据同样会保持持久化。
关键区别
管理上的差异:数据卷容器提供了一种更灵活的方式来管理和共享数据。通过使用一个专用的容器来承载数据卷,可以更容易地控制哪些容器能够访问这些数据,以及如何在不同的容器之间共享数据。
使用场景的不同:如果您只需要为单个容器提供持久化的数据存储,那么直接使用数据卷可能更加简单直接。而如果您需要在多个容器之间共享数据,或者希望将数据管理逻辑与应用程序容器分离,则数据卷容器可能是更好的选择。

数据卷容器详细介绍

数据卷容器(Data Volume Containers)是Docker中一种特殊的容器,主要用于管理和共享数据卷。通过创建一个专门用于存储数据的容器,可以实现数据的持久化,并且可以方便地在多个容器之间共享这些数据。下面是关于数据卷容器的详细介绍,包括其创建、使用、优点和一些最佳实践。

 创建数据卷容器

1. 创建一个空容器:首先,创建一个不运行任何特定应用的容器,仅用于存储数据。这个容器通常被称为数据卷容器。

   docker create -v /data --name data_container busybox

   这条命令创建了一个名为 `data_container` 的容器,并在其中创建了一个名为 `/data` 的数据卷。`busybox` 是一个轻量级的基础镜像,通常用于创建这样的空容器。

2. 启动容器:虽然数据卷容器通常不需要运行任何进程,但有时为了确保容器处于运行状态,可以选择启动它。

   docker start data_container

 使用数据卷容器

1. 从数据卷容器挂载数据卷:其他容器可以通过 `--volumes-from` 参数来挂载数据卷容器中的数据卷。

   docker run -d --volumes-from data_container --name app_container my_app_image

   这条命令启动了一个新的容器 `app_container`,并从 `data_container` 中挂载了 `/data` 数据卷。这样,`app_container` 就可以访问 `data_container` 中的数据。

2. 多容器共享数据:多个容器可以同时从同一个数据卷容器挂载数据卷,实现数据的共享。

   docker run -d --volumes-from data_container --name another_app_container another_app_image

 优点

- 数据共享:数据卷容器使得多个容器可以轻松共享相同的数据卷,这对于需要跨多个服务访问同一数据集的应用非常有用。

- 数据隔离:通过将数据存储在一个独立的容器中,可以更好地隔离数据和应用程序,减少因应用程序错误导致的数据损坏风险。

- 易于管理:数据卷容器提供了一种集中管理数据的方式,可以方便地备份、恢复或迁移数据。

- 灵活性:可以动态地添加或移除数据卷,而无需重新创建整个容器。

 最佳实践

- 命名规范:为数据卷容器选择有意义的名称,以便于识别和管理。

- 定期备份:定期备份数据卷中的数据,以防止数据丢失。

- 监控和维护:监控数据卷的使用情况,确保有足够的磁盘空间,并定期清理不再需要的数据。

- 安全性:确保只有授权的容器才能访问数据卷容器中的数据,可以通过网络策略或其他安全措施来实现。

 注意事项

- 容器删除:删除数据卷容器不会自动删除其关联的数据卷。如果要删除数据卷,需要手动执行 `docker volume rm` 命令。

- 性能考虑:虽然数据卷提供了良好的性能,但在高负载情况下,仍需关注磁盘I/O性能,确保满足应用的需求。

复杂生产实例

在生产环境中,数据卷容器(Data Volume Containers)可以用于多种场景,特别是在需要跨多个容器共享数据或进行数据持久化的情况下。下面通过一个具体的生产实例来详细介绍如何使用数据卷容器。

 场景描述

假设我们有一个Web应用,由以下几个部分组成:

1. Web服务器:运行Nginx,负责处理HTTP请求。

2. 应用服务器:运行Node.js应用,处理业务逻辑。

3. 数据库:使用MySQL,存储应用数据。

4. 日志收集器:运行Logstash,收集应用和Web服务器的日志。

 目标

- 数据持久化:确保MySQL数据库的数据和日志文件在容器重启或删除后不会丢失。

- 数据共享:确保Web服务器和应用服务器可以共享静态文件(如图片、CSS、JavaScript等)。

- 日志管理:确保日志文件可以被日志收集器访问和处理。

 步骤

# 1. 创建数据卷容器

首先,创建两个数据卷容器,一个用于存储MySQL数据,另一个用于存储静态文件和日志文件。

# 创建MySQL数据卷容器

docker create -v /var/lib/mysql --name mysql_data busybox

# 创建静态文件和日志文件数据卷容器

docker create -v /var/www/html --v /var/log/nginx --name web_data busybox

# 2. 启动MySQL容器

使用 `--volumes-from` 参数从 `mysql_data` 容器挂载数据卷。

docker run -d --name mysql --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword mysql:5.7

# 3. 启动Web服务器容器

使用 `--volumes-from` 参数从 `web_data` 容器挂载数据卷。

docker run -d --name nginx --volumes-from web_data -p 80:80 nginx

# 4. 启动应用服务器容器

使用 `--volumes-from` 参数从 `web_data` 容器挂载数据卷,以便应用服务器可以访问静态文件。

docker run -d --name node_app --volumes-from web_data -p 3000:3000 my_node_app_image

# 5. 启动日志收集器容器

使用 `--volumes-from` 参数从 `web_data` 容器挂载日志文件数据卷,以便Logstash可以访问日志文件。

docker run -d --name logstash --volumes-from web_data my_logstash_image

 验证

1. 验证MySQL数据持久化:

   - 停止并删除MySQL容器,然后重新启动一个新的MySQL容器,确保数据仍然存在。

   docker stop mysql

   docker rm mysql

   docker run -d --name mysql --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword mysql:5.7

2. 验证静态文件和日志文件共享:

   - 在 `web_data` 容器中创建或修改文件,确保这些文件可以在Web服务器和应用服务器中访问。

  

   docker exec -it web_data sh

   echo "Hello, World!" > /var/www/html/index.html

   exit

   访问Web服务器的主页,确认 `index.html` 文件的内容。

3. 验证日志文件收集:

   - 检查Logstash是否成功读取并处理了日志文件。

 备份和恢复

# 备份数据卷

docker run --rm --volumes-from mysql_data -v $(pwd):/backup ubuntu tar czvf /backup/mysql_backup.tar.gz /var/lib/mysql

docker run --rm --volumes-from web_data -v $(pwd):/backup ubuntu tar czvf /backup/web_backup.tar.gz /var/www/html /var/log/nginx

# 恢复数据卷

docker run --rm --volumes-from mysql_data -v $(pwd):/backup ubuntu bash -c "cd / && tar xzvf /backup/mysql_backup.tar.gz"

docker run --rm --volumes-from web_data -v $(pwd):/backup ubuntu bash -c "cd / && tar xzvf /backup/web_backup.tar.gz"

通过使用数据卷容器,我们可以有效地管理生产环境中的数据持久化和共享问题。数据卷容器不仅提供了数据的持久性,还简化了数据的备份和恢复过程,同时也支持多个容器之间的数据共享。这种做法在实际生产环境中非常实用,可以显著提高系统的可靠性和可维护性。

相关文章:

docker 数据管理,数据持久化详解 二 数据卷容器

数据卷和数据卷容器核心区别 持久性对比 数据卷:当您直接在启动容器时指定了一个数据卷(例如,使用docker run -v /data),这个数据卷会自动创建,并且其内容会在容器停止或删除后继续存在。您可以随时通过Do…...

Logrotate:Linux系统日志轮转和管理的实用指南

Logrotate是Linux系统中用于自动化管理日志文件的强大工具,它能够高效、安全地轮转、压缩和清理日志文件,从而有效控制日志文件大小,节省磁盘空间,并显著提升系统可维护性和安全性。本文档将提供Logrotate的实用指南,涵…...

八股面试3(自用)

基本数据类型和引用数据类型区别 java中数据类型分为基本数据类型和引用数据类型 8大基本数据类型 1.整数:int,long,short,byte 2.浮点类型:float,double 3.字符类型:char 4.布尔类型&…...

【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步

目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…...

【Android】浅析OkHttp(1)

【Android】浅析OkHttp(1) OkHttp 是一个高效、轻量级的 HTTP 客户端库,主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求,还支持许多高级功能,如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…...

Generate-on-Graph

目录 摘要1 引言2 相关工作4 不完整知识图谱问答(IKGQA)4.1 任务介绍4.2 数据集构建 5 Generate-on-Graph (GoG) 摘要 为了解决大型语言模型(LLMs)在知识不足和幻觉问题上的困扰,众多研究探索了将LLMs与知识图谱&…...

学习笔记——交换——STP(生成树)简介

一、技术背景 1、生成树技术背景 交换机单线路组网,存在单点故障(上左图),上行线路及设备都不具备冗余性,一旦链路或上行设备发生故障,业务将会中断。 为了使得网络更加健壮、更具有冗余性,将拓扑修改为(上右图)接入…...

【Linux从入门到精通一】操作系统概述与Linux初识

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…...

Git 深度解析 —— 从基础到进阶

目录 1. Git 基础概念 1.1 版本控制 (Version Control) 1.2 分布式版本控制 (Distributed Version Control) 1.3 核心概念 1.4 Git 工作流程 2. Git 常用命令 2.1 初始化仓库 2.2 添加文件 2.3 提交修改 2.4 查看状态 2.5 查看历史记录 2.6 切换分支 2.7 创建分支…...

PCIE-变量总结

1.changed_speed_recovery: 表示链路双方已经将链路速率协商为更高的速率。 在configuration.complete状态下此变量会reset成0; 当前状态在recovery.rcvrlock状态: 在经过24ms的timeout之后,任何一个已经configured的lane&…...

【iOS】AFNetworing初步学习

文章目录 前言OC的网络请求步骤单例封装网络请求使用AFNetworking进行网络请求 前言 在暑假,学习了一些简单的网络请求的内容,本周学习了AFNetworking的基本使用,通过本篇博客进行一个简单的介绍。 OC的网络请求步骤 简单的网络请求主要有…...

【数据结构】堆的创建

Heap.h #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<assert.h>//创建堆结构体 typedef int HPDateType; typedef struct Heap {HPDateType* a;int size;int capacity; }HP;//堆的初始化 void HPInit(HP* php);//堆的销毁 voi…...

Linux下Git操作

一、基本命令 1、创建 git 目录&#xff08;工作区&#xff09; mkdir gitcode 2、创建本地仓库&#xff0c;生成 .git 隐藏目录 git init 3、设置配置项 git config user.name "xxx" git config user.email "....." 4、查看配置项 git config -l …...

缺失d3dx9_42.dll如何修复,d3dx9_42.dll故障的6种修复方法分享

在电脑使用过程中&#xff0c;许多游戏玩家和软件用户可能都遇到过d3dx9_42.dll丢失的问题。这个问题会导致游戏或软件无法正常运行&#xff0c;给用户带来诸多不便。本文将详细解读d3dx9_42.dll丢失的原因、影响及解决方案&#xff0c;帮助大家顺利解决这个问题。 一、d3dx9_4…...

深入理解Android WebView的加载流程与事件回调

文章目录 一、WebView 加载流程时序图二、WebView 加载流程回调函数说明三、AwContents3.1 主要功能和职责3.2 架构和实现3.3 使用场景 四、利用WebView回调函数检测白屏4.1 使用onPageStarted和onPageFinished检测加载时间4.2 利用onReceivedError和onReceivedHttpError检测加…...

机器视觉相机自动对焦算法

第一&#xff0c;Brenner梯度法、 第二&#xff0c;Tenegrad梯度法、 第三&#xff0c;laplace梯度法、 第四&#xff0c;方差法、 第五&#xff0c;能量梯度法。 此实例通过使用Halcon实现5种清晰度算法函数&#xff1a; 1. 方差算法函数&#xff1b; 2. 拉普拉斯能量函数…...

StarTowerChain:开启去中心化创新篇章

官网&#xff1a; www.startower.fr 在当今创新驱动的时代&#xff0c;StarTowerChain 以其独特的去中心化创新模式&#xff0c;为我们带来了新的希望和机遇。去中心化&#xff0c;这个充满活力与创造力的理念&#xff0c;正引领着我们走向未来的创新之路。 StarTowerChain …...

SpringCloudStream使用StreamBridge实现延时队列

利用RabbitMQ实现消息的延迟队列 一、安装RabbitMQ 1、安装rabbitmq 安装可以看https://blog.csdn.net/qq_38618691/article/details/118223851,进行安装。 2、安装插件 安装完毕后,exchange是不支持延迟类型的,需要手动安装插件,需要和安装的rabbitmq版本一致 https:…...

MATLAB中head函数用法

目录 语法 说明 示例 显示矩阵的前八行 显示表的前三行 返回表的前八行 head函数的功能是获取数组或表的顶行。 语法 head(A) head(A,k) B head(___) 说明 head(A) 在命令行窗口中显示数组、表或时间表 A 的前八行&#xff0c;但不存储值。 head(A,k) 显示 A 的前 k …...

golang 基本数据类型

1. go语言的数据类型简介 golang的数据类型分为两大类&#xff0c;一类是基本数据类型和符合数据类型&#xff1b; 按照传递的内容分&#xff1a;传递本身数据和传递地址&#xff1b; golang和java很相似&#xff0c;都是值传递&#xff0c;不过分为传递的值和传递的地址&a…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...