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

【DOCKER】-3 数据持久化

文章目录

    • 1、持久化的简要介绍
      • 1.1 什么类型的数据需要持久化
      • 1.2 我们为什么要持久化
    • 2、数据卷挂载
      • 2.1数据卷
      • 2.2 匿名卷
      • 2.3 命名卷
      • 2.4 特点与优势
    • 3、 数据卷容器
      • 3.1 介绍
      • 3.2 数据卷容器的使用
      • 3.3 使用场景


1、持久化的简要介绍

1.1 什么类型的数据需要持久化

  1. 重要的数据
  2. 易丢失的数据
  3. 需要回溯的数据

1.2 我们为什么要持久化

  • 数据保护

容器中的数据默认是非持久的,如果容器被删除,其中的数据将会丢失。数据持久化可以确保数据的长远保存和可恢复性

  • 数据共享

通过数据持久化,可以实现容器之间与宿主机之间的数据共享,提高数据的使用率

  • 灵活性

数据持久化提供了灵活的数据管理策略,可以根据需求选择不同的持久化方案

2、数据卷挂载

2.1数据卷

使用场景

在这里插入图片描述

 docker run 命令的以下格式可以实现数据卷
-v, --volume=[host-src:]container-dest[:<options>]
<options>
ro 从容器内对此数据卷是只读,不写此项默认为可读可写
rw 从容器内对此数据卷可读可写,此为默认值#指定宿主机目录或文件格式: 
-v   <宿主机绝对路径的目录或文件>:<容器目录或文件>[:ro]  #将宿主机目录挂载容器目录,两个目录
都可自动创建
案例:[root@localhost ~]# docker run -itd --name v1 -v /data/:/opt centos:7 
38831bec3f3983127d0782ab9fb07c9b0c44d28b2087042e8e808ae9ed586dc0
[root@localhost ~]# ls /data/[root@localhost data]# ls
CentOS-aliyun-lhr.repo  epel-aliyun.repo[root@localhost data]# docker exec -it v1 bash -c "ls opt"
CentOS-aliyun-lhr.repo	epel-aliyun.repo
[root@localhost data]# 

2.2 匿名卷

#匿名卷,只指定容器内路径,没有指定宿主机路径信息,宿主机自动生成/var/lib/docker/volumes/<卷ID>/_data目录,并挂载至容器指定路径
-v <容器内路径>
#示例:
docker run --name nginx -v /etc/nginx nginx#使用inspect命令查看匿名卷的挂载位置
[root@localhost /]# docker inspect 9fc065d03682
...
"Mounts": [{"Type": "volume","Name": "23e56f50455bf97fae49039698051b80ab4cdb146eb78a20141d670edcb3a061","Source": "/var/lib/docker/volumes/23e56f50455bf97fae49039698051b80ab4cdb146eb78a20141d670edcb3a061/_data","Destination": "/etc/nginx",
...#查看挂载情况
[root@localhost /]# ls var/lib/docker/volumes/23e56f50455bf97fae49039698051b80ab4cdb146eb78a20141d670edcb3a061/_data
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
[root@localhost /]# docker exec  -it nginx bash -c "ls etc/nginx"
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params
[root@localhost /]# 

2.3 命名卷

#命名卷将固定的存放在/var/lib/docker/volumes/<卷名>/_data
-v <卷名>:<容器目录路径>
#可以通过以下命令事先创建,如可没有事先创建卷名,docker run时也会自动创建卷
docker volume create <卷名>#示例
[root@localhost /]# docker volume create g1
g1
[root@localhost /]# ls /var/lib/docker/volumes/
23e56f50455bf97fae49039698051b80ab4cdb146eb78a20141d670edcb3a061  backingFsBlockDev  g1  metadata.db
[root@localhost /]# #列出当前所有的卷
[root@localhost /]# docker volume list
DRIVER    VOLUME NAME
local     23e56f50455bf97fae49039698051b80ab4cdb146eb78a20141d670edcb3a061
local     g1
[root@localhost /]# #案例
[root@localhost /]# docker run -itd -P --name nginx01 -v g1:/usr/share/nginx/html nginx:latest 
1df93e81b625ccfd62c3f6b6ef62c050057687fd33458060dc64d12f8ea493a7
[root@localhost /]# cd /var/lib/docker/volumes/
[root@localhost volumes]# ls
23e56f50455bf97fae49039698051b80ab4cdb146eb78a20141d670edcb3a061  backingFsBlockDev  g1  metadata.db
[root@localhost volumes]# ls g1/
_data
[root@localhost volumes]# ls g1/_data/
50x.html  index.html
[root@localhost volumes]# cd g1/_data/
[root@localhost _data]# ls
50x.html  index.html
[root@localhost _data]# vim index.html 
[root@localhost _data]# mv index.html index.html.bak
[root@localhost _data]# vim index.html
[root@localhost _data]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED              STATUS                      PORTS                                     NAMES
1df93e81b625   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute           0.0.0.0:32768->80/tcp, :::32768->80/tcp   nginx01
9fc065d03682   nginx:latest   "/docker-entrypoint.…"   17 minutes ago       Up 17 minutes               80/tcp                                    nginx
38831bec3f39   centos:7       "/bin/bash"               26 minutes ago       Up 26 minutes                                                         v1
940b182e84be   nginx:latest   "/docker-entrypoint.…"   18 hours ago         Exited (0) 18 hours ago                                               gfy
f58fc14af255   nginx:latest   "/docker-entrypoint.…"   18 hours ago         Exited (137) 18 hours ago                                             web2
364c9fd174dd   nginx:latest   "/docker-entrypoint.…"   18 hours ago         Exited (137) 18 hours ago                                             web1
[root@localhost _data]# 

在这里插入图片描述

在这里插入图片描述

2.4 特点与优势

  • 特点

数据卷是Docker提供的一种持久化机制,它将数据存储在宿主机的文件系统中,并可以跨多个容器共享这些数据。数据卷的生命周期独立于容器,即使容器被删除,数据卷仍然存在。

  • 优势

首先,数据卷提供了一种将数据持久化的方法,使得在容器被删除或重新启动后,数据仍然可以被访问。其次,由于数据卷是绕过联合文件系统的,因此其性能要优于容器的文件系统。最后,数据卷可以被多个容器共享,这使得容器之间可以方便地共享数据。

3、 数据卷容器

3.1 介绍

  • 概念

数据卷容器是一个专门用于存储数据的Docker容器,它通过将数据保存在宿主机上的某个目录中,实现了数据的持久化和共享。

  • 用途

数据卷容器主要用于在Docker容器之间共享和持久化数据,解决了容器数据易失性的问题。它可以被多个容器同时挂载,从而实现容器间的数据共享。

3.2 数据卷容器的使用

#创建一个 web1 的数据卷容器,它有两个数据卷: /data1 和 /data2
[root@localhost _data]# docker run -itd --name web1 -v /data1 -v /data2 centos:7 bash
4976432b33b3b8657b116372dcb49f35055e654fecdf85fe8311075028126099
[root@localhost _data]# docker ps -a
CONTAINER ID   IMAGE      COMMAND   CREATED          STATUS          PORTS     NAMES
4976432b33b3   centos:7   "bash"    16 seconds ago   Up 15 seconds             web1#在 web1 容器内部,我们向这两个数据卷中分别写入了文件。
[root@localhost _data]# docker exec  -it web1 bash
[root@4976432b33b3 /]# ls
anaconda-post.log  bin  data1  data2  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@4976432b33b3 /]# ls data1
[root@4976432b33b3 /]# ls data2
[root@4976432b33b3 /]# echo "gfy" >> data1/abc.txt
[root@4976432b33b3 /]# echo "GFY" >> data2/ABC.txt
[root@4976432b33b3 /]# ls data2
ABC.txt
[root@4976432b33b3 /]# ls data1
abc.txt
[root@4976432b33b3 /]# exit 
exit#创建新的容器 web2 ,并使用 --volumes-from 选项将 web1 容器中的数据卷挂载到web2 中。这样, web2 就可以访问 web1 中的数据卷了。
[root@localhost _data]# docker run -itd --volumes-from web1 --name web2 centos:7 bash
1e34476e222133c5ea2e26e7814e4838e1a64b4c3cef511e40872db8673915ab#在 web2 容器内部,我们可以验证是否能够访问到 web2 中的数据卷内容。[root@localhost _data]# docker exec -it web2 bash
[root@1e34476e2221 /]# ls
anaconda-post.log  bin  data1  data2  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@1e34476e2221 /]# ls data1
abc.txt
[root@1e34476e2221 /]# ls data2
ABC.txt
[root@1e34476e2221 /]# 

