docker--容器数据进行持久化存储的三种方式

文章目录

  • 为什么Docker容器需要使用持久化存储
    • 1.什么是Docker容器?
    • 2.什么是持久化存储?
    • 3.为什么Docker容器需要持久化存储?
    • 4.Docker如何实现持久化存储?
      • (1)、Docker卷(Volumes)
        • 简介
        • 适用环境:
        • 使用场景:
        • 使用案例:
      • (2)、绑定挂载(Bind Mounts)
        • 简介:
        • 适用环境:
        • 使用场景:
        • 使用案例
      • (3)、 网络存储(Network Storage)
        • 简介:
        • 适用环境:
        • 使用场景:
        • 使用案例
    • 如何选择合适的持久化存储方式


为什么Docker容器需要使用持久化存储

1.什么是Docker容器?

Docker是一种流行的容器化技术,它允许开发者将应用程序及其依赖打包在一个轻量级、可移植的容器中。与虚拟机不同,Docker容器共享主机操作系统的内核,因此更轻便和高效。

2.什么是持久化存储?

持久化存储指的是保存数据的方法,这些数据在应用程序或系统重启后仍然存在。在传统计算中,我们通常将数据存储在硬盘、数据库或外部存储设备上。

3.为什么Docker容器需要持久化存储?

Docker容器的设计初衷是短暂的和可替换的。所有在日常使用中容器常常处于用后即焚的状态,这意味着一旦容器停止运行或被删除,其中的数据会消失。这对于需要保存数据的应用来说是个大问题,比如数据库、日志文件或用户上传的内容。

4.Docker如何实现持久化存储?

Docker 提供了多种持久化存储方式,每种方式在不同环境和使用场景下有其独特的优势。本篇博客主要讲述Docker 卷(Volumes)、绑定挂载(Bind Mounts)和网络存储(Network Storage)的使用案例和实现方法。

注: 需要提前安装docker

(1)、Docker卷(Volumes)

简介

Docker 卷是由 Docker 管理的存储,可以独立于容器生命周期存在,适合需要在多个容器之间共享或持久化数据的场景。

适用环境:

持久化需求: 数据需要在容器重启或删除后依然存在。
多容器共享: 多个容器需要访问相同的数据。
数据备份与恢复: 需要方便地对数据进行备份和恢复操作。

使用场景:

数据库数据存储: 例如 MySQL、PostgreSQL 等数据库的数据目录。
应用配置共享: 多个容器共享配置文件或日志文件。

使用案例:

本案例使用nginx作为挂载容器的镜像

1.创建数据卷
创建一名名称为nginx-vol的数据卷

docker volume create nginx-vol

查看以下创建好的数据卷

docker volume ls 

在这里插入图片描述
查看数据卷的详细信息

docker volume inspect nginx-vol

在这里插入图片描述
可以看到关于nginx-vol这个卷的详细信息,其中就包括卷的默认存储位置

让我们查看一下

ls /var/lib/docker/volumes

在这里插入图片描述
2.使用数据卷
使用数据卷的方式有两种,分别是
运行web4容器,使用–mount选项,将容器内的/usr/share/nginx/html目录挂载到数据卷上,实现数据卷挂载

docker run -d -p 80:80  --name web3 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx:latest

常用的一般为下面这种

运行web3容器,使用–v选项,实现数据卷挂载将容器内的/usr/share/nginx/html目录挂载到数据卷上,实现数据卷挂载

docker rm -f web3
docker run -d -p 80:80 --name web3 -v nginx-vol:/usr/share/nginx/html nginx:latest

查看容器是否挂载到了数据卷上

ls /var/lib/docker/volumes/nginx-vol/_data/

在这里插入图片描述
修改index.html文件内容

echo "web3-running" > /var/lib/docker/volumes/nginx-vol/_data/index.html

查看
curl 本机ip

curl 192.168.10.11

在这里插入图片描述
查看数据持久化功能

docker rm -f web3
cat /var/lib/docker/volumes/nginx-vol/_data/index.html

可以看到即使删除了容器,nginx的页面文件依旧存在
在这里插入图片描述

(2)、绑定挂载(Bind Mounts)

简介:

绑定挂载将主机文件系统中的一个目录挂载到容器中,允许容器直接访问和修改主机上的文件。

适用环境:

