首页 > 其他分享 >挂载和卷

挂载和卷

时间:2023-09-11 17:11:48浏览次数:24  
标签:bind volumes directory 挂载 docker Docker

概念

绑定挂载(bind mounts)和卷(volumes)是两个不同的名词。
绑定挂载指的是,挂载到容器内部的文件或者文件夹(a file or directory mounted into a container),
而卷也是一个文件夹,不过受到 docker 管理。

挂载(mount)作为动词使用的时候,可以挂载一个普通文件夹,也可以用于挂载数据卷。

日常交流过程中,很容易产生歧义,直接说 “挂载普通文件夹” 和 “挂载卷”,可能更便于沟通。

res/6-1.png

映射

很多人会把 “挂载” 解释为 “映射”,这种说法是不对的,在官网文档中,你甚至看不到 “映射” 这个词。

使用 “映射” 这个词,会让人觉得数据卷的内容,是从容器内部映射出来的,容器内部一份,数据卷里一份。

实际情况,是将宿主机的某个文件或者文件夹,挂载到容器内部。
不会产生复数的文件,容器产生 10G 的文件,占用的就是 10G,没有映射这个过程,不会变成 20G。

“映射” 估计是日常交流产生的,是想表达的 “路径映射”,就像是文件上传到服务器,
会给你一个虚拟路径,虚拟路径不是磁盘路径,但是也能指向同一个文件。
按照这种说法进行解释,还是有道理的。

基本语法

# 创建数据卷
docker volume create [my-vol]

# 移除数据卷
docker volume rm [my-vol]

# 查看数据卷
docker volume inspect [my-vol]

# 移除无用的数据卷
docker volume prune

# 卷的存储路径,迁移数据时重点关注内容
# /var/lib/docker/volumes

# 样例,使用卷创建容器
docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html nginx:latest
# 样例,设置数据卷只允许读,共享数据卷的时候可能会被用到
docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html:ro nginx:latest

卷的优势

提一个最简单一个需求:

装了十多个镜像之后,需要清除没用的卷,这时候可能过去很久了,你已经记不清挂载了多少文件夹,如果是你用的是卷,有命令可以直接用。

绑定挂载与卷的区别

绑定挂载和数据卷,本质上操作的是同一个东西(文件)。
从官方文档的说法上看,挂载的历史比数据卷更久,数据卷可能后期优化产生的,因为卷受到 docker 管理,有了很多管理功能。

具体说,卷有下面这一堆的好处:

Volumes are easier to back up or migrate than bind mounts.
You can manage volumes using Docker CLI commands or the Docker API.
Volumes work on both Linux and Windows containers.
Volumes can be more safely shared among multiple containers.
Volume drivers let you store volumes on remote hosts or cloud providers, to encrypt the contents of volumes, or to add other functionality.
New volumes can have their content pre-populated by a container.
Volumes on Docker Desktop have much higher performance than bind mounts from Mac and Windows hosts.

If you bind-mount a directory into a non-empty directory on the container,
the directory's existing contents are obscured by the bind mount.
官方强调的区别:挂载到容器内非空目录的时候,挂载会掩盖现有内容。

绑定挂载定义(官网)

https://docs.docker.com/storage/bind-mounts/

Bind mounts have been around since the early days of Docker.
Bind mounts have limited functionality compared to volumes. When you use a bind mount,
a file or directory on the host machine is mounted into a container.
The file or directory is referenced by its absolute path on the host machine.
By contrast, when you use a volume, a new directory is created within Docker's storage directory
on the host machine, and Docker manages that directory's contents.

绑定挂载在Docker的早期就已经存在了。与卷相比,绑定挂载的功能有限。
使用绑定挂载时,将主机上的文件或目录挂载到容器中。文件或目录由其在主机上的绝对路径引用。
相比之下,当您使用卷时,在主机上的Docker存储目录中创建一个新目录,并且Docker管理该目录的内容。

数据卷定义(官网)

https://docs.docker.com/storage/volumes/

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers.
While bind mounts are dependent on the directory structure and OS of the host machine,
volumes are completely managed by Docker.

