当前位置: 首页 > 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.dtcms.com/a/270529.html

相关文章:

  • OpenCV图像增强秘籍:高通滤波与特效艺术
  • Web 前端框架选型:React、Vue 和 Angular 的对比与实践
  • PiscTrace深蹲计数功能实现:基于 YOLO-Pose 和人体关键点分析
  • 【python处理excel】B列单元格中的内容都是回车换行的,把这些信息拆成多行多列,并且把A列对应的信息带过去。
  • A模块 系统与网络安全 第四门课 弹性交换网络-2
  • C#正则表达式全面详解:从基础到高级应用
  • 跨部门协作难以对齐项目进度,如何促进协同
  • Rust #[] 语法
  • PHP语法高级篇(一):日期时间处理和包含文件
  • 【系统与工具】Linux——Linux简介、安装、简单使用
  • 详解Kafka重平衡机制详解
  • MySQL8.0基于GTID的组复制分布式集群的环境部署
  • mysql互为主从失效,重新同步
  • 超越公有云:在裸金属服务器上构建低成本、高性能的静态资源服务
  • 创客匠人:创始人 IP 打造中 “放下身段” 的深层逻辑
  • 身份证识别api-便捷生活与安全社会的双重保障
  • 神经网络简介
  • 鸿蒙商城开发:ZKmall开源商城系统特性适配与性能优化
  • 7.神经网络基础
  • 【JavaEE进阶】图书管理系统(未完待续)
  • 【学习笔记】OkHttp源码架构解析:从设计模式到核心实现
  • 保姆级安装 Ruby 环境下载及安装教程, RubyInstaller下载及安装教程
  • Javaweb - 10.7 乱码和路径问题
  • 影石(insta360)X4运动相机视频删除的恢复方法
  • SHA-256算法详解——Github工程结合示例和动画演示
  • 中望CAD2026亮点速递(5):【相似查找】高效自动化识别定位
  • Python(30)基于itertools生成器的量子计算模拟技术深度解析
  • 【SQL】使用UPDATE修改表字段的时候,遇到1054 或者1064的问题怎么办?
  • (八)PS识别:使用 Python 自动化生成图像PS数据集
  • Linux驱动05 --- TCP 服务器