🎬慕斯主页:修仙—别有洞天
♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。
0:34━━━━━━️💟──────── 4:20
🔄 ◀️ ⏸ ▶️ ☰
💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
首先理解几个概念
Docker存储卷(Volume)是什么?
Docker卷的分类?
管理卷(Volumes)
管理卷的创建方式一:docker volume create
docker volume inspect
docker volume ls
docker volume rm
docker volume prune
管理卷的创建方式二:使用run的 -v 或者 --mount 指定创建管理卷
管理卷的创建方式三:Dockerfile 匿名卷
Docker 卷生命周期
Docker 卷共享
绑定卷(bind mount)
-v 参数创建卷
--mount 参数创建绑定卷
临时卷
--tmpfs 创建
--mount 指定参数创建
临时卷的作用
首先理解几个概念
Docker存储卷(Volume)是什么?
存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。
在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。卷的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。
宿主机的/data/web 目录与容器中的/container/data/web 目录绑定关系,然后容器中的进程向这个目录中写数据时,是直接写在宿主机的目录上的,绕过容器文件系统与宿主机的文件系统建立关联关系,使得可以在宿主机和容器内共享数据库内容,让容器直接访问宿主机中的内容,也可以宿主机向容器写入内容, 容器和宿主机的数据读写是同步的。大致图示如下:
存储卷大致在Docker架构中位于Docker daemon模块中,不仅如此,Network、Compose也位于这个模块中。再来回顾一下这个架构:
Docker卷的分类?
Docker提供了三种主要的方式来将数据从宿主机挂载到容器中,以便实现数据的持久化、共享和高效管理。这三种方式分别是:
Volumes(卷):
Volumes是由Docker管理的存储卷,它们位于宿主机文件系统的一个特定路径下,默认路径是/var/lib/docker/volumes/。Volumes提供了数据的持久化存储,即使容器被删除,数据也得以保留。此外,Volumes可以被多个容器共享,且它们独立于容器的生命周期。使用docker volume create命令可以创建新的卷,而docker run命令中的--mount或-v选项可以将卷挂载到容器中。
Bind Mounts(绑定挂载):
Bind mounts允许将宿主机上的任意目录或文件挂载到容器内。与Volumes不同,bind mounts可以挂载宿主机文件系统的任何位置,这意味着非Docker进程也可以访问和修改这些文件或目录。这增加了灵活性但也带来了潜在的安全风险。使用docker run命令的-v选项可以指定一个bind mount,例如-v /path/on/host:/path/in/container。
Tmpfs Mounts(内存挂载):
Tmpfs mounts是一种特殊的挂载类型,它们只存在于宿主机的内存中,不会写入到宿主机的文件系统。这意味着当容器停止时,挂载在tmpfs中的任何数据都会丢失,不会持久化。Tmpfs mounts适用于那些不需要持久存储且希望提高性能的场景,因为它们减少了磁盘I/O。使用docker run命令的--tmpfs选项可以创建一个tmpfs挂载。
管理卷(Volumes)
管理卷的创建方式一:docker volume create
用途: 创建一个新的Docker卷。
语法:
docker volume create [OPTIONS] [VOLUME]
关键参数:
--driver
或-d
: 指定创建卷时所用的驱动程序,如local
,nfs
,azurefile
等。--label
: 设置卷的元数据标签。--name
: 显式指定卷的名称。--opt
或-o
: 设置驱动程序特定的选项,如存储大小限制等。
示例:
docker volume create --name=my-vol
docker volume inspect
用途: 显示一个或多个卷的详细信息。
语法:
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
关键参数:
--format -f
: 使用给定的 Go 模板格式化输出。
示例:
docker volume inspect my-vol
docker volume ls
用途: 列出所有的Docker卷。
语法:
docker volume ls [OPTIONS]
关键参数:
--filter,-f
: 根据提供的条件过滤输出,如label=production
。--format
:指定相应个格式,如 json,table。-q
: 仅显示名称
示例:
docker volume ls
docker volume rm
用途: 删除一个或多个卷。
语法:
docker volume rm [OPTIONS] VOLUME [VOLUME...]
关键参数:
-f,--force
:强制删除
示例:
docker volume rm my-vol
docker volume prune
用途: 删除所有未被容器使用的卷(悬空卷)。
语法:
docker volume prune [OPTIONS]
关键参数:
--all
或-a
: 删除所有卷,包括正在被容器使用的卷。--force
或-f
: 不提示确认,直接删除。
示例:
docker volume prune
管理卷的创建方式二:使用run的 -v 或者 --mount 指定创建管理卷
-v 参数
• 功能:完成目录映射
• 语法
docker run -v name:directory[:options] .........
• 参数
○ 第一个参数:卷名称
○ 第二个参数:卷映射到容器的目录
○ 第三个参数:选项,如 ro 表示 readonly
--mount 参数
• 功能:完成目录映射
• 语法
docker run --mount '<key>=<value>,<key>=<value>' .........
• 参数
○ type : 类型表示 bind, volume, or tmpfs
○ source , src :对于命名卷,这是卷的名称。对于匿名卷,省略此字段。
○ destination, dst,target:文件或目录挂载在容器中的路径
○ ro,readonly: 只读方式挂载
管理卷的创建方式三:Dockerfile 匿名卷
我们也可以通过 dockerfile 的 VOLUME 指令在镜像中创建 Data Volume,这样只要通过该镜像创建的容器都会存在挂载点,但值得注意的是通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,而是由 docker 随机生成的
Docker 卷生命周期
当我们创建了管理卷并启动启动容器后,如果我们将运行着的容器给删除,我们的管理卷并不会直接跟着被删除,而是只有在自己使用docker volume rm 指令后才会被删除。
Docker 卷共享
当多个容器挂载相同名字的管理卷或者宿主机相同位置的卷时,他们会共享同一个卷,如果卷的内容被修改则所有的容器中改卷对应数据的数据也会被修改。
例如如下两个容器都是挂载了同一个卷:
docker run -v my-volume:/data container1
docker run -v my-volume:/data container2
绑定卷(bind mount)
需要注意的是绑定卷是以宿主机的目录为主的,如果你的宿主机中要绑定的目录下拥有文件,则容器中也会存在文件,若没有文件而你的容器中有文件则容器中的文件也会变成没有文件。
-v 参数创建卷
• 功能:
完成卷映射
• 语法
docker run -v name:directory[:options] .........
• 参数
○ 第一个参数: 宿主机目录,这个和管理卷是不一样的
○ 第二个参数:卷映射到容器的目录
○ 第三个参数:选项,如 ro 表示 readonly
--mount 参数创建绑定卷
• 功能:
完成目录映射
• 语法
--mount '<key>=<value>,<key>=<value>'
• 关键参数
○ type : 类型表示 bind, volume, or tmpfs
○ source , src : 宿主机目录,这个和管理卷是不一样的。
○ destination, dst,target:文件或目录挂载在容器中的路径
○ ro,readonly: 只读方式挂载
临时卷
临时卷数据位于内存中,在容器和宿主机之外。 tmpfs 局限性:不同于卷和绑定挂载,不能在容器之间共享 tmpfs 挂载。这个功能只有在 Linux 上运行 Docker 时才可用。需要注意的是:如果我们让临时卷挂载到已经存在的目录里将会以临时卷为主,如果放入比设置了大小的临时卷还大的文件将会报错,显示空间不足!
--tmpfs 创建
• 功能:
完成临时卷映射
• 语法
--tmpfs /app
--mount 指定参数创建
• 功能:
完成目录映射
• 语法
--mount '<key>=<value>,<key>=<value>'
• 关键参数
○ type : 类型表示 bind, volume, or tmpfs
○ destination, dst,target:挂载在容器中的路径
○ tmpfs-size: tmpfs 挂载的大小(以字节为单位)。默认无限制。
○ tmpfs-mode: tmpfs 的八进制文件模式。例如, 700 或 0770。默认为 1777或全局可写。
临时卷的作用
在看完上面的示例后你可能觉得临时卷没什么作用,实际上临时卷是可以提高我们的文件安全性的,普通的容器上的文件其实是可以在我们宿主机上搜索到的如:find -name命令,但是临时卷中的问卷是找不到的,如下:
感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!
给个三连再走嘛~