3.3 使用场景

  • 使用场景

数据卷容器适用于需要在多个容器之间共享数据,或者需要持久化存储数据的场景。例如,在Web应用中,可以使用数据卷容器来存储用户的上传文件或数据库数据。

  • 限制与注意事项

使用数据卷容器时需要注意以下几点:数据卷容器本身并不运行任何应用,只是作为数据存储使用;当数据卷容器被删除时,其上的所有数据也将被删除,因此需要谨慎操作;数据卷容器的性能和宿主机文件系统的性能密切相关,因此需要根据实际需求进行选择和优化。

http://www.lryc.cn/news/583514.html

相关文章:

  • 项目进度受制于资源分配,如何动态调配资源
  • 20250709: WSL+Pycharm 搭建 Python 开发环境
  • PHP 基于模板动态生成 Word 文档:图片 + 表格数据填充全方案(PHPOffice 实战)
  • 爬虫-数据解析
  • 20-C#构造函数--虚方法
  • 机器视觉之工业相机讲解
  • 【leetcode100】下一个排列
  • 题解:P13017 [GESP202506 七级] 线图
  • RAC-CELL(小区)处理
  • 射频前端的革新力量:ATR2057超低噪声放大器深度解析
  • C#基础篇(10)集合类之列表
  • AMIS全栈低代码开发
  • Claude Code 开发使用技巧
  • 一天一道Sql题(day05)
  • 双立柱式带锯床cad【1张总图】+设计说明书+绛重
  • MS32C001-C单片机,32位ARM M0+内核,宽电压、低功耗、小封装。
  • Python PyDub详解:音频处理从未如此简单
  • 高效集成-C#全能打印报表设计器诞生记
  • Paimon 原子提交实现
  • 无人机雷达模块运行与技术解析
  • 【RK3568+PG2L50H开发板实验例程】FPGA部分 | ROM、RAM、FIFO 的使用
  • UI前端与数字孪生结合实践探索:智慧物流的仓储优化与管理系统
  • 缓存三大问题详解与工业级解决方案
  • 分类预测 | Matlab基于KPCA-ISSA-SVM和ISSA-SVM和SSA-SVM和SVM多模型分类预测对比
  • 【算法训练营Day10】栈与队列part2
  • 微算法科技从量子比特到多级系统,Qudits技术革新引领量子计算新时代
  • 三码合一:OneCode注解驱动的新时代编码范式
  • C++学习笔记三
  • 类模板的语法
  • Python标准库:时间与随机数全解析