Docker 数据卷(Volume)详细介绍

news2025/2/7 19:09:13

Docker 数据卷(Volume)详细介绍

1. 什么是 Docker 数据卷?

Docker 数据卷(Volume)是一种用于 持久化数据容器间数据共享 的机制。由于容器的存储是临时的,容器删除后其中的数据会丢失,因此使用数据卷可以保证数据不会随着容器的销毁而丢失。

2. 数据卷的特点

  • 持久化存储:容器删除后,数据卷仍然存在,不会随容器删除而丢失。
  • 容器间共享:多个容器可以挂载同一个数据卷,实现数据共享。
  • 高性能:相比于 bind mount(绑定挂载),数据卷由 Docker 管理,性能更优。
  • 独立于文件系统:可以在不同的操作系统或存储驱动(如 overlay2、aufs)间使用。

3. 常见的 Docker 数据卷操作

3.1 创建和管理数据卷

(1)创建数据卷
docker volume create my_volume

这个命令会创建一个名为 my_volume 的数据卷,并由 Docker 管理。

(2)查看所有数据卷
docker volume ls

列出当前所有的 Docker 数据卷。

(3)查看数据卷详细信息
docker volume inspect my_volume

显示 my_volume 的详细信息,包括存储位置、驱动等。

(4)删除数据卷
docker volume rm my_volume

删除 my_volume 数据卷。注意:如果某个容器正在使用该数据卷,删除会失败。

(5)清理未使用的数据卷
docker volume prune

删除所有未被任何容器使用的 Docker 数据卷。


4. 在容器中使用数据卷

4.1 使用 --mount 挂载数据卷

推荐使用 --mount,它的语法清晰,适用于复杂场景:

docker run -d --name my_container --mount source=my_volume,target=/app busybox
  • source=my_volume:使用名为 my_volume 的 Docker 数据卷。
  • target=/app:把 my_volume 挂载到容器内的 /app 目录。

4.2 使用 -v 挂载数据卷

-v 语法较老,但仍然常用:

docker run -d --name my_container -v my_volume:/app busybox

作用与 --mount 相同,但 -v 不支持某些高级选项(如 readonly)。


5. 绑定挂载(Bind Mounts)

除了 Docker 管理的数据卷,Docker 还支持将宿主机目录直接挂载到容器中:

docker run -d --name my_container -v /host/path:/container/path busybox

这种方式适用于:

  • 开发环境(宿主机和容器同步文件)。
  • 日志文件存储(容器删除后,日志仍然保留)。

注意:Bind Mount 依赖于宿主机的路径,可能会导致跨平台兼容性问题。


6. 只读挂载

为了提高安全性,可以使用 :ro(只读)挂载:

docker run -d --name my_container -v my_volume:/app:ro busybox

容器可以读取 /app 目录下的内容,但不能修改。

同样,使用 --mount

docker run -d --name my_container --mount source=my_volume,target=/app,readonly busybox

7. 共享数据卷

多个容器可以共享同一个数据卷:

docker run -d --name container1 -v my_volume:/app busybox
docker run -d --name container2 -v my_volume:/app busybox

container1container2 都可以访问 /app 目录,实现数据共享。


8. 备份和恢复数据卷

8.1 备份数据卷

docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar -czf /backup/backup.tar.gz -C /data .
  • -v my_volume:/data:将 my_volume 挂载到容器的 /data
  • -v $(pwd):/backup:把宿主机当前目录挂载到容器的 /backup
  • tar -czf:打包 /data 目录下的内容,生成 backup.tar.gz

8.2 恢复数据卷

docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar -xzf /backup/backup.tar.gz -C /data

该命令会把 backup.tar.gz 中的数据解压到 my_volume 里。


9. 删除数据卷

9.1 删除单个数据卷

docker volume rm my_volume

9.2 删除未被使用的所有数据卷

docker volume prune

这个命令会删除所有没有被任何容器使用的 Docker 数据卷。


10. 数据卷与 Docker Compose

docker-compose.yml 文件中,可以定义数据卷:

version: '3'
services:
  app:
    image: busybox
    volumes:
      - my_volume:/app
volumes:
  my_volume:

然后运行:

docker-compose up -d

my_volume 会自动创建并挂载到 /app


11. 总结

重点知识回顾

关键点说明
docker volume create my_volume创建数据卷
docker volume ls查看所有数据卷
docker volume inspect my_volume查看数据卷详情
docker volume rm my_volume删除数据卷
docker volume prune清理未使用的数据卷
docker run -v my_volume:/app busybox挂载数据卷
docker run -v /host/path:/container/path busybox绑定挂载
docker run -v my_volume:/app:ro busybox只读挂载
docker-compose.yml在 Docker Compose 中使用数据卷
tar -czftar -xzf备份和恢复数据卷

Docker 数据卷是 持久化数据容器间数据共享 的关键工具,合理使用可以大大提高数据管理的灵活性和安全性。对于使用数据卷的必要性和好处,请阅读文章:docker数据卷的好处与必要性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架,旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念,使得开发者可以通过声明式的方式轻松管理数据和…

揭秘区块链隐私黑科技:零知识证明如何改变未来

文章目录 1. 引言:什么是零知识证明?2. 零知识证明的核心概念与三大属性2.1 完备性(Completeness)2.2 可靠性(Soundness)2.3 零知识性(Zero-Knowledge) 3. 零知识证明的工作原理4. 零…

堆的实现——堆的应用(堆排序)

文章目录 1.堆的实现2.堆的应用--堆排序 大家在学堆的时候,需要有二叉树的基础知识,大家可以看我的二叉树文章:二叉树 1.堆的实现 如果有⼀个关键码的集合 K {k0 , k1 , k2 , …,kn−1 } ,把它的所有元素按完全⼆叉树…

