当前位置: 首页 > 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…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...