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

docker笔记_数据卷、挂载

docker数据存储

    • 概述
    • 数据卷(Volumes)
      • 特点
      • 操作
    • 绑定挂载(Bind Mounts)
    • 内存挂载(tmpfs)
    • 总结

概述

docker官方文档
镜像构建过程中,所产生的layer都是只读层,只有在创建容器时才会生成一个可写的容器层(contatner layer)。如下图:
在这里插入图片描述

在默认情况下,容器内部创建的所有文件都存储在可写层中。这导致:

  • 获取容器中的数据比较麻烦,而且在删除容器后,数据也就丢失了;
  • 写入容器可写层需要存储驱动程序,这会比直接使用数据卷来写入宿主机文件系统的性能略差。
    为了解决这些问题,Docker 提供了数据卷(Volumes) 、 绑定挂载(Bind Mounts)和内存挂载(tmpfs) 三种数据存储方式,无论选择哪种挂载类型,从容器内部来看,数据都是以目录或文件的形式暴露在容器的文件系统中。
    在这里插入图片描述

数据卷(Volumes)

数据卷是Docker 中持久化数据的最佳、推荐方式。数据卷由Docker创建和管理,数据存储在由 Docker 管理的主机文件系统的一部分中(例如在 Linux 上的 /var/lib/docker/volumes/),非 Docker 进程不应修改此部分的文件系统;数据卷分为匿名卷、命名卷、卷驱动程序,通过docker volume create命令创建或者在创建容器时自动创建。

特点

相比与绑定挂载,数据卷由 Docker 完全管理,具备以下优势:

  • 备份和迁移方便:Volumes 相比于绑定挂载更容易备份或迁移;
  • 跨平台兼容:Volumes 可以在 Linux 和 Windows 容器上使用;
  • 安全共享:多个容器可以更安全地共享 Volumes;
  • 远程存储支持:通过 Volume 驱动,Volumes 可以存储在远程主机或云提供商上,并且支持加密等功能;
  • 高性能:在 Docker Desktop 中,Volumes 的性能远高于 Mac 和 Windows 主机上的绑定挂载;
  • 独立于容器生命周期:Volume 的内容独立于容器的生命周期,不会随着容器的删除而消失。

操作

1.常用命令

## 创建一个新的 Volume
docker volume create my-vol
## 列出 Volumes
docker volume ls
## 检查 Volume
docker volume inspect my-vol
## 删除 Volume
docker volume rm my-vol

2.容器操作
启动容器:指定 -v 或 --mount 使用数据卷

## 命名卷
docker run -d --name devtest --mount source=my-vol,target=/app nginx:latest
## 匿名卷
docker run -d --name devtest --mount target=/app nginx:latest

清理容器和 Volume:

docker container stop devtest
docker container rm devtest
docker volume rm my-vol
**备份、恢复和迁移 Volumes**
使用 --volumes-from 参数,你可以创建一个新容器来挂载现有的 Volume,并进行数据备份、恢复或迁移。```bash
## 备份 Volume
docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata## 恢复 Volume
docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

移除 Volumes
Docker 数据 Volume 在容器删除后仍会保留。你可以使用 docker volume prune 命令来移除所有未使用的 Volumes,以释放存储空间。

docker volume prune

绑定挂载(Bind Mounts)

绑定挂载是将宿主机上任意的一个文件或目录挂载到容器中(宿主机上的文件或目录会直接映射到容器中)。虽然绑定挂载速度快,但它依赖于主机文件系统的目录结构。通常情况下,建议使用命名卷代替绑定挂载。
绑定挂载命令其实和数据卷一样,差别就在于源路径是宿主机地文件路径,而非数据卷;可以使用-v 或者–mount;

## 启动容器时挂载
docker run -d \-it \--name devtest \--mount type=bind,source=/opt/target,target=/app \nginx:latest

内存挂载(tmpfs)

tmpfs 挂载不在磁盘上持久化数据,数据仅在容器生命周期内有效。适用于不希望数据持久化的情况,如存储敏感信息或需要高性能 I/O 的场景。

总结

其实不管是数据券、绑定挂件、还是tmpfs都可以使用–mount,type选择指定的类型即可。
这篇文章写得简单了点,主要是介绍容器在启动时会创建一个可写层,并且所有的数据都是在可写层操作;想要数据持久化到宿主机,可以选择数据卷、绑定挂载的方式实现;数据卷、绑定挂载、内存挂载的操作命令只需要记住一条命令即可:

root docker run -d --name my-nginx --mount type=bind,source=/opt/bind-dir,dst=/app nginx:latest

区别在于type和source属性。

相关文章:

  • 2024年【烟花爆竹经营单位主要负责人】免费试题及烟花爆竹经营单位主要负责人考试技巧
  • (已解决)vscode如何选择python解释器
  • Docker 教程:如何查看容器的最后 300 行实时日志
  • docker修改默认存储路径和网段
  • pdf编辑转换器怎么用?分享9个pdf编辑、转换方法(纯干货)
  • CentOS Stream 9部署Redis
  • C语言中的一些小知识(三)
  • Scikit-LearnTensorFlow机器学习实用指南(三):一个完整的机器学习项目【下】
  • Android 如何使用jdk命令给应用/APK重新签名。
  • 【pytorch】pytorch入门4:神经网络的卷积层
  • 实现简易 vuedraggable 的拖拽排序功能
  • JavaScript异步编程:async、await的使用
  • 高级java每日一道面试题-2024年9月18日-设计模式篇-JDK动态代理,CGLIB代理,AspectJ区别?
  • MySQL数据库迁移与备份实录
  • 如何在O2OA中使用ElementUI组件进行审批流程工作表单设计
  • axios 和 cookie 的那些事
  • canvas 绘制双线技巧
  • IDEA 插件开发入门教程
  • Java 多线程编程之:notify 和 wait 用法
  • js算法-归并排序(merge_sort)
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mysql中InnoDB引擎中页的概念
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PHP的类修饰符与访问修饰符
  • PHP那些事儿
  • React的组件模式
  • SQLServer插入数据
  • 关于extract.autodesk.io的一些说明
  • 基于组件的设计工作流与界面抽象
  • 聊聊sentinel的DegradeSlot
  • 树莓派 - 使用须知
  • 新版博客前端前瞻
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #控制台大学课堂点名问题_课堂随机点名
  • $nextTick的使用场景介绍
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2022 CVPR) Unbiased Teacher v2
  • (26)4.7 字符函数和字符串函数
  • (C语言)球球大作战
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十五)使用Nexus创建Maven私服
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)母版页和相对路径
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net core docker部署教程和细节问题
  • .net core Redis 使用有序集合实现延迟队列
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net Core与存储过程(一)