Volume

docker常用命令volume篇 1、docker volume方式 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中: (1)volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(最常用的方式)   由上图可以知道,目前所有Container的数据都保存在了这个目录下边,由于没有在创建时指定卷,所以Docker 阅读详情

目录

基本概念

一、Volume 的核心原理

二、核心特性与分类

▶ 基础存储类型

▶ 高级存储方案

三、持久化存储架构(PV/PVC/StorageClass)

1. 核心组件关系

2. 关键机制详解

四、Volume 的核心价值

五、高级功能演进

总结

emptyDir&hostPath&NFS存储卷部署

‌1. emptyDir:Pod 内容器共享临时数据‌

‌部署示例‌

‌逐行解析‌

‌2. hostPath:节点本地目录挂载‌

‌部署示例‌

‌逐行解析‌

‌3. NFS:跨节点共享存储‌

‌部署示例‌

‌逐行解析‌

‌三种卷的核心对比‌

‌总结‌


基本概念

一、Volume 的核心原理

  1. ‌存储抽象层‌
    Kubernetes 将物理存储资源(本地磁盘、云存储、NFS等)抽象为 ‌Volume 对象‌,解耦 Pod 与底层存储基础设施‌1。

    • 工作原理:
      • 管理员预先创建存储资源(如 AWS EBS 卷)
      • Volume 声明将此资源映射到 Pod 的挂载路径(如 /data)
      • Kubelet 在调度节点完成存储的实际挂载操作
  2. ‌生命周期绑定‌
    Volume 与 Pod 生命周期紧密关联但可独立控制:

    volumes:
     - name: data-vol
       persistentVolumeClaim: # 使用 PVC 时生命周期独立于 Pod
         claimName: my-pvc 
    • ‌临时卷‌(如 emptyDir):随 Pod 销毁而删除
    • ‌持久卷‌(如 awsElasticBlockStore):持久化存储数据

二、核心特性与分类

▶ 基础存储类型
‌类型‌‌典型场景‌‌特性‌
emptyDir容器间共享临时文件生命周期=Pod,节点存储介质
hostPath访问节点系统文件(日志/配置)绑定点节点目录,存在安全风险
nfs跨节点共享文件网络存储,需预先部署 NFS 服务
▶ 高级存储方案
  1. ‌Projected Volume‌
    将多个配置源(ConfigMap/Secret/ServiceAccount)合并挂载到同一目录‌:

    volumes:
     - name: config-volume
       projected:
         sources:
         - configMap: {name: app-config}
         - secret: {name: db-credentials} 
  2. ‌CSI(Container Storage Interface)‌
    标准化存储插件接口,支持云厂商(AWS EBS, GCP PD)和分布式存储(Ceph, GlusterFS)‌:

    volumes:
     - name: csi-vol
       csi:
         driver: ebs.csi.aws.com
         volumeHandle: vol-0eab12345 # 关联云存储资源 

三、持久化存储架构(PV/PVC/StorageClass)

1. 核心组件关系
graph LR 
Admin[管理员] -->|创建| PV[PersistentVolume] 
Admin -->|定义| SC[StorageClass] 
User[应用开发者] -->|申请| PVC[PersistentVolumeClaim] 
PVC -->|绑定| PV 
PVC -->|动态供给| SC 
2. 关键机制详解
  • ‌PersistentVolume (PV)‌
    集群级别的存储资源池(如 100GB 磁盘),由管理员维护‌
  • ‌PersistentVolumeClaim (PVC)‌
    用户发起的存储资源申请(如 storage: 10Gi),K8s 自动匹配 PV
  • ‌StorageClass‌
    实现动态存储供给,按需自动创建 PV(如 AWS EBS 卷)

四、Volume 的核心价值

  1. ‌状态持久化‌
    解决容器重启导致数据丢失问题(数据库/日志存储)‌

  2. ‌配置与秘密管理‌
    通过 Projected Volume 安全注入 ConfigMap 和 Secret

  3. ‌跨容器数据共享‌
    多个容器可通过同一 Volume 交换数据(如日志收集 sidecar)

  4. ‌存储资源标准化‌
    PV/PVC 机制实现存储资源的自助申请与自动化供给


