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

Docker数据卷操作实战

什么是数据卷

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和享用
  • 对 数据卷 的修改立马生效
  • 对 数据卷 的更新,不会影响镜像
  • 数据卷 默认会一直存在,即时容器被删除

为什么使用数据卷

  • 当创建一个容器的时候,容器运行,数据能不能持久化
  • 如果能够持久化,数据存储在哪?由于 docker 是隔离的,数据能不能存储在容器外
  • 如果部署很多容器,每次都需要进入容器中进行配置嘛?能不能外部进行配置

docker 数据卷呈现给 docker 容器的一个形式就是目录,该目录支持多个容器间共享,修改不会影响到镜像。使用 Docker 的数据卷,类似在系统中使用 mount 挂载一个文件系统。

数据卷挂载操作

三种挂载数据卷格式

  • 具体目录挂载:docker run [options] -v <宿主机绝对路径:容器内的路径[:ro | rw]> <镜像名>
  • 默认目录挂载:docker run [options] -v <任意别名:容器内的路径[:ro | rw]> <镜像名>
  • 匿名目录挂载:docker run [options] -v <容器内的路径[:ro | rw]> <镜像名>

默认目录挂载和匿名目录挂载的目录默认在 /var/lib/docker/volumes/ 目录下。

具体目录挂载 

格式:docker run [options] -v <宿主机绝对路径 | 任意别名:容器内的路径[:ro | rw]> <镜像名> 

ro:代表 read-only,容器的路径只允许读,不允许写。不影响宿主机的路径可读可写

rw:默认值,代表可读可写

具名挂载

[root@k8s-master ~]# docker run -d -p 8081:8080 --name tomcat02 -v /opt/aa:/usr/local/tomcat/webapps tomcat:8.5.73

 测试容器和宿主机之间数据共享

#进入tomcat02容器
#进入容器挂载目录
#创建text.txt文件
[root@k8s-master ~]# docker exec -it tomcat02 bash
root@83751adb2f16:/usr/local/tomcat# cd webapps/
root@83751adb2f16:/usr/local/tomcat/webapps# touch text.txt
root@83751adb2f16:/usr/local/tomcat/webapps# ls
text.txt

#在宿主机查看文件
[root@k8s-master ~]# cd /opt/aa/
[root@k8s-master aa]# ls 
text.txt

#在宿主机添加test2.txt
[root@k8s-master aa]# touch test2.txt
[root@k8s-master aa]# ls
test2.txt  text.txt
root@83751adb2f16:/usr/local/tomcat/webapps# ls
test2.txt  text.txt

删除容器

[root@k8s-master ~]# docker rm -f 83751adb2f16
[root@k8s-master aa]# ls
test2.txt  text.txt

 默认目录挂载

格式:docker run [options] -v <任意别名:容器内的路径[:ro | rw]> <镜像名> 

ro:代表 read-only,容器的路径只允许读,不允许写。不影响宿主机的路径可读可写

rw:默认值,代表可读可写

[root@k8s-master ~]# docker run -d -p 8080:8081 --name tomcat -v aa:/usr/local/tomcat/webapps tomcat:8.5.27
[root@k8s-master ~]# find / -name aa
/var/lib/docker/overlay2/6bd69f1cc95f446236c6a944a059082b3a79f9d8ea76bdf41e30fc7a61f4ff14/diff/usr/lib/.build-id/aa
/var/lib/docker/overlay2/53bde18c658b564d75ec2e18ff485eca8cb8056ae625613e4cecc11a8695dd5d/merged/usr/lib/.build-id/aa
/var/lib/docker/volumes/aa
/usr/share/locale/aa
/opt/aa
#在宿主机中查看
 [root@k8s-master aa]# cd /var/lib/docker/volumes/aa/_data/
[root@k8s-master _data]# ls
docs  examples  host-manager  manager  ROOT
#aa 代表一个数据卷名字,可以是任意,这相当于相对路径,它会在 /var/lib/docker/volumes 下创建 aa 目录作为数据卷。

匿名目录挂载

