8、Docker数据卷与数据卷容器

一、数据卷(Data Volumes)

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS(联合文件系统), 可以提供很多有用的特性
  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除
volume的容量取决于docker host文件系统当前未使用的空间, 目前无法设置volume的容量。
有关数据挂载的指令:

二、Docker数据持久化的三种方式

Docker提供了三种不同的方式将数据从宿主机挂载到容器中:volumebind mountstmpfs mounts

  • volume:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
  • bind mounts:可以存储在宿主机系统的任意位置
  • tmpfs mounts:挂载存储在宿主机的内存中,不会写入宿主机的文件系统

2.1、volume(普通数据卷)

Docker管理宿主机 文件系统的一部分(/var/lib/docker/volumes)
# 创建volume数据卷,注意:创建数据卷后,会在本机的/var/lib/docker/volumes目录下创建相应的文件夹
docker volume create for_nginx
# 查看创建的volume
docker volume ls
# 运行容器并挂载(nginx为例)
docker run --name nginx -d -p 8070:80 --mount type=volume,source=for_nginx,target=/usr/share/nginx/html nginx
注意:运行完容器后,会在本机相应的目录中会将容器内相关目录中的文件挂载出来。如下图,宿主机上出现了两个html文件,是创建nginx容器时生成的文件
# 进入容器内部
docker exec -it 84608669dfc0 /bin/bash
# cd到具体目录
cd /usr/share/nginx/html/
# 创建一个test.html文件
echo "container write info" > test.html