开发环境: 开发过程中需要频繁修改主机文件,并立即在容器中生效。
主机与容器数据共享: 需要在主机和容器之间共享文件。

使用场景:

开发和测试: 挂载代码目录,以便在主机上编辑代码时容器能立即使用最新代码。
日志文件: 将容器的日志文件直接写入主机目录,方便监控和分析。

使用案例

创建用于容器挂载的目录

mkdir /opt/test

运行web4容器并使用bind mount方法实现本地任意目录挂载

docker run -d -p 80:80 --name web4 --mount type=bind,src=/opt/test,dst=/usr/share/nginx/html nginx:latest

查看已挂载目录,里面没有任何数据

ls /opt/test/

在这里插入图片描述
添加内容至/opt/test/index.html中

echo "web4-running" > /opt/test/index.html

使用curl命令访问容器
curl 本机ip

curl 192.168.10.11

在这里插入图片描述
测试数据持久化功能

docker rm -f web4
ls /opt/test/

可以看到文件依旧存在

(3)、 网络存储(Network Storage)

简介:

使用网络文件系统(如 NFS、CIFS 等)将远程存储挂载到容器中,适用于需要跨多个主机共享数据的场景。

适用环境:

分布式系统: 需要在多个主机上的容器之间共享数据。
集中式存储: 数据集中存储在远程文件系统中,便于管理和备份。

使用场景:

分布式应用: 例如使用 NFS 挂载配置文件和数据目录,便于集群中的所有节点访问。
企业存储: 集中存储企业级应用的数据,方便管理和备份。

使用案例

安装 NFS 并挂载:

假设使用 NFS 作为网络存储系统。

在另一台主机上上安装 NFS 客户端:

mkidr /nfsdata
yum install yum -y install nfs-utils rpcbind -y 
vim /etc/exports 

输入 /nfsdata *(rw,sync,no_root_squash)
:wq 保存退出

systemctl start rpcbind 
systemctl enable rpcbind 
systemctl start nfs-server 
systemctl enable nfs-server 
showmount -e 

nfs成功部署
在这里插入图片描述

挂载 NFS 共享:
回到本机192.168.10.11

yum -y install nfs-utils.x86_64
mount -t nfs 192.168.10.14:/nfsdata /nfs

然后就和上面绑定挂载一样了,不再过多叙述

如何选择合适的持久化存储方式

数据持久性: 需要在容器重启或删除后保留数据,建议使用 Docker 卷或网络存储。
共享需求: 如果需要多个容器或主机共享数据,网络存储或卷是较好的选择。
管理和备份: Docker 卷由于是 Docker 原生支持的,管理和备份更方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm+pytorch2.3.1安装

成功运行 Anaconda简介 Anaconda 就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。 Anaconda安装 去官网地址下载 Download Anaconda Distribution | Anaconda​www.ana…

SpringBoot启动原理详解

透彻理解SpringBoot启动原理(一) 一张Spring启动顺序图我们对Spring启动原理有多少理解呢一起看一下Spring有那些扩展点和启动过程有关通过打印日志学习Spring的执行顺序实例化和初始化的区别Spring重要扩展点的启动顺序1.BeanFactoryPostProcessor2.实例…

python3.10.4——Windows环境安装

python下载官网:https://www.python.org/downloads/ 如果安装在C盘,需要右键→选择“以管理员身份运行” 勾选2个按钮,选择自定义安装 全部选择,点击Next 更改安装路径 命令行检查python是否安装成功: 出现版本号说明…

内存泄漏详解

文章目录 什么是内存泄漏内存泄漏的原因排查及解决内存泄漏避免内存泄漏及时释放资源设置合理的变量作用域及时清理不需要的对象避免无限增长避免内部类持有外部类引用使用弱引用 什么是内存泄漏 内存泄漏是指不使用的对象持续占有内存使得内存得不到释放,从而造成…

【Hot100】LeetCode—416. 分割等和子集

目录 题目1- 思路2- 实现⭐152. 乘积最大子数组——题解思路 3- ACM 实现 题目 原题连接:416. 分割等和子集 1- 思路 理解为背包问题 思路: 能否将均分的子集理解为一个背包,比如对于 [1,5,11,5],判断能否凑齐背包为 11 的容量…

面试场景题系列--(1)如果系统的 QPS 突然提升 10 倍该怎么设计?--xunznux

