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

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

之前的:

修改后的:

相关文章:

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

一、数据卷(Data Volumes) 为了很好的实现数据保存和数据共享&#xff0c;Docker提出了Volume这个概念&#xff0c;简单的说就是绕过默认的联合文件系统&#xff0c;而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。 数据卷 是一个可供一个或多个容器使用的特殊目…...

大数据与Hadoop入门理论

一、大数据的3种数据类型 1、结构化数据 可定义&#xff0c;有类型、格式、结构的强制约束 如&#xff1a;RDBMS&#xff08;关系型数据库管理系统&#xff09; 2、非结构化数据 没有规律没有数据约束可言&#xff0c;很复杂难以解析 如&#xff1a;文本文件&#xff0c;视…...

持续集成部署-k8s-深入了解 Pod:探针

持续集成部署-k8s-深入了解 Pod:探针 1. 探针分类2. 探针探测方式3. 探针参数配置4. 启动探针的应用5. Liveness 探针的应用6. Readiness 探针的应用1. 探针分类 Kubernetes 中的探针是指容器内的进程用于告知 Kubernetes 组件其自身状态的机制; Readiness Probe:就绪探针用…...

来单提醒/客户催单 ----苍穹外卖day9

来单提醒 需求分析 代码开发 注意:前端请求的并不是8080端口;而是先请求Nginx,Nginx进行反向代理以后转发到8080端口 这段代码首先创建了一个orders类用于更新订单状态 并且在更新状态后使用websocket发送给后端提醒 将信息放在map后,使用json的string化方式传给一个接收对象,…...

【单片机】18-红外线遥控

一、红外遥控背景知识 1.人机界面 &#xff08;1&#xff09;当面操作&#xff1a;按键&#xff0c;旋转/触摸按键&#xff0c;触摸屏 &#xff08;2&#xff09;遥控操作&#xff1a;红外遥控&#xff0c;433M/2.4G无线通信【穿墙能力强】&#xff0c;蓝牙-WIFI-Zigbee-LoRa等…...

【Node.js】module 模块化

认识 node.js Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;可以用来编写服务器后端的应用程序。基于Chrome V8 引擎封装&#xff0c;但是没有 DOM 和 BOM。Node.js 没有图形化界面。node -v 检查是否安装成功。node index.js 执行该文…...

Vue中如何进行分布式日志收集与日志分析(如ELK Stack)

在Vue中实现分布式日志收集与日志分析&#xff08;使用ELK Stack&#xff09; 日志收集和分析在现代应用程序中是至关重要的&#xff0c;它们可以帮助开发人员监视和诊断应用程序的行为&#xff0c;从而提高应用程序的稳定性和性能。ELK Stack&#xff08;Elasticsearch、Logs…...

java学习--day23(线程池)

1.线程池Pool 线程池一个容纳了多个线程的容器&#xff0c;其中的线程可以反复的使用。省去了频繁创建线程的对象的操作&#xff0c;无需反复创建线程而消耗更多的资源 在 Java 语言中&#xff0c;并发编程都是通过创建线程池来实现的&#xff0c;而线程池的创建方式也有很多种…...

Unity Golang教程-Shader编写一个流动的云效果

创建目录 一个友好的项目&#xff0c;项目目录结构是很重要的。我们先导入一个登录界面模型资源。 我们先创建Art表示是美术类的资源&#xff0c;资源是模型创建Model文件夹&#xff0c;由于是在登录界面所以创建Login文件夹&#xff0c;下面依次是模型对应的资源&#xff0c…...

Python数据攻略-Pandas与地理空间数据分析

地理空间数据分析已经成为数据分析不可或缺的一部分。无论是在城市规划、交通分析,还是在环境科学中,地理空间数据都发挥着关键作用。 本文将为初学者和新手提供一个详细的指南,通过使用Python的Pandas库和Geopandas库,来进行地理空间数据分析。 文章目录 用Pandas处理地理…...