五、高级功能演进

  1. ‌存储快照(VolumeSnapshot)‌
    基于 CSI 接口实现数据备份与恢复‌:

    dataSource:
     kind: VolumeSnapshot
     name: db-backup-snapshot # 从快照恢复数据 
  2. ‌本地存储优化‌
    local 卷类型减少网络延迟(需结合节点亲和性调度)


总结

Kubernetes Volume 的本质是‌容器存储抽象层‌:

  • ‌基础能力‌:为 Pod 提供灵活的数据存储接口
  • ‌扩展价值‌:
    • 通过 PV/PVC 实现存储资源工业化管理
    • 借助 CSI 构建云原生存储生态
    • 依托 Projected Volume 统一配置模型‌
      其设计彻底解决了有状态服务在容器化环境中的存储挑战,是 K8s 支撑生产级应用的核心基石。

emptyDir&hostPath&NFS存储卷部署

‌1. emptyDir:Pod 内容器共享临时数据‌

‌部署示例‌
apiVersion: v1 
kind: Pod 
metadata:
 name: shared-temp-data 
spec:
 containers:
   - name: app-container
     image: nginx
     volumeMounts:
       - name: temp-vol
         mountPath: /cache # 容器内挂载路径
   - name: log-processor
     image: busybox
     volumeMounts:
       - name: temp-vol
         mountPath: /tmp/logs
 volumes:
   - name: temp-vol
     emptyDir: {} # 声明临时存储卷 
‌逐行解析‌
  • ‌volumeMounts.mountPath‌:指定容器内挂载目录,同一 Pod 内不同容器可共享该卷。
  • ‌emptyDir: {}‌:创建临时空目录,生命周期与 Pod 绑定(Pod 删除后数据销毁)。
  • ‌用途‌:适合日志收集、临时缓存等场景。

‌2. hostPath:节点本地目录挂载‌

‌部署示例‌
apiVersion: v1 
kind: Pod 
metadata:
 name: node-storage
spec:
 nodeName: worker-1 # 指定节点(避免漂移导致数据不一致)
 containers:
   - name: app
     image: nginx
     volumeMounts:
       - name: host-vol
         mountPath: /host-data
         readOnly: true # 安全建议:设为只读
 volumes:
   - name: host-vol
     hostPath:
       path: /mnt/node-data # 节点本地路径
       type: DirectoryOrCreate # 目录不存在则创建 
‌逐行解析‌
  • ‌nodeName‌:强制 Pod 调度到特定节点,避免 hostPath 因节点切换失效。
  • ‌readOnly: true‌:降低安全风险(防止容器篡改节点文件)。
  • ‌type: DirectoryOrCreate‌:确保目录存在,避免挂载失败。
  • ‌用途‌:访问节点日志、CA 证书等系统文件。

‌3. NFS:跨节点共享存储‌

‌部署示例‌
apiVersion: v1 
kind: Pod 
metadata:
 name: nfs-app
spec:
 containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - name: nfs-vol
         mountPath: /usr/share/nginx/html
 volumes:
   - name: nfs-vol
     nfs:
       server: 192.168.1.100 # NFS 服务器地址
       path: /exports/data # NFS 共享路径
       readOnly: false # 允许写入 
‌逐行解析‌
  • ‌server‌:NFS 服务端 IP 或主机名,需预先部署。
  • ‌path‌:NFS 服务器暴露的共享目录路径。
  • ‌readOnly: false‌:允许容器写入数据(按需配置)。
  • ‌用途‌:跨 Pod 共享静态文件、媒体资源等持久化数据。

‌三种卷的核心对比‌

‌特性‌emptyDirhostPathNFS
‌生命周期‌随 Pod 销毁持久化(依赖节点状态)持久化(独立于 Pod/节点)
‌数据共享范围‌同一 Pod 内容器同一节点上的 Pod跨节点所有 Pod
‌典型场景‌临时缓存、中间计算结果节点监控、日志采集分布式应用共享存储

‌总结‌

  • ‌emptyDir‌:轻量级临时存储,适合 Pod 内协作。
  • ‌hostPath‌:谨慎使用,需绑定节点并限制权限。
  • ‌NFS‌:实现持久化跨节点共享,但需维护外部存储服务。