Ubuntu20.04 本地部署 DeepSeek-R1

一、下载ollama 打开 ollama链接,直接终端运行提供的命令即可。如获取的命令如下: curl -fsSL https://ollama.com/install.sh | sh确保是否安装成功可在终端输入如下命令: ollama -v注意: 如遇到Failed to connect to github.…

2025年2月6日笔记

第 12 届蓝桥杯 C 青少组中 / 高级组选拔赛( STEMA ) 2020 年 11 月 22 日 真题第一题 解题思路: 第一:因为有整数集合的求和字样(所以用for循环来做) 第二:题中让我们累加1到N,所…

Linux: 网络基础

1.协议 为什么要有协议:减少通信成本。所有的网络问题,本质是传输距离变长了。 什么是协议:用计算机语言表达的约定。 2.分层 软件设计方面的优势—低耦合。 一般我们的分层依据:功能比较集中,耦合度比较高的模块层…

CSS 背景与边框:从基础到高级应用

CSS 背景与边框:从基础到高级应用 1. CSS 背景样式1.1 背景颜色示例代码:设置背景颜色 1.2 背景图像示例代码:设置背景图像 1.3 控制背景平铺行为示例代码:控制背景平铺 1.4 调整背景图像大小示例代码:调整背景图像大小…

大学资产管理系统中的下载功能设计与实现

大学资产管理系统是高校信息化建设的重要组成部分,它负责记录和管理学校内所有固定资产的信息。随着信息技术的发展,下载功能成为提高资产管理效率的关键环节之一。 系统架构的设计是实现下载功能的基础。一个良好的系统架构能够确保数据的高效传输和存储…

园区网设计与实战

想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识。 我是一个萌新小白,有误地方请大家指正,谢谢^_^ 文章目录 前言 这个实验主…

DeepSeek-R1 本地电脑部署 Windows系统 【轻松简易】

本文分享在自己的本地电脑部署 DeepSeek,而且轻松简易,快速上手。 这里借助Ollama工具,在Windows系统中进行大模型部署~ 1、安装Ollama 来到官网地址:Download Ollama on macOS 点击“Download for Windows”下载安装包&#x…

AI绘画:解锁商业设计新宇宙(6/10)

1.AI 绘画:商业领域的潜力新星 近年来,AI 绘画技术以惊人的速度发展,从最初简单的图像生成,逐渐演变为能够创造出高度逼真、富有创意的艺术作品。随着深度学习算法的不断优化,AI 绘画工具如 Midjourney、Stable Diffu…

保姆级教程:利用Ollama与Open-WebUI本地部署 DeedSeek-R1大模型

1. 安装Ollama 根据自己的系统下载Ollama,我的是Linux,所以我使用如下命令进行下载安装: curl -fsSL https://ollama.com/install.sh | sh2. 安装Open-WebUI 使用 Docker 的方式部署 open-webui ,使用gpu的话按照如下命令进行 …

Kafka 可靠性探究—副本刨析

Kafka 的多副本机制提升了数据容灾能力。 副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据;服务副本指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理。 1 副本刨析 1.1 相关概念 AR&…

openwebui入门

1 简介 ‌Open WebUI‌(网址是openwebui.com)是一个高度可扩展、功能强大且用户友好的自托管Web用户界面,专为完全离线操作设计,编程语言是python。它支持对接Ollama和OpenAI兼容的API的大模型。‌ Open WebUI‌在架构上是一种中…

Windows下怎么安装FFFmpeg呢?

在Windows下使用Open-webui报错,说Couldnt find ffmpeg or avconv,解决open-webui报错Couldn‘t find ffmpeg or avconv-CSDN博客于是尝试解决问题,那么Windows下怎么安装FFFmpeg呢? 尝试了两种方法。 第一种方法pip安装(失败&…

无公网IP 外网访问 Jupyter Notebook

Jupyter Notebook 是一个开源的Web应用程序,允许用户创建和共享包含实时代码、方程式、可视化和叙述文本的文档。它支持超过40种编程语言。 本文将详细的介绍如何用 Docker 在本地安装部署 Jupyter Notebook,并结合路由侠内网穿透实现外网访问本地部署的…

C语言按位取反【~】详解,含原码反码补码的0基础讲解【原码反码补码严格意义上来说属于计算机组成原理的范畴,不过这也是学好编程初级阶段的必修课】

目录 概述【适合0基础看的简要描述】: 上述加粗下划线的内容提取版: 从上述概述中提取的核心知识点,需背诵: 整数【包含整数,负整数和0】的原码反码补码相互转换的过程图示: 过程详细刨析:…

基于 .NET 8.0 gRPC通讯架构设计讲解,客户端+服务端

目录 1.简要说明 2.服务端设计 2.1 服务端创建 2.2 服务端设计 2.3 服务端业务模块 3.客户端设计-控制台 4.客户端设计-Avalonia桌面程序 5.客户端设计-MAUI安卓端程序 1.简要说明 gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用…

Java实习生面试题汇总

Java实习生面试题汇总 简介 本人是二本大三学生,下半年大四。暑假在上海这边找实习工作,面了几家公司,所问到的问题记录在下面。 因为是在校生,没任何实习经历,一般找我面试的都是小公司,一般问的比较简…

Java 如何覆盖第三方 jar 包中的类

目录 一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理 背景: 在我们日常的开发中,经常需要使用第三方的 jar 包,有时候我们会发现第三方的 jar 包中的某一个类有问题,或者我们需要定制化修改其中的逻辑&#xff0c…