sourceTree无法启动

前几天win10系统自动更新后&#xff0c;sourceTree就无法打开了&#xff0c;双击只是图标闪一下&#xff0c;电脑重启后还是无法打开。找到了网上几种方法进行尝试&#xff1a; 方法一&#xff1a;修改配置信息 在自己的电脑路径下&#xff1a; C:\Users\你的用户名\AppData…...

【ARM Coresight 系列文章19 -- Performance Monitoring Unit(性能监测单元)

文章目录 1.1 PMU 介绍1.2 PMU 寄存器1.2.1 PMU 管理寄存器1.2.2 PMU 外设识别寄存器1.2.3 PMU 组件识别寄存器1.3 性能监控事件1.3.1 Cortex-A9 特定事件1.1 PMU 介绍 许多体系结构都包含 PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件…...

前端学习| 第二章

CSS学习|第一章 前言一、概述1. 语法规定2. 代码风格 二、选择器1. 基础选择器标签选择器类选择器id选择器通配符选择器 2. 复合选择器后代选择器子元素选择器并集选择器伪类选择器链接伪类选择器focus 伪类选择器 三、引入方式四、显示模式1. 块元素2. 行内元素3. 行内块元素4…...

Unity中Shader光强与环境色

文章目录 前言一、实现下图中的小球接受环境光照实现思路&#xff1a;1、在Pass中使用前向渲染模式2、使用系统变量 _LightColor0 获取场景中的主平行灯 二、返回环境中主环境光的rgb固定a(亮度)&#xff0c;小球亮度还随之改变的原因三、获取Unity中的环境光的颜色1、Color模式…...

Android9 查看连接多个蓝牙耳机查看使用中的蓝牙耳机

#Android9 查看连接多个蓝牙耳机查看使用中的蓝牙耳机 文章目录 一、主要api&#xff1a;二、BluetoothA2dp 对象的获取三、获取 BluetoothDevice 对象&#xff0c;四、其他&#xff1a; Android 9.0之后&#xff0c;支持一台手机可以同时连接多个蓝牙设备。 但是判断那个蓝牙…...

【EF Core】如何忽略影响导航属性(级联)

文章目录 EF更新和插入时如何忽略更新导航属性级联删除删除主体/父实体断开关系配置级联行为 来源 EF更新和插入时如何忽略更新导航属性 使用Ignore方法&#xff1a; modelBuilder.Entity<Blog>().Ignore(b > b.Posts);使用HasNoKey方法&#xff1a; modelBuilder.…...

【苍穹外卖 | 项目日记】第一天

前言&#xff1a; 我打算用16天的时间写完黑马程序员的苍穹外卖项目&#xff0c;为了督促自己每天坚持写以及记录项目知识点&#xff0c;所以用这种项目日记的方式鞭策自己 目录 前言&#xff1a; 今日完结任务&#xff1a; 今日收获&#xff1a; 1.阅读代码框架&#xf…...

WuThreat身份安全云-TVD每日漏洞情报-2023-10-07

漏洞名称:迪普科技DPtech SSL VPN任意文件读取漏洞 漏洞级别:高危 漏洞编号:CNVD-2023-69478 相关涉及:杭州迪普科技股份有限公司 DPtech SSL VPN 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-24924 漏洞名称:DTS监控SSL证书操作系统命令注…...

SpringBoot整合Druid配置yml文件

springboot中引入依赖注意&#xff0c;否则yml中配置不生效 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><group…...

如何保证 RabbitMQ 的消息可靠性?

项目开发中经常会使用消息队列来完成异步处理、应用解耦、流量控制等功能。虽然消息队列的出现解决了一些场景下的问题&#xff0c;但是同时也引出了一些问题&#xff0c;其中使用消息队列时如何保证消息的可靠性就是一个常见的问题。如果在项目中遇到需要保证消息一定被消费的…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...