一文说清楚Dockerfile 中VOLUME到底有什么用? 写在开头 相信大部分人对docker run -v这个参数都比较熟悉,无非就是把宿主机目录和容器目录做映射,以便于容器中的某些文件可以直接保存在宿主机上,实现容器被删除之后数据还在,比如我们把mysql装在容器中,肯定不能说容器被删mysql所有的数据也都不在了。第二个作用是也可以用来实现多容器共享同一份文件。 但如果玩过dockerfile的话就知道dockerfile还有个VOLUME指令,如 FROM centos:latest RUN groupadd -r redis && use 阅读详情

相关推荐

了解 Dockerfile VOLUME 指令

DockerfileVOLUME指令在指定的容器路径上创建一个卷挂载点。每次容器启动时,都会从 Docker 主机的文件系统挂载一个卷。以下示例中的 Dockerfile 在/opt/app/data容器路径中定义了一个卷。新容器会自动将卷挂载到目录。您可以在一条指令中将多个卷定义为以空格分隔的字符串或 JSON 数组。

学海无涯苦作舟的博客 2530

docker容器 - 卷(volume)- 挂载

在容器化应用程序开发和部署过程中,卷(Volume)是一个非常常见的概念,它可以将主机文件系统或其他容器的文件系统挂载到容器内部的特定路径上,从而为容器提供额外的持久化存储。持久化存储:容器中的文件系统是短暂且易变的,当容器被删除后,容器内数据也会随之消失。而通过使用卷,可以将需要持久化的数据存储在卷中,从而保证数据的持久化。数据共享:容器化应用程序通常由多个容器组成,这些容器需要分享数据或配置信息。通过使用卷,不同的容器之间可以共享相同的卷,从而实现数据共享。数据备份。

lpfstudy的博客 4876

Dockerfile 指令 VOLUME 介绍

通过docker run命令的-v标识创建的挂载点只能对创建的容器有效。 通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。 还有一个区别是,通过VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。 #test FROM ubuntu MAINTAINER hello1 VOLUME ["/data1","/data2"] 上面的dockfile文件通过VOLUME指令指定了两个挂载点 /data1 和 /data.

JineD的博客 7853

docker 的数据卷挂载volume(持久化)及其意义(三种方式--volume,自定义volume,volume继承)

docker 的数据卷挂载volume(持久化)及其意义(三种方式--volume,自定义volume,volume继承) docker中有许多新的概念,其实也就因为这些新的概念使得学习docker有很多难度,比如说,docker的三要素 仓库,镜像,容器中的仓库是老概念,比较好理解,而镜像和容器对新手来说就很难理解了。 在镜像启动为容器这个阶段,docker需要定义镜像如何使用(比如,必须的环境变量,配置文件的剥离,共享,以方便的定义如何启动镜像)和定义启动为容器后的网络通信形式(比如,是bridge

zsk_john的技术分享专用博客 4499

音量调整Volume Ace V2.6.4-汉化版

音量调整Volume Ace V2.6.4-汉化版

Docker volume 挂载卷的实现方法

主要介绍了Docker volume 挂载卷的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

volume是啥东西?volume挂载和本地目录或者文件直接挂载的区别

具体来说,本地目录或文件挂载是指将一个本地文件系统中的目录或文件挂载到另一个位置,以便可以将其视为一个独立的文件系统来访问其中的内容。"volume挂载"通常指的是将一个存储设备(如硬盘分区、网络共享等)挂载到文件系统中的特定目录上,使得该设备中的文件和目录在该目录下可见并可访问。这种挂载操作通常由操作系统自动完成,用户可以将挂载点视为一个虚拟目录。与本地目录或文件直接挂载的区别主要在于volume挂载涉及到的是存储设备或数据卷的挂载,而本地目录或文件挂载则是在本地文件系统中的操作。

weixin_48501662的博客 807

PaddleOCR GPU部署:从环境配置到避坑实战指南

本文详细介绍了PaddleOCR GPU部署的全过程,从环境配置到避坑实战指南。通过分析常见的部署失败原因,提供硬件兼容性自查、软件环境精配方案以及路径配置的解决方案,帮助用户高效完成GPU加速的OCR任务部署,避免90%的常见错误。

weixin_30839881的博客 418

Docker数据卷(Volume)与宿主机目录挂载(Bind Mount)深度对比

在 Docker 容器化部署中,数据持久化是核心需求之一。Docker 提供了两种主要的数据挂载方式:数据卷(Volume)和宿主机目录挂载(Bind Mount)。

积跬步,至千里。 2611

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译 什么是Firmament? Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, MBD) 的开源自驾仪,可被用来快速构建无人机,无人车,无人船,机器人等平台的控制系统。 系统主要由两部分构成. FMT-Firmware: 一个基于C/C++开发的稳定、高性能的嵌入式系统. FMT-Model: 一个基于MATLAB/Simulink开发的仿真框架以及算法库. 昨天得知FMT开源飞控项目已经开

