Docker Volume(存储卷)
文章目录
- Docker Volume(存储卷)
- 1.什么是存储卷?
- 2.为什么需要存储卷?
- 3. 存储卷的分类
- 1) 管理卷Volume
- 方式一:Volume命令操作
- 方式二: -v 或者--mount 指定
- 方式三: Dockerfile 匿名卷
- 小结
- Docker 卷生命周期
- Docker 卷共享
- 2)绑定卷 bind mount
- -v 参数创建卷
- 3)临时卷 tmpfs
- 方式一:指定--tmpfs 创建
- 方式二: --mount 指定参数创建
Docker Volume(存储卷)
1.什么是存储卷?
存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。
在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。卷的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。
比如说宿主机的/data/web 目录与容器中的/tmp/web 目录绑定关系,然后容器中的进程向这个目录中写数据时,是直接写在宿主机的目录上的,绕过容器文件系统与宿主机的文件系统建立关联关系,使得可以在宿主机和容器内共享数据库内容,让容器直接访问宿主机中的内容,也可以宿主机向容器写入内容, 容器和宿主机的数据读写是同步的。
2.为什么需要存储卷?
-
数据丢失问题
容器安装业务类型,可以分为两大类:
-
无状态的(数据不需要被持久化)
-
有状态的(数据需要被持久化)
显然容器更擅长无状态的应用,因为无状态的数据不能持久化存储,那么容器的根目录的生命周期就和容器的生命周期是一致的。容器文件系统的本质是在镜像层上面创建的读写层,运行中的容器对任何文件的修改都存在于该读写层,只要容器被销毁那么数据也就随之被销毁了。
虽然容器希望所有的业务都尽量保持无状态,这样容器就可以开箱即用,并且可以任意调度,但实际业务总是有各种需要数据持久化的场景,比如 MySQL 等有状态的业务。因此为了解决有状态业务的需求, Docker 提出了卷(Volume)的概念 。
-
-
性能问题
UnionFS 对于修改删除等,一般效率非常低,如果对一于 I/O 要求比较高的应用,如redis 在实现持化存储时,是在底层存储时的性能要求比较高。
-
宿主机和容器互访不方便
宿主机访问容器,或者容器访问要通过 docker cp 来完成,应用很难操作 -
容器和容器共享不方便
3. 存储卷的分类
目前 Docker 提供了三种方式将数据从宿主机挂载到容器中
- volume docker 管理卷,默认映射到宿主机的/var/lib/docker/volumes 目录
下, 只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由
容器引擎 daemon 自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷
建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定
那些使用目录,临时存储比较适合。 - bind mount 绑定数据卷,映射到宿主机指定路径下,在宿主机上的路径要人工的
指定一个特定的路径, 在容器中也需要指定一个特定的路径, 两个已知的路径建立关
联关系 - tmpfs mount 临时数据卷,映射到于宿主机内存中,一旦容器停止运行, tmpfs
mounts 会被移除,数据就会丢失,用于高性能的临时数据存储。
1) 管理卷Volume
存储卷可以通过命令方式创建,也可以在创建容器的时候通过 -v and --mount
指定
方式一:Volume命令操作
命令 | 别名 | 功能 |
---|---|---|
docker volume create | 创建存储卷 | |
docker volume inspect | 显示存储卷详细信息 | |
docker volume ls | docker volume list | 列出存储卷 |
docker volume prune | 清理所有无用数据卷 | |
docker volume rm | 删除卷,使用中的无法删除 |
docker volume create
功能:创建存储卷
docker volume create [OPTIONS] [VOLUME]
关键参数
○ -d, --driver: 指定驱动,默认是 local
○ --label: 指定元数据
docker volume inspect
功能:查看卷详细信息
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
关键参数
○ -f: 指定相应个格式,如 json
docker volume ls
功能:列出卷
docker volume ls [OPTIONS]
关键参数
- –format: 指定相应个格式,如 json,table
- –filter,-f: 过滤
- -q: 仅显示名称
docker volume rm
功能:删除卷,需要容器不使用
docker volume rm [OPTIONS] VOLUME [VOLUME...]
关键参数
○ -f,–force:强制删除
docker volume prune
功能:删除不使用的本地卷
docker volume prune [OPTIONS]
关键参数
○ --filter:过滤
○ -f, --force :不提示是否删除
方式二: -v 或者–mount 指定
-v 和-mount 都可以完成管理卷的创建
-v 参数
• 功能:完成目录映射
docker run -v name:directory[:options] ......
参数
○ 第一个参数:卷名称
○ 第二个参数:卷映射到容器的目录
○ 第三个参数:选项,如 ro 表示 readonly
[root@aliyun ~]# docker run -d --name test -v myvol:/app nginx:latest
[root@aliyun ~]# docker inspect myvol
[{"CreatedAt": "2023-09-14T14:55:36+08:00","Driver": "local","Labels": null,"Mountpoint": "/data/var/lib/docker/volumes/myvol/_data","Name": "myvol","Options": null,"Scope": "local"}
]
–mount 参数
功能:完成目录映射
--mount '<key>=<value>,<key>=<value>'
关键参数
○ type : 类型表示 bind, volume, or tmpfs
○ source , src :对于命名卷,这是卷的名称。对于匿名卷,省略此字段。
○ destination, dst,target:文件或目录挂载在容器中的路径
○ ro,readonly: 只读方式挂载
[root@aliyun ~]# docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest
通过命令查看信息
[root@aliyun ~]# docker inspect devtest
Docker -v 创建管理卷
1.-v 创建管理卷,并且启动容器
[root@aliyun ~]# docker container run --name nginx -d -p 80:80 -v test_volmue2:/usr/share/nginx/html:ro nginx:latest
指定 ro 的话宿主机可以修改,但是容器里面无法修改
方式三: Dockerfile 匿名卷
通过 Dockerfile 的 VOLUME 可以创建 docker 管理卷。我们也可以通过 dockerfile 的 VOLUME 指令在镜像中创建 Data Volume,这样只要通过该镜像创建的容器都会存在挂载点,但值得注意的是通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,而是由 docker 随机生成的 。
小结
宿主机和容器之间数据是同步的,无论是mount 创建的卷数据也会完成同步
Docker 卷生命周期
-
-v创建管理卷
[root@aliyun ~]# docker container run --name nginx -d -p 80:80 -v test_volume2:/usr/share/nginx/html nginx:latest
-
j进入卷目录
[root@aliyun ~]# cd /data/var/lib/docker/volumes/test_volume2/_data/ [root@aliyun _data]# ls 50x.html index.html
注意此时可以看到容器里面的内容自动的放到了宿主机里面,也就
是说宿主机上没有容器会拷贝过去 -
清理释放空间
进入卷目录查看可以看到文件并没有被删除
[root@aliyun _data]# docker stop nginx nginx [root@aliyun _data]# docker rm nginx nginx [root@aliyun _data]# ls 50x.html index.html
Docker 卷共享
-
-v 创建管理卷,并且启动 2 容器,指定同一个卷
[root@aliyun _data]# docker container run --name nginx1 -d -p 80:80 -v test_volume:/usr/share/nginx/html nginx:latest [root@aliyun _data]# docker container run --name nginx_my -d -p 6060:80 -v test_volume:/usr/share/nginx/html nginx:latest
-
进入卷目录修改html
[root@aliyun _data]# ls 50x.html index.html
访问80和6060端口发现首页都被修改了
2)绑定卷 bind mount
-v 和-mount 都可以完成绑定卷的创建
-v 参数创建卷
功能:完成卷映射
docker run -v name:directory[:options] .........
参数
○ 第一个参数: 宿主机目录,这个和管理卷是不一样的
○ 第二个参数:卷映射到容器的目录
○ 第三个参数:选项,如 ro 表示 readonly
–mount 参数创建绑定卷
功能:完成目录映射
--mount '<key>=<value>,<key>=<value>'
关键参数
○ type : 类型表示 bind, volume, or tmpfs
○ source , src : 宿主机目录,这个和管理卷是不一样的。
○ destination, dst,target:文件或目录挂载在容器中的路径
○ ro,readonly: 只读方式挂载
容器该目录本身存在的文件消失不见, 这是 bind mount 模式和 volume 模式最大的不同点
-
使用-mount 方式创建容器: 创建 nginx 容器,并将宿主机/webapp1 目录挂载至
容器/usr/share/nginx/html 目录,注意如果 webapp1 目录不存在会启动报错[root@aliyun ~]# docker run -d -p 80:80 --name bind1 --mount type=bind,source=/data/webapp1,target=/usr/share/nginx/html/ nginx:latest
如果宿主机和容器的目录内容一致,会以宿主机目录为准
-v 创建绑定卷
使用-v 方式创建容器: 创建 nginx 容器,并将宿主机/webapp2 目录挂载至容器
/usr/share/nginx/html 目录,注意如果 webapp2 目录不存在,启动不会报错,这是-
v 和–mount 方式的区别,同样内容相同是以宿主机为准。
[root@aliyun ~]# docker run -d -p 8080:80 --name bind2 -v /data/webapp4:/usr/share/nginx/html nginx:latest
绑定卷共享和管理卷类似
3)临时卷 tmpfs
临时卷数据位于内存中,在容器和宿主机之外。
tmpfs 局限性
• 不同于卷和绑定挂载,不能在容器之间共享 tmpfs 挂载。
• 这个功能只有在 Linux 上运行 Docker 时才可用
方式一:指定–tmpfs 创建
功能:完成临时卷映射
[root@aliyun ~]# docker run -d -it --name tmpfs_test --tmpfs /app nginx
方式二: --mount 指定参数创建
功能:完成目录映射
--mount '<key>=<value>,<key>=<value>'
关键参数
○ type : 类型表示 bind, volume, or tmpfs
○ destination, dst,target:挂载在容器中的路径
○ tmpfs-size: tmpfs 挂载的大小(以字节为单位)。默认无限制。
○ tmpfs-mode: tmpfs 的八进制文件模式。例如, 700 或 0770。默认为 1777
或全局可写
[root@aliyun ~]# docker container run --name tmpfs_test -d -p 80:80 --tmpfs /usr/share/nginx/html/ nginx:latest
[root@aliyun ~]# docker exec -it tmpfs_test bash
root@acba8a252814:/# ls /usr/share/nginx/html/
root@acba8a252814:/#
进入容器可以看到 nginx 里面的文件被覆盖了,也就是说 tmpfs 也会覆盖容器里
面的文件
注意重启后mpfs 内容完全消失了,也就是说内容是存在内存里面的。
相关文章:
Docker Volume(存储卷)
文章目录 Docker Volume(存储卷)1.什么是存储卷?2.为什么需要存储卷?3. 存储卷的分类1) 管理卷Volume方式一:Volume命令操作方式二: -v 或者--mount 指定方式三: Dockerfile 匿名卷小结Docker 卷生命周期Docker 卷共享…...
【毕设选题】opencv 图像识别 指纹识别 - python
文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往…...
阿里云无影云电脑使用初体验:真的好用吗?
阿里云无影云电脑即无影云桌面,云桌面如何使用?云桌面购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户…...
无涯教程-JavaScript - FLOOR.MATH函数
描述 FLOOR.MATH函数将数字四舍五入到最接近的整数或最接近的有效倍数。 语法 FLOOR.MATH (number, significance, mode)争论 Argument描述Required/OptionalNumberThe number to be rounded down.RequiredSignificanceThe multiple to which you want to round.OptionalMo…...
Dubbo3基础使用
1、Dubbo概述 现在SpringCloud Alibaba比较火,用的比较多是吧,那dubbo是不是过时的呢? 并不是的,以前有人把Dubbo和SpringCloud进行对比,其实两者是不同维度的,不能对比,dubbo就是一个rpc框架&…...
Android 图片加载框架Glide源码详解
我们看Glide的源码从Glide类入手,使用的时候我们先调用的with方法,源码中with有3个多载的方法:下图翻译过来就是activity用FragmentActivity Applicationcontext用 with(Context)还有一个with(View)的 殊途…...
知识竞赛活动舞台搭建需要多少钱
知识竞赛活动舞台搭建的费用会根据不同的竞赛活动规模和要求而有所不同。对于小型的知识竞赛活动,如学校内部组织的知识竞赛或社区的知识竞赛活动,舞台搭建的费用往往相对较低。在这种情况下,可能只需要一些简单的装饰和道具,例如…...
07set注入级联属性和特殊字符及表达式语言
级联属性赋值(了解) 概述 级联属性赋值就是给某个对象属性的属性赋值,就是给对象关联的对象的属性赋值 Clazz班级类 public class Clazz {private String name;public Clazz() {}public Clazz(String name) {this.name name;}//set和get方法以及toString方法 }Student有cl…...
用AI在小红书做早教启蒙,2个月涨粉11.7万,获赞10万的新流量玩法
本期是赤辰第29期AI项目教程,底部准备了9月粉丝福利,可以免费领取。母婴、教育一直以来是最不缺流量的两大“真香”赛道。那么AI时代下有怎样新流量红利和玩法?接下来就给大家拆解一个在小红书上做AI绘画启蒙早教资源变现的新玩法!…...
Recommender Systems in the Era of Large Language Models (LLMs)
本文是LLM系列文章,针对《Recommender Systems in the Era of Large Language Models (LLMs)》的翻译。 大语言模型时代的推荐系统 摘要1 引言2 相关工作3 基于LLM推荐系统的深度表示学习4 预训练和微调LLM用于推荐系统5 提示LLM用于推荐系统6 未来方向6.1 幻觉缓解…...
红心向阳 百鸟朝凤
背景 最近在玩 folium 模块,基于使用过程中的一些个人体验,对 folium 进行了二次封装,开源在 GpsAndMap.在使用的过程中,发现在地图上打图标是可以进行旋转的。遇到就发现了一些有意思的玩法。 隔海的相望 下面的代码在地图 厦…...
C语言自己实现一个memcpy函数
目录 按字节拷贝实现memcpy按4字节拷贝实现memcpyTips 在 C 语言中,我们可以自己实现 memcpy 函数来实现内存数据的拷贝操作。memcpy 函数用于将指定长度的数据从源地址复制到目标地址。 按字节拷贝实现memcpy #include <stdio.h>void* my_memcpy_byte(void*…...
C#教师考勤管理系统asp.net+sqlserver
3.3.1 员工部分 1:请假管理:包括填写请假条,提交申请,查看审批,审核请假等等。 2:考勤管理:针对具体的员工考勤的统计等管理。 3:个人资料管理:进行个人信息管理…...
Nginx代理配置详解
一、什么是代理 1、正向代理(forward proxy) 正向代理,简单的说就像是一个跳板,它隐藏了真实的请求客户端(IP),服务端不知道真实的客户端是谁,客户端请求的服务都由代理服务器来代替请求。 举个例子来说…...
DAG 的深度优先搜索标记
/**\ | DAG 的深度优先搜索标记 | INIT: edge[][] 邻接矩阵 ; pre[], post[], tag 全置 0; | CALL: dfstag(i, n); pre/post: 开始 / 结束时间 \**/ int edge[V][V], pre[V], post[V], tag; void dfstag( int cur, int n) { // vertex: 0 ~ n-1 pre[cur] tag; for…...
网络存储解决方案:选择与配置
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
java中BigDecimal除法运算指定小数点保留位数和取舍规则
java中使用BigDecimal进行相除运算时,为了避免抛出ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。最好指定小数点保留位数和取舍规则。 取舍规则 ROUND_CEILING: 舍位时向正无穷方向取值。即:向上取…...
车联网远程监控管理提升车辆调度效率,实现高效运营
随着智慧城市建设与物联网技术发展,车辆使用4G工业路由器网络实现车联网,并对车上视频监控、GPS定位以及温湿度传感器等信息进行数据采集和实时传输。这些数据的采集和监测将通过4G网络上传到管理平台,为车辆调度和运行效率的优化提供了有力的…...
数据治理-数据建模和设计
定义 发现、分析和确定数据需求的过程,用一种称为数据模型的精确形式表示和传递这些数据需求。过程是循环迭代的,可能包括概念、逻辑和物理模型。 常见的6种数据模型 关系模式、多维模式、面向对象模式、事实模式、时间序列模式、NoSQL模式。根据描述详…...
博客系统(升级(Spring))(四)(完)基本功能(阅读,修改,添加,删除文章)(附带项目)
博客系统 (三) 博客系统博客主页前端后端个人博客前端后端显示个人文章删除文章 修改文章前端后端提取文章修改文章 显示正文内容前端后端文章阅读量功能 添加文章前端后端 如何使用Redis项目地点: 博客系统 博客系统是干什么的? CSDN就是一…...
常用的辅助类(必会)
1.CountDownLatch package com.kuang.add;import java.util.concurrent.CountDownLatch;//计数器 减法 public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//总数是6,必须要执行任务的时候,再使用…...
Java常用类之 String、StringBuffer、StringBuilder
Java常用类 文章目录 一、字符串相关的类1.1、String的 不可变性1.2、String不同实例化方式的对比1.3、String不同拼接操作的对比1.4、String的常用方法1.5、String类与其他结构之间的转换1.5.1、String 与基本数据类型、包装类之间的转换1.5.2、String 与char[]的转换1.5.3、…...
linux在所有文件中查找某一个字符串
linux在所有文件中查找某一个字符串 有时候我们需要在大量文件中查找某一个字符串,手工一个一个打开文件查找非常耗时,我们可以使用 find 和 xargs 两个命令来实现查找指定字符串。 命令详解 find <directory> -type f -name "*.c" |…...
WebSocket vs SSE: 实时数据推送到前端的选择与实现(详细)
Websocket和Server-Sent Events 对比推送数据给前端及各自的实现 二者对比WebSocket:Server-Sent Events (SSE):选择 WebSocket 还是 SSE: Websocket 实现使用原生 WebSocket API:使用 Netty 创建 WebSocket:总结和选择…...
Redis从入门到精通(二:数据类型)
数据存储类型介绍 Redis 数据类型(5种常用) string hash list set sorted_set/zset(应用性较低) redis 数据存储格式 redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储 数据类型指的是存储的数据…...
基于SSM的珠宝首饰交易平台
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
4款视频号数据分析平台!
很多人在做视频号的时候就会有创作参考的需求,那么你们知道视频号中有哪些数据平台?今天就和大家来分享一下 接下来就总结一下视频号数据平台有哪些?排名不分前后。 1:视频号助手(channels.weixin.qq.com)…...
【系统架构】什么是集群?为什么要使用集群架构?
什么是集群?为什么要使用集群架构? 1.什么是集群?2.为什么要使用集群?2.1 高性能2.2 价格有效性2.3 可伸缩性2.4 高可用性2.5 透明性2.6 可管理性2.7 可编程性 3.集群的常见分类3.1 负载均衡集群3.2 高可用性集群3.3 高性能计算集…...
Java手写拓扑排序和拓扑排序应用拓展案例
Java手写拓扑排序和拓扑排序应用拓展案例 1. 算法思维导图 #mermaid-svg-o8KpEXzxukfDM8c9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-o8KpEXzxukfDM8c9 .error-icon{fill:#552222;}#mermaid-svg-o8KpEXzxukfD…...
练习:使用servlet显示试卷页面
试卷页面代码 在浏览器输入如下地址: http://localhost/examPageServlet 效果如下:...
做网站详情的图片/如何在网络上推广产品
拿得起,放得下,想得开 原文-中国传统文化:跟儒家学拿得起,跟佛家学放得下,跟道家学想得开 所谓道不远人、大道至简,作为中国文化三大支柱的儒释道,其实并不高高在上,而是与我们的人生…...
电子政务建设与政府网站建设/百度seo推广怎么做
static与非static成员(函数) 《C Primer》第4版399页:对于特定类类型的全体对象而言,访问一个全局变量有时是必要的。然而,全局变量会破坏封装:对象需要支持特定类抽象的实现。如果对象是全局的,…...
淄博企业网站建设价格/怎样做一个网页
最近在给内部使用的zabbix配置告警发送,要求是使用企业微信群聊机器人发送告警信息到群里,因为企业号和公众号需要的开发信息较多,又不好找,而配置机器人发送告警只需要机器人的webhook地址即可。 步骤: 1、 在zabbi…...
网站开发设计工具/网站关键词排名分析
对于该教程而言,缺少了删除已存在的电影记录的功能。因此,我在这里给出删除功能的代码供大家参考学习。 另外,需要注意的是要为VS2008打上SP1服务包,不然就不能使用ADO.NET Entity Data Model功能了。附按本教程制作的MovieDataba…...
网站建设与管理可以专升本吗/chrome网页版入口
谈谈SQL Server高可用的常见问题每次谈到SQL Server的高可用,很多的DBA,特别是SQL Server DBA心里一痛:因为大家都认为SQL Server无法或者很难实现SQL Server。也有很多的DBA朋友脑袋一拍,给出答案“高可用不就是微软的那几个技术…...
建委网站所说建设单位/哪家竞价托管专业
class_eval和module_eval方法一样, 都是为一个class增加method的。 可以接string和block为参数。 此方法是Ruby的动态特性之一。 class Thingenda %q{def hello() "Hello there!" end}Thing.module_eval(a)puts Thing.new.hello()=> Hell…...