没指定名字的挂载都是匿名挂载,-v 只写了容器内路径,并没写宿主机路径。

匿名目录挂载的目录是:/var/lib/docker/volumes/,它会在这个目录生成匿名数据卷目录。

格式:docker run [options] -v <容器内的路径[:ro | rw]> <镜像名>

[root@k8s-master ~]# docker run -d -p 8080:8081 --name tomcat03 -v /usr/local/tomcat/webapps tomcat:8.5.27
#没有指定宿主机,docker会自动在/var/lib/docker/volumes生成很长的字符串
[root@k8s-master volumes]# ll
total 24
drwx-----x. 3 root root     19 Feb 26 08:03 57228ed1d063b3c66afa84f968018311f3ab5c2e3272d9c7197463981a76df25
#查看数据卷
[root@k8s-master volumes]# docker volume ls
DRIVER    VOLUME NAME
local     57228ed1d063b3c66afa84f968018311f3ab5c2e3272d9c7197463981a76df25

 读写权限

 启动 tomcat04 容器,挂载到 kele 数据卷里,并赋予只读权限

[root@k8s-master ~]# docker run -d -P --name tomcat04 -v frx:/usr/local/tomcat/webapps:ro tomcat:8.5.27
74dbfe31c4a5f47f66c3f2b807d5944d7eefc711d2b576a82fa6485ac8079d69
[root@k8s-master ~]# docker volume ls
DRIVER    VOLUME NAME
local     frx

 #到宿主机目录下查看,并新建文本文件
[root@k8s-master ~]# cd /var/lib/docker/volumes/frx/_data/
[root@k8s-master _data]# touch test1.txt
[root@k8s-master _data]# ls
docs  examples  host-manager  manager  ROOT  test1.txt
#进入容器查看是否可读,不允许写
[root@k8s-master ~]# docker  exec -it tomcat04 /bin/bash
root@74dbfe31c4a5:/usr/local/tomcat# cd webapps/
root@74dbfe31c4a5:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager  test1.txt
root@74dbfe31c4a5:/usr/local/tomcat/webapps# touch test2.txt
touch: cannot touch 'test2.txt': Read-only file system

 数据卷操作命令

#数据卷查看
docker volume ls 
#查看frx数据卷的具体信息
[root@k8s-master ~]# docker volume inspect frx

#数据卷创建
docker volume create Myvolume

#数据卷删除
docker  volume rm -f Myvolume

相关文章:

  • centos22.04 dpkg -l 输出状态标识含义
  • HTTP非流式请求 vs HTTP流式请求
  • 金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测
  • 深入解析Tomcat目录结构
  • Grok 3 vs. DeepSeek vs. ChatGPT:2025终极AI对决
  • 【MATLAB中的图像数据结构】
  • 【奥卡姆剃刀原理-如何理解云计算和边缘计算 关键字摘取】
  • MATLAB下载安装教程(附安装包)2025最新版(MATLAB R2024b)
  • 网络安全之日志审计 网络安全审计制度
  • 山东大学软件学院ai导论实验之生成对抗网络
  • 【Python爬虫(71)】用Python爬虫解锁教育数据的奥秘
  • obj离线加载(vue+threejs)+apk方式浏览
  • DDNS-GO 动态域名解析
  • 基于YOLO11深度学习的医学X光骨折检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
  • 基于SpringBoot的“洪涝灾害应急信息管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 【Java】I/O 流篇 —— 转换流与序列化流
  • 5分钟学习-什么事前端HTML文件
  • Python 网络爬虫实战全解析:案例驱动的技术探索
  • Linux-IPC-消息队列
  • Java 大视界 -- Java 大数据在智能物流路径规划与车辆调度中的创新应用(102)
  • 秦洪看盘|浮现新预期,存量资金积极调仓
  • 巴防长称中俄可参与克什米尔恐袭事件国际调查,外交部回应
  • 中消协发布“五一”消费提示:践行“光盘行动”,抵制餐饮浪费
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 伊朗爆炸港口已恢复货物进出口工作
  • 一回合摘下“狮心”,张名扬霸气回应观众:再嘘一个我听听