weixin_45786595的博客 2872

RK3568平台 麦克风PDM接口录音_rk pdm配置

在RK平台,Android的Audio HAL层中一般会都会有导出录音播放数据的功能。如播放的,是会直接送到声卡中的,对于播放出现问题的情况,可以从分析导出的音频数据是否正常,可以基本知道,是在应用、解码出现的问题,还是送到声卡过程中出现问题。当点开app进行录音的时候会调用到static int start_input_stream(struct stream_in *in)。音频在PDM接口输入,不经过编解码芯片直接到RK主芯片,RK主芯片自带PCM编解码功能。以下软件能播放保存下来的pdm文件。

2401_83817122的博客 2343

Docker学习之volume

提供独立于容器之外的持久化存储 容器中的数据会随着容器的消失而消失,为了解决这个问题,产生了数据卷volume。 例子,比如说mysql容器,msyql中的数据应该是持久化的,故应该存储在volume中。volume还提供容器之间的共享存储 volume操作 容器和宿主机目录挂载的三种方式: 1.第一种方式: # 运行容器内部地址nginx用来访问网页的地址/usr/share/nginx/h...

weixin_30929295的博客 196

AUTOSAR实战:手把手教你配置EthTsync模块,搞定车载以太网时间同步

本文详细解析AUTOSAR架构中EthTsync模块的配置方法,实现车载以太网时间同步。通过对比gPTP与PTP协议差异,提供从开发环境准备到参数配置、模块集成的全流程指南,并分享性能优化与调试技巧,帮助开发者实现微秒级同步精度,满足自动驾驶等高精度时间同步需求。

weixin_28736335的博客 374

Docker - Docker Volume及Volume命令详解

Docker学习(四)- Docker Volume及Volume命令详解 什么是数据卷(Volume) Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。 所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会被丢失掉

kaven 2万+

超越防抖:索尼CXD5254GG芯片如何重新定义电子影像稳定

索尼CXD5254GG芯片通过融合6轴IMU与图像传感器数据,重新定义了电子影像稳定技术。其核心突破在于实时地平线校正、抑制果冻效应和镜头畸变校正,并搭载智能画质控制器提升画面细节。该芯片适用于广播制作、体育娱乐、安防监控和机器人视觉导航等专业领域,提供开箱即用的优化参数配置,大幅缩短开发周期。CXD5254GG不仅实现稳定成像,更通过姿态感知与智能优化,为专业影像应用提供了完整的稳定解决方案。

致力于lidar应用开发 113

108、AWB 时间滤波器:帧间白平衡平滑,防止色彩跳变与过冲

摘要: 文章探讨了AWB(自动白平衡)时间滤波器的设计与优化,以解决帧间白平衡跳变和过冲问题。通过自适应状态机(STABLE/TRANSITION/JUMP)动态调整平滑系数alpha,结合帧率归一化和过冲保护(方向检测+限幅),实现场景切换快速响应与静态稳定性的平衡。作者分享了工程经验:避免固定阈值、联动AE/AF、真实场景验证,并推荐简化卡尔曼滤波替代IIR。最终方案在旗舰机前置摄像头中成功消除“闪白”现象,强调参数需动态适应光照与色温变化。

sundong_81的博客 63

docker volume用法

volume在docker中的意思表示将宿主机上的目录挂在到docker容器中,这样可以保持数据持久化,当将容器删除时,数据不会丢失 1、手动创建一个volume可以使用命令:docker volume create wincom-node,如下图所示: 2、查看volume信息使用命令:docker inspect wincom-node,如下图所示: 其中Mountpoint表示...

