Docker 数据持久化完全指南:Volume、Bind Mount 与匿名卷

引言

在 Docker 中,容器的文件系统默认是临时的,容器删除后数据也会丢失。为了实现数据持久化,Docker 提供了多种存储方式,主要包括:

  1. docker volume create + 挂载(Named Volume)
  2. 直接 -v 挂载宿主机目录(Bind Mount)
  3. 匿名卷(Anonymous Volume)
  4. 孤儿卷(Orphaned Volume)

本文将从 使用方式、适用场景、优缺点 等方面详细对比这些方法,并给出最佳实践建议。


1. docker volume create + 挂载(Named Volume)

特点

  • 显式创建:先通过 docker volume create 创建命名卷,再挂载到容器。
  • 集中管理:可通过 docker volume ls/inspect 查看和管理。
  • 数据持久化:删除容器时,卷不会自动删除,需手动清理。
  • 跨容器共享:多个容器可挂载同一个卷。

示例

# 1. 创建命名卷
docker volume create mydata# 2. 挂载到容器
docker run -d -v mydata:/app/data --name myapp nginx# 3. 查看卷信息
docker volume inspect mydata

适用场景

数据库(MySQL、PostgreSQL)
✅ ​​应用持久化数据(Nexus、Jenkins)​
✅ ​​多容器共享数据(如日志、缓存)​

优点

✔ Docker 自动管理权限,兼容 Linux/Windows
✔ 数据独立于容器,删除容器不影响数据
✔ 适合生产环境

缺点

❌ 需要手动清理不再使用的卷


2. 直接 -v 挂载宿主机目录(Bind Mount)

特点

  • 直接绑定宿主机目录-v /宿主机路径:/容器路径
  • 完全控制:数据存储在宿主机,可直接修改。
  • 权限依赖宿主机:需手动处理 SELinux、文件权限。

示例

# 1. 创建宿主机目录
mkdir -p /data/nginx# 2. 挂载到容器
docker run -d -v /data/nginx:/usr/share/nginx/html --name nginx nginx

适用场景

开发调试(直接修改代码)
✅ ​​配置文件挂载(如 nginx.conf)​
✅ ​​需要宿主机直接访问数据(如备份)​

优点

✔ 数据完全由宿主机管理,方便直接操作
✔ 适合开发和调试

缺点

❌ 权限问题可能导致容器无法访问(需 chmod/chown
❌ 跨平台兼容性较差(Windows/macOS 路径差异)


3. 匿名卷(Anonymous Volume)

特点

  • 隐式创建-v /容器路径,Docker 自动生成随机卷名(如 f1a2b3c4...)。
  • 生命周期短:删除容器后可能成为孤儿卷。

示例

docker run -d -v /var/lib/mysql --name mysql mysql:8.0

适用场景

⚠️ 临时测试(不推荐生产环境)
⚠️ ​​某些官方镜像默认使用(如 MySQL 的 /var/lib/mysql)​

优点

✔ 快速创建,无需手动管理

缺点

❌ 难以追踪和管理
❌ 容易产生孤儿卷


4. 孤儿卷(Orphaned Volume)

什么是孤儿卷?

当容器被删除,但未使用 --volumes 清理关联卷时,这些卷会变成 孤儿卷,占用磁盘空间。

如何清理?

# 查看所有卷(包括孤儿卷)
docker volume ls# 清理未使用的卷
docker volume prune

如何避免?

  • 删除容器时加上

    --volumes
    

    docker rm -fv mycontainer
    
  • 尽量使用 docker volume create 管理命名卷。


5. 对比总结

存储方式创建方式管理难度数据持久化适用场景
Named Volumedocker volume create容易生产环境、数据库
Bind Mount-v /宿主机路径:/容器路径中等开发调试、配置文件
Anonymous Volume-v /容器路径困难临时测试
Orphaned Volume容器删除后遗留困难需手动清理

6. 最佳实践建议

  1. 生产环境:使用 Named Volumedocker volume create),确保数据安全。
  2. 开发环境:使用 Bind Mount,方便直接修改代码或配置。
  3. 避免匿名卷:除非是临时测试,否则尽量使用命名卷。
  4. 定期清理孤儿卷:运行 docker volume prune 释放磁盘空间。