卷是持久化 docker 数据(由 docker 生成和使用的数据)的首选机制。
绑定挂载依赖于主机的目录结构和操作系统,而卷完全由Docker管理。

In addition, volumes are often a better choice than persisting data in a container's writable layer,
because a volume doesn't increase the size of the containers using it, and the volume's contents exist
outside the lifecycle of a given container.

此外,卷通常是比在容器的可写层中持久化数据更好的选择,因为卷不会增加使用它的容器的大小,
并且卷的内容存在于给定容器的生命周期之外。

标签:bind,volumes,directory,挂载,docker,Docker
From: https://www.cnblogs.com/chenss15060100790/p/17693978.html

相关文章

  • linux 格式化U盘并挂载
    一、查看磁盘情况sudofdisk-l可以看到有一个/dev/sdb1的磁盘就是我们插入的u盘了 大小28.9G,FAT32文件系统sudoblkid/dev/sdb1/dev/sdb1:LABEL="KINGSTON"UUID="59DB-5684"TYPE="vfat"PARTUUID="077ddb84-01"二、格式化之后直接挂载sudomount/dev/sdb1./mn......
  • Nomad 系列-Nomad 挂载存储卷
    系列文章Nomad系列文章概述显然,如果Nomad要运行有状态存储,那么挂载存储卷就是必备功能。Nomad允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中:容器存储接口(CSI)插件Nomad主机卷支持DockerVolume驱动程序默认没有安装CSI的情况下,主要使用的......
  • Linux挂载新磁盘到根目录
    1、添加磁盘到需要挂载的机器上2、lsblk查看硬盘挂载情况,sdb,sdc为我新挂载的磁盘3、fdisk-l查看挂载之前的分区情况,4、为新硬盘创建分区fdisk/dev/sdb,终端会提示:Command(mforhelp):输入:n依次输入p和1接着便会提示卷的起始地址和结束地址,都保持默认按回车的即可(意思是只......
  • 服务器数据恢复- 执行fsck导致Ext4分区无法挂载的数据恢复案例
    Ext4文件系统相关概念:块组:Ext4文件系统的空间被划分为若干个块组,每个块组内的结构大致相同。块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,其主要描述块位图、i-节点位图及i-节点表的地址等信息。......
  • 使用mount -t cifs 挂载windows共享目录
    <p>1.在windows10上新建共享文件夹,比如VMF,然后设置该文件夹的属性,</p><p>VMF文件夹-->属性-->共享-->设置共享-->添加用户(可以新增用户,设置密码)设置读写属性。</p><p><imgsrc="https://img2023.cnblogs.com/blog/1736150/202305/1736150-20230512141028798-1883433899......
  • Linux修改挂载的移动硬盘目录权限失败问题原因(chown,chmod不起效)
    场景:移动硬盘插到刷Linux系统的机顶盒上当作共享存储,开webdav需要将文件改为普通用户所有和data-www组原因:移动硬盘是Windows系统的ntfs格式,它的权限只能在挂载时进行指定,而无法使用Linux命令修改,如果有精细权限控制最好还是转为Linux的分区格式解决方法:修改/etc/f......
  • k8s 挂载本地目录
    kind:StatefulSetmetadata:namespace:oasisname:redis-cluster-node-nsspec:serviceName:"redis-cluster-svc"template:spec:containers:volumeMounts:-name:sys-timemountPath:/etc/localtime-n......
  • 使用Docker-数据卷挂载案例1
      把镜像文件上传到虚拟机中 加载镜像 创建mysql文件夹和data、conf两个子文件夹 把写好的配置文件上传到文件夹中 去hub.docker.com网址中找到mysql的run运行指令 找到配置文件挂载的文件位置 找到数据储存文件挂在的文件位置修改指令  ......
  • 使用Docker-数据卷挂载案例
                 ......
  • 实用指令_实操作_磁盘分区磁盘挂载
    磁盘分区和挂载分区的方式mbr分区(以前的传统方式)最多支持4个主分区系统只能安装在主分区扩展分区要占一个主分区MBR最大只支持2TB,但是拥有最好的兼容性gtp分区支持无限多个主分区(但操作系统可能限制,比如window下最多128个分区)最大支持18EB的大容量(EB=1024PB,P......