首页 > 其他分享 >docker笔记_数据卷、挂载

docker笔记_数据卷、挂载

时间:2024-09-25 14:54:59浏览次数:12  
标签:容器 -- 笔记 Volumes 挂载 docker 数据

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属性。

标签:容器,--,笔记,Volumes,挂载,docker,数据
From: https://blog.csdn.net/weixin_42833423/article/details/141932460

相关文章

  • LoRA: Low-Rank Adaptation of Large Language Models 笔记
    问题背景⼤模型通常包含数亿甚⾄数百亿个参数,对其进⾏微调需要⼤量的计算资源和存储空间。在微调过程中,直接修改预训练模型的所有参数可能会破坏模型的原始性能。存储和部署微调后的⼤模型需要⼤量存储空间,尤其是当需要在多个应⽤场景中部署不同微调版本时。许多微调⽅法会增......
  • FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
    FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播 合集-FFmpeg开发实战(55)  ​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMPStreamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRT......
  • FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播1111
    FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播 合集-FFmpeg开发实战(55)  ​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMPStreamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRT......
  • ADD failed: file not found in build context or excluded by .dockerignore: stat i
    这个错误信息表明在构建Docker镜像时,Docker守护进程(daemon)在尝试将名为 irap_rule_center 的文件或目录添加到镜像中,但是没有在构建上下文(buildcontext)中找到这个文件或目录,或者这个文件或目录被 .dockerignore 文件忽略了。要解决这个问题,你可以按照以下步骤操作:检查文件......
  • Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-
    安装docker-compose时候。出现错误1、在线拉取太费劲。最后使用的离线安装、、参考内容。.github手动下载文件:https://github.com/docker/compose/releases/tag/1.25.0-rc4选择-86版本的内容将文件上传到/usr/local/bin/目录下,重命名为docker-compose,修改文件权限:chmod+x......
  • 【随手记录】docker部署jenkins,集成maven、spring项目
    1、下载镜像文件到服务器dockerpulljenkins/jenkins:lts-jdk17或离线导入镜像:dockerload-ijenkins-lts-jdk17检查镜像是否导入:dockerimages|grepjenkinsjenkins/jenkinslts-jdk177a7add0bf3da2weeksago470MB2024年6月以后国内很多大型的Dock......
  • 828华为云征文 | 华为云X实例部署Docker应用的性能评测优化与实践指南
    目录1.前言2.测试环境设置2.1硬件与软件配置2.2网络环境与带宽2.3测试应用介绍3.Docker及应用的安装部署步骤3.1安装Docker3.2使用Docker部署Elasticsearch3.3使用Docker部署MySQL3.4使用Docker部署Nginx4.性能测试与评测标准4.1资源占用分析4.2网......
  • 思源笔记局域网内访问【使用教程】_思源笔记局域网访问-CSDN博客
    思源笔记局域网内访问【使用教程】_思源笔记局域网访问-CSDN博客思源笔记局域网内访问【使用教程】_思源笔记局域网访问-CSDN博客https://blog.csdn.net/qq_22841387/article/details/124738674文章浏览阅读4.3k次,点赞3次,收藏8次。在团队协作中,使用思源笔记进行需求文档的编......
  • 仅作笔记用:M.2转接卡转移原机械硬盘系统盘
    这是台惠普Prodesk400G4的品牌机,主板是H270,现需要添置一块M.2NVMe的固态硬盘,但这个主板没有M.2插槽,故使用PCI-E转接卡转接。这个品牌机主板的BIOS可以直接识别转接卡上的固态硬盘作为启动项,但是貌似只能以传统方式引导转接卡上的NVMe硬盘,UEFI方式会直接失败。......
  • 笔记暂存
    有n个物品,每个物品有重量wi和体积vi且密度均匀。你可以切物品,每次可以选一个物品切成两部分,也就是选一个0到1的实数k把物品分成k和(1-k)比例的两个物品。问题1.要想保证切完之后一定能把物品分成两组使得两组重量和相等,体积和也相等,X至少是几。对于\(f(0)<0\)和\(f(1)>\)求......