Docker数据卷操作实战

news/2025/2/28 7:08:55/

什么是数据卷

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 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


http://www.ppmy.cn/news/1575438.html

相关文章

Pytorch实现之浑浊水下图像增强

简介 简介:这也是一篇非常适合GAN小白们上手的架构文章!提出了一种基于GAN的水下图像增强网络。这种网络与其他架构类似,生成器是卷积+激活函数+归一化+残差结构的组成,鉴别器是卷积+激活函数+归一化以及全连接层。损失函数是常用的均方误差、感知损失和对抗损失三部分。 …

用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解

DeepSeek R1 的完整训练流程核心在于&#xff0c;在其基础模型 DeepSeek V3 之上&#xff0c;运用了多种强化学习策略。 本文将从一个可本地运行的基础模型起步&#xff0c;并参照其技术报告&#xff0c;完全从零开始构建 DeepSeek R1&#xff0c;理论结合实践&#xff0c;逐步…

字段对比清洗

import pandas as pd import psycopg2 from psycopg2 import sql# 数据库连接配置 DB_CONFIG {"host": "","user": "","password": "","dbname": "","port": , }def get_excel_fi…

Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程

Redisson 是一个高性能的 Java Redis 客户端&#xff0c;提供了丰富的分布式工具集&#xff0c;如分布式锁、Map、Queue 等&#xff0c;帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时&#xff0c;开发者通常有两种选择&#xff1a; 使用 Redisson 原始依赖。使用 Re…

STM32 微控制器库RCC_OscInitTypeDef结构参数介绍

目录 1. 结构体定义2. 结构体成员说明(1) OscillatorType(2) HSEState(3) LSEState(4) HSIState(5) HSICalibrationValue(6) LSIState(7) PLL 3. 使用步骤(1) 定义结构体(2) 配置结构体成员(3) 调用 HAL 初始化函数 4. 示例代码5. 注意事项(1) 时钟源的选择(2) 校准值(3) 时钟配…

RuntimeWarning: invalid value encountered in scalar power在进行标量的幂运算时遇到了无效值

year_profit ((profit / initial_cash) ** (1 / yy) - 1) * 100 RuntimeWarning: invalid value encountered in scalar power 这个警告表示在执行标量幂运算 ((profit / initial_cash) ** (1 / yy) - 1) * 100 时遇到了无效值。常见的引发原因及解决办法如下&#xff1a; ###…

WPF12-MVVM

目录 1. 什么是MVVM2. 实现简单MVVM2.1. Part 12.2. Part 2 1. 什么是MVVM MVVM 是 Model-View-ViewModel 的缩写&#xff0c;是一种用于构建用户界面的设计模式&#xff0c;是一种简化用户界面的事件驱动编程方式。 MVVM 的目标是实现用户界面和业务逻辑之间的彻底分离&…

DeepSeek中的MLA技术

大模型推理的两个阶段&#xff1a;prefill和decode prefill阶段处理整个输入序列&#xff0c;并生成第一个输出token&#xff0c;并初始化KV cachedecode阶段则逐个生成后续的tokens KV cache 无KV cache的推理过程&#xff1a;每次生成新token时&#xff0c;需要将整个历史序列…