结论

Docker 提供了多种数据持久化方式,选择合适的方式取决于你的使用场景:

  • 需要稳定、易管理?Named Volume
  • 需要直接修改文件?Bind Mount
  • 临时使用?匿名卷(但慎用)

正确使用这些存储方式,可以确保数据安全,同时避免磁盘空间浪费。

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

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

相关文章

OSS跨区域复制灾备方案:华东1到华南1的数据同步与故障切换演练

1. 引言 对象存储服务(OSS)已成为现代数据架构的核心组件。随着业务全球化,跨区域数据灾备从“可选”变为“必选”。本文以阿里云OSS为实验环境,实战演练华东1(杭州)到华南1(深圳)的…

前端登录状态管理:主流方案对比与安全实践指南

根据目前业内前端登录状态管理的主流设计方案,及其演进趋势进行汇总,生成主要包括如下内容的报告: 登录状态保持的基础原理:从HTTP无状态问题出发解析技术需求,使用表格对比核心挑战。主流技术方案对比:详…

动手用 Web 实现一个 2048 游戏

文章目录 为什么选择 2048?关键技术点与算法详解HTML 结构:搭建游戏界面CSS 样式:美化游戏界面JavaScript 核心逻辑:驱动游戏运行1)数据结构:二维数组表示游戏网格2)核心算法:添加随…

frp v0.62.1内网穿透搭建和使用

官网:https://gofrp.org/zh-cn/ Github:https://github.com/fatedier/frp 开源项目 frp frp 是一种快速反向代理,允许您将位于 NAT 或防火墙后面的本地服务器公开给 Internet。目前支持 TCP 和 UDP,以及 HTTP 和 HTTPS 协议&…

如何使用 USB 数据线将文件从 PC 传输到 iPhone

虽然用 USB 数据线将文件从 PC 传输到安卓设备非常容易,但对于 iPhone 用户来说,情况就不同了。不过,幸运的是,我们找到了三种可靠的方法,可以使用 USB 数据线将文件从 PC 传输到 iPhone,让您轻松完成这项任…

【C++高阶三】AVL树深度剖析

【C高阶三】AVL树深度剖析 1.什么是AVL树2.AVL树的实现2.1节点类和基本结构2.2插入2.3旋转处理2.3.1左单旋2.3.2右单旋2.3.3左右双旋2.3.4右左双旋 1.什么是AVL树 AVL树也叫二叉搜索平衡树 因为二叉搜索树如果插入顺序是有序的,那么这棵树的查找效率将会是O(N)&…

LangChain 文本分割器深度解析:从原理到落地应用(上)

食用指南 LangChain 作为大语言模型应用开发框架,文本分割器是其核心组件之一,本文以此作为切入点,详细介绍文本分割的作用、策略、以及常见的文本切割器应用。考虑到篇幅过长,故拆分为上、中、下三篇,后续会在中篇介…

【Java高频面试问题】高并发篇

【Java高频面试问题】高并发篇 Kafka原理核心组件高吞吐核心机制高可用设计 Kafka 如何保证消息不丢失如何解决Kafka重复消费一、生产者端:根源防重二、消费者端:精准控制三、业务层:幂等性设计(核心方案) 如何解决Kaf…

关于结构体,排序,递推的详细讲解(从属于GESP四级)

本章内容 排序算法基础 结构体 递推 简单双指针 一、排序算法基础三剑客 冒泡 Bubble、选择 Selection、插入 Insertion 1. 预备知识 1.1 排序算法评价指标 指标 含义 影响答题的典型问法 时间复杂度 算法在最坏、平均或最好情况下所需比较 / 交换次数 “写出此算法…

离线部署docker中的containerd服务

containerd 是一个行业标准的容器运行时,专注于简单、健壮的容器执行。它是从 Docker 中分离出来的项目,旨在作为一个底层的运行时接口,供更高层次的容器管理层使用。 containerd 负责镜像传输、存储、容器执行、网络配置等工作。它向上为 Do…