2.2、bind mounts(绑定数据卷,挂载主机目录

可以存储在宿主机 系统的任意位置。
bind mount 默认权限是读写 rw ,可以在挂载时指定只读 ro
bind mount是将host上已存在的目录或文件mount到容器。
#  在宿主机上创建相应目录
mkdir -p /home/docker/volumes/nginx
#  运行容器并挂载
# 运行容器并设置挂载(正常方式) 
docker run --name nginx1 -d -p 8090:80 --mount type=bind,source=/home/docker/volumes/nginx,target=/usr/share/nginx/html nginx
# 运行容器并设置挂载(-v方式)简写
docker run --name mynginx1 -d -p 8090:80 -v /home/docker/volumes/nginx:/usr/share/nginx/html:rw nginx
  • -v <host path>:<container path>   若container path已经存在,原有的数据会被隐藏,取而代之的是host path中的数据
进入到相应目录后会发现,没有任何文件。
注意如果你使用bind mounts挂载宿主机目录到一个容器中的非空目录,那么此容器中非空目录中的文件会被清空,容器中访问的这个目录直接就是宿主机上的相应挂载目录。

2.3、tmpfs mounts(临时数据卷)

挂载存储在宿主机的内存中, 不会写入宿主机的文件系统.
注意:删除容器重新创建容器后发现数据丢失,临时卷无法持久化数据
# 挂载方式运行容器
docker run --name nginx -d -p 8070:80 --mount type=tmpfs,target=/usr/share/nginx/html nginx
# 进入容器
docker exec -it 969cb895b621 /bin/bash
# cd到具体目录
cd /usr/share/nginx/html/
# 创建test.html文件
echo "container write info" > test.html

2.4、数据卷容器

专门用来管理数据卷的容器,该容器主要供其他容器引用和使用。
# 创建数据卷容器
docker run -itd -v /usr/share/nginx/html/:/usr/share/nginx/html/ --name mydata ubuntu
# 容器引用创建的数据卷容器mydata
docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx
docker run -itd --volumes-from mydata -p 81:80 --name nginx2 nginx
nginx1与nginx2都挂载了同一个数据卷到/usr/share/nginx/html/目录下,三个容器,任意一个修改该目录下的文件,其他两个都能看到变化
数据卷其他操作
1、Dockerfile里设置数据卷:
VOLUME /usr/share/nginx/html/
2、查看所有数据卷
docker volume ls
3、查看数据卷详情
docker volume inspect volume_id
4、删除数据卷(需先将相关容器停止移除,才能删除卷
docker volume rm 数据卷名称

三、总结

volumes:
  • 需要创建docker volume,docker volume的 存储是在docker安装目录内, 卸载docker会丢失
  • 创建容器时 会将容器内文件映射到docker volume的相应目录上 ,并且不管宿主机还是容器内操作挂载目录中的文件都是互通的。
  • 多个运行容器间共享数据,备份、恢复、或将数据从一个Docker主机迁移到另一个Docker主机时。
bind mount:
  • 需要手动在宿主机上创建挂载的目录(或者利用现有的), 数据直接存在了宿主机硬盘上 ,删除容器或者卸载docker,数据并不会消失。
  • 创建容器时 ,会将宿主机上目录上的文件覆盖容器内的相应目录 ,所以此方法挂载需要预先将容器内相应被挂载目录的文件复制出来.
  • 主机与容器共享配置文件(Docker默认情况下通过这种方式为容器提供DNS解析,通过将/etc/resolv.conf挂载到容器中)
  • 命令有简写的 -v 方式.
tmpfs mount:
  • 既不想将数据存于主机,又不想存于容器中时(这可以是出于安全的考虑,或当应用需要写大量非持久性的状态数据时为了保护容器的性能)。

四、特殊文件名(1199:683b)挂载导致的docker启动容器失败

挂载的文件名1199:683b比较特殊,-v以:分隔,会把:后的当成mode,举例如下:

docker run -it --rm -v /home/abc:dd:/home/abc ubuntu:18.04 /bin/bash

使用bind mounts的正常方式指令:

docker run -it --rm --mount type=bind,source=/home/abc:dd,target=/home/aa.py ubuntu:18.04 /bin/bash

之前的:

修改后的:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/127294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{}才起作用,如果在series里写的不起作用就写到全局里

echarts的bug&#xff0c;在series里写tooltip&#xff0c;不起作用&#xff0c;要在全局先写tooltip&#xff1a;{show:true}才起作用&#xff0c;如果在series里写的不起作用就写到全局里 series里写tooltip不起作用&#xff0c;鼠标悬浮在echarts图表上时不显示提示 你需要…

三维模型3DTile格式轻量化的纹理压缩和质量关系分析

三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中&#xff0c;纹理压缩是一个重要环节。但是&#xff0c;纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析&#xff1a; 1、压缩率与纹理质量&…

AVL树【C++】

文章目录 AVL树结点的定义Insert左单旋右单旋右左双旋左右双旋 AVL树的验证AVL树的性能完整代码 AVL树结点的定义 AVL树中的结点定义为三叉链结构&#xff0c;并在每个结点当中引入平衡因子&#xff08;右子树高度-左子树高度&#xff09; template<class K ,class V> …

openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制

文章目录 openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制92.1 不支持的特性92.2 MOT限制92.3 不支持的DDL操作92.4 不支持的数据类型92.5 不支持的索引DDL和索引92.6 不支持的DML92.7 不支持的JIT功能&#xff08;…

51单片机+EC11编码器实现可调参菜单+OLED屏幕显示

51单片机+EC11编码器实现可调参菜单+OLED屏幕显示 📍相关篇《stc单片机使用外部中断+EC11编码器实现计数功能》 🎈《STC单片机+EC11编码器实现调节PWM输出占空比》 🌼实际操作效果 🍁整个项目实现框架: 📓EC11接线原理图: 📓项目工程简介 📝仅凭借一个EC11编…

【UE】在游戏运行时,通过选择uasset来生成静态网格体

目录 主要流程 步骤 一、创建用于包含静态网格体的Actor蓝图 二、按钮点击事件 效果 主要流程 用户点击按钮后产生一个文件对话框&#xff0c;用户通过文件对话框选择指定的文件夹&#xff0c;我们获取到这个文件夹路径后处理成“按路径获取资产”节点所需的输入&#x…

【C++设计模式之组合模式:结构型】分析及示例

简介 组合模式是一种结构型设计模式&#xff0c;它能够将对象组合成树形结构以表示“整体-部分”的层次结构&#xff0c;并且能够使用相同的方式处理单个对象和组合对象。组合模式使得客户端可以一致地处理单个对象和组合对象&#xff0c;无需关心具体的对象类型。 组合模式将对…

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测 目录 回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测预测效果基本介绍模型描述程序设计预测效果 <

12.1 使用键盘鼠标监控钩子

本节将介绍如何使用Windows API中的SetWindowsHookEx和RegisterHotKey函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子&#xff0c;通过对特定热键挂钩实现监控的效果&#xff0c;两者的区别在于SetWindowsHookEx函数可以对所有线程进行监控&#xff0c;包括其他进程中…

手机投屏电脑软件AirServer5.6.3.0最新免费版本下载

随着智能手机的普及&#xff0c;越来越多的人喜欢用手机观看视频、玩游戏、办公等。但是&#xff0c;有时候手机屏幕太小&#xff0c;不够清晰&#xff0c;也不方便操作。这时候&#xff0c;如果能把手机屏幕投射到电脑上&#xff0c;就可以享受更大的视野&#xff0c;更流畅的…

SpringMVC的视图

文章目录 1. ThymeleafView2. 转发视图3. 重定向视图4. 视图控制器view-controller5. 总结6. 荐书 SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户SpringMVC视图的种类很多&#xff0c;默认有转发视图和重定向视图 当工…

【Node.js】NPM 和 package.json

NPM npm 是 Node.js 的包管理工具&#xff0c;基于命令行&#xff0c;用于安装、升级、移除、管理依赖项。 常用命令&#xff1a; npm init&#xff1a;初始化一个新的 npm 项目&#xff0c;创建 package.json 文件。&#xff08;括号里为默认值&#xff09; description&am…