sxj的专栏 2万+

WordPress插件depicter存在SQL注入漏洞(CVE-2025-2011)

Depicter 是一款功能强大的 WordPress 幻灯片插件,允许用户通过直观的拖放编辑器轻松创建响应式滑块、轮播和动态内容展示。该插件提供丰富的模板库、动画效果和图层控制,支持多媒体内容嵌入(如图片、视频、HTML),并优化了移动端显示和SEO性能。其无代码操作界面适合非技术用户,同时提供高级自定义选项,适用于产品展示、营销推广和视觉叙事等多种场景,是提升网站视觉吸引力的高效工具。

m0_50125527的博客 550

docker-volume

volume的主要作用是数据持久化及数据共享。当删除容器的时候,容器内产生的数据也会删除,但是生产的数据可能不想被删除,比如数据库容器产生的数据,这时可以通过volume实现将数据保存在本地机器而不保存在容器里。

技术引领业务创新 1285

Fiori Elements 的 Adapting the UI: Analytical List Page 全解析与实战

摘要:本文详细介绍了如何通过SAP Fiori elements的UI Adaptation功能对Analytical List Page(ALP)进行细粒度适配。重点讲解了页头过滤区、图表区域、表格区域等关键组件的可配置属性,包括过滤区折叠/固定、图表类型限制、表格滚动阈值等实用功能。文章强调这些适配均可通过可视化工具完成,无需修改业务代码,并提供了典型场景的实践清单。适用于SAP Fiori elements for OData V2项目,建议配合SAP Fiori tools的Adaptation E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 434

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Docker存储卷(Volume)

简介 想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上镜像栈顶部添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。...

real向往的博客 3307

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

docker的volume

volume 看了很多介绍,也没说清楚volume和container之间的关系、创建的时候应该怎么创建。这里把弄清楚的内容说明一下。 volume的作用:将container内的目录映射到宿主机host的实际路径,这样container上修改内容直接能保存到宿主机上。同样宿主机上对该目录的修改,也能在container看到。 volume和container的关系: 创建volume之后多个co...

misisippi68的博客 691

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Docker容器学习六之Volume

一、Volume 当我们在编写Dockerfile文件时,会有这么个语句VOLUME这个语句的意思就是在容器和宿主机中建立一个共享目录,也就是容器可以把数据保存到这个目录下。这也是docker中容器数据持久化保存的一种方式。 那么如何去使用这个Volume呢?我们先来做个小实验,这个实验是这样的,我们创建一个带有jdk的镜像,并与主机共享一个目录"/usr/mydata",然后把打包好的一个应用放在这个目录下,之后启动容器,并在这个目录下去运行应用,此时我们从容器中取创建一个文件,再回到宿主机中取查看当前文

solayang的博客 4822

docker多种创建volume操作详解

volume用于将容器内的数据在本地进行持久化,这一节我们以redis为例用实际操作来看看几种创建volume的方式。 文章目录操作环境原始镜像声明volume创建volume指定容器目录不指定宿主机目录指定容器目录指定宿主机目录总结 操作环境 Centos 7.9.2009 Docker version 20.10.2, build 2291f61 原始镜像 直接下载最新的redis镜像 docker pull redis [root@testmachine fuhanxiao]# docker i

T型人小付的博客 9247

docker——volume

Docker的数据持久化主要有两种方式: bind mount volume Docker的数据持久化即使数据不随着container的结束而结束,数据存在于host机器上——要么存在于host的某个指定目录中(使用bind mount),要么使用docker自己管理的volume(/var/lib/docker/volumes下)。 bind mount bind mount自docke...

weixin_38278993的博客 220

dockerfile指令VOLUME

dockerfile指令VOLUME VOLUME ​ 定义***匿名***数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。 作用 避免重要的数据,因容器重启而丢失。 避免容器不断变大。 在开发时,便于开发和调试 格式 # 第一种 VOLUME ["/data", "/data/home"...] # 第二种 VOLUME /data /data/home # 第三种 json VOLUME ["/data/log/"] #### VOLUME注意事项官网说明!!! 基于 Windows 的

CJH315的博客 2269
上一篇: K8s——配置管理(2)
下一篇: zabbix
霖檬ing
博客等级 码龄2年 701粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值