web布局15

CSS 网格布局除了提供定义网格和放置网格项目的相关属性之外,也提供了一些控制对齐方式的属性。这些控制对齐方式的属性,和 Flexbox 布局中的对齐属性 justify-* 、align-* 、*-items 、*-content 、 *-self 等是相似的: 在网格布局中可以用它…

leetcode 291. Word Pattern II和290. Word Pattern

目录 291. Word Pattern II 290. Word Pattern 291. Word Pattern II 回溯法哈希表 class Solution {unordered_map<char,string> hashmap;unordered_set<string> wordset; public:bool wordPatternMatch(string pattern, string s) {return backtrack(pattern,…

大模型的开发应用(十三):基于RAG的法律助手项目(上):总体流程简易实现

RAG法律助手项目&#xff08;上&#xff09;&#xff1a;总体流程简易实现 1 项目介绍1.1 方案选型1.2 知识文档 2 文档解析3 知识库构建3.1 构建知识节点3.2 嵌入向量初始化3.2 向量存储 4 查询4.1 初始化大模型4.2 模型响应4.2 本文程序存在的问题 完整代码 1 项目介绍 本项…

覆盖迁移工具选型、增量同步策略与数据一致性校验

1 引言 在当今数据驱动的时代&#xff0c;数据迁移已成为系统迭代、数据库升级、云迁移和架构演进中的关键环节。根据Gartner的调研&#xff0c;超过70%的企业级数据迁移项目因工具选择不当或同步策略缺陷而延期或失败。数据迁移不仅仅是简单的数据搬运&#xff0c;而是涉及数…

`docker run -it --rm` 笔记250624

docker run -it --rm 笔记250624 docker run -it --rm 是一个强大且常用的 Docker 命令组合&#xff0c;特别适合交互式开发和调试场景。以下是详细解析和使用指南&#xff1a; 参数解析 参数作用典型场景-i保持 STDIN 打开&#xff08;交互模式&#xff09;需要输入命令的交…

解锁阿里云AnalyticDB:数据仓库的革新利器

AnalyticDB&#xff1a;云数据仓库新势力 在数字化浪潮中&#xff0c;数据已成为企业的核心资产&#xff0c;而云数据仓库作为数据管理与分析的关键基础设施&#xff0c;正扮演着愈发重要的角色。阿里云 AnalyticDB 作为云数据仓库领域的佼佼者&#xff0c;以其卓越的性能、创…

【PX30 Qt 5.15 交叉编译环境搭建完整指南】

PX30 Qt 5.15 交叉编译环境搭建完整指南 (Ubuntu 20.04 → PX30 aarch64) &#x1f3af; 项目概览 本指南详细记录了在Ubuntu 20.04上搭建针对Rockchip PX30的Qt 5.15.2交叉编译环境的完整过程&#xff0c;包括实际操作步骤、遇到的问题及解决方案。 目标平台: Rockchip PX3…

深入理解读写锁 ReadWriteLock

在高性能并发编程中&#xff0c;如何有效地管理共享资源的访问是核心挑战之一。传统的排他锁&#xff08;如ReentrantLock&#xff09;在读多写少的场景下&#xff0c;性能瓶颈尤为突出&#xff0c;因为它不允许并发读取。Java并发包&#xff08;java.util.concurrent.locks&am…

Unity Addressable使用之检测更新流程

补充知识 关键文件说明 Addressable打包后会生成多种文件&#xff0c;主要包括 .hash、.json 和 .bundle 文件&#xff0c;它们各自有不同的作用。 .hash 文件&#xff08;哈希文件&#xff09; 作用&#xff1a; 用于 版本对比&#xff0c;检查资源是否有更新。存储的是 资…

Elasticsearch 中实现推荐搜索(方案设想)

1. 存储商品数据的数据类型 为了支持推荐搜索&#xff0c;商品数据通常需要包含以下字段&#xff1a; 商品索引结构 PUT /products {"mappings": {"properties": {"product_id": {"type": "keyword" // 商品 ID},"…