1. 如果系统的 QPS 突然提升 10 倍该怎么设计? 1.1 硬件的扩展微服务的拆分 如果所有的业务包括交易系统、会员信息、库存、商品等等都夹杂在一起,当流量一旦起来之后,单体架构的问题就暴露出来了,机器挂了所有的业务就全部无法…

SSCI 二区正刊 绿色金融、财政、经济、债务、成本、创新题目:

1金融科技能提升企业的双元创新能力吗?组织韧性xxxxx 2从财政分权到经济高质量发展:税收征管强度xxxxxxx 3企业智能化转型、债务融资成本与绿色xxxx 绿色金融改革能否促进地方经济高质量发展:基于绿色金融改革创新试验区的准xxxx 4绿色金融改…

MBR60200PT-ASEMI无人机专用MBR60200PT

编辑:ll MBR60200PT-ASEMI无人机专用MBR60200PT 型号:MBR60200PT 品牌:ASEMI 封装:TO-247 批号:最新 恢复时间:35ns 最大平均正向电流(IF):60A 最大循环峰值反向…

win11 安装 Gradle

一、win11 安装Gradle(7.5.1): 1.1、下载二进制包 Gradle下载页面 1.2、配置环境变量 变量名:GRADLE_HOME 变量值(二进制包解压路径):D:\develop-tool\gradle-7.5.1 变量名:GRADLE_USER_HOME 变量值&a…

JAVA基础 - 控制语句

目录 一. 简介 二. 分支语句 三. 循环语句 四. 跳转语句 一. 简介 在 Java 中,控制语句用于控制程序的执行流程,根据不同的条件决定执行哪些代码块。常见的控制语句包括: if-else 语句:根据条件的真假执行不同的代码块。 swi…

Spark实时(一):StructuredStreaming 介绍

文章目录 StructuredStreaming 介绍 一、SparkStreaming实时数据处理痛点 1、复杂的编程模式 2、SparkStreaming处理实时数据只支持Processing Time 3、微批处理,延迟高 4、精准消费一次问题 二、StructuredStreaming概述 三、​​​​​​​​​​​​​​…

BGP选路之AS-PATH

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value,然后是Local Preference,再次是路由生成方式&a…

算法学习笔记:回溯法

回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一节点时&…

【Android Studio】整合okhttp发送get和post请求(提供Gitee源码)

前言:本篇博客教学大家如何使用okhttp发送同步/异步get请求和同步/异步post请求,这边博主把代码全部亲自测试过了一遍,需要源码的可以在文章最后自行拉取。 目录 一、导入依赖 二、开启外网访问权限 三、发送请求 3.1、发送同步get请求…

关于pycharm上push项目到gitee失败原因

版权声明:本文为博主原创文章,如需转载请贴上原博文链接:https://blog.csdn.net/u011628215/article/details/140577821?spm1001.2014.3001.5502 前言:最近新建项目push上gitee都没有问题,但是当在gitee网站进行了一个…

2024在线PHP加密网站源码

源码介绍 2024在线PHP加密网站源码 更新内容: 1.加强算法强度 2.优化模版UI 加密后的代码示例截图 源码下载 https://download.csdn.net/download/huayula/89568335

kafka集群搭建-使用zookeeper

1.环境准备: 使用如下3台主机搭建zookeeper集群,由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内,故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载,或者使用如…

Mysql的主从复制(重要)和读写分离(理论重要实验不重要)

一、主从复制:架构一般是一主两从。 1.主从复制的模式: mysql默认模式为异步模式:主库在更新完事务之后会立即把结果返回给从服务器,并不关心从库是否接收到以及从库是否处理成功。缺点:网络问题没有同步、防火墙的等…

vue3-video-play 导入 以及解决报错

npm install vue3-video-play --save # 或者 yarn add vue3-video-play import Vue3VideoPlay from vue3-video-play; import vue3-video-play/dist/style.css; app.use(Vue3VideoPlay) <template><div id"main-container-part"><div class"al…

Meta发布最强AI模型,扎克伯格公开信解释为何支持开源?

凤凰网科技讯 北京时间7月24日&#xff0c;脸书母公司Meta周二发布了最新大语言模型Llama 3.1&#xff0c;这是该公司目前为止推出的最强大开源模型&#xff0c;号称能够比肩OpenAI等公司的私有大模型。与此同时&#xff0c;Meta CEO马克扎克伯格(Mark Zuckerberg)发表公开信&a…