绑定挂载和具名卷的通用 mount 语法

未匹配的标注

无论是 VS Code 中用到的 devcontainer.json ,还是运行 Docker 经常使用的旗标,我们都能看到 –mount 的身影(devcontainer.json中的workspaceMount属性和mounts属性)。我试图通过这篇文章,把它的语法给理解清楚。

Docker 支持3种挂载类型,让容器读写文件或路径。这些文件或路径,既可以在宿主机的操作系统上,也可以在内存文件系统中。这3种类型分别是数据卷(通常直接叫卷),绑定挂载,tmpfs 和 具名管道。

绑定挂载可以让宿主机上的文件或路径,在挂载它的容器中也可以使用。绑定挂载既可以是只读的,也可以是可读可写的。比如,容器要共享宿主机的 DNS 信息,只要绑定挂载宿主机的 /etc/resolv.conf 文件即可。再比如容器想要把日志写入宿主机的 /var/log/myContainerLogs 路径。如果你使用了绑定挂载,然后宿主机和容器对于权限、访问控制等等细节有着不同概念的话,就会遇到可移植性问题。

具名卷是一种,把容器所需的持久化数据,从用来创建容器所需的镜像中,解耦开来的机制。同时,它也能和宿主机进行解耦。具名卷由 Docker 负责创建和管理,即使当前没有容器在使用某个具名卷,它依旧可以保留下来。具名卷中的数据可以在容器和宿主机之间共享,也可以在多个容器间共享。Docker 使用卷驱动器来创建,管理和挂载卷。你还可以使用 Docker 命令来备份或恢复卷。

tmpfs 会在容器中,为易失性数据挂载 tmpfs

npipe 则会从宿主机挂载具名管道进容器。

设想有这样一个场景:你的镜像可以启动一个轻量级的网页服务器。你可以用这个镜像作为基础镜像,把你网站的 HTML 文件复制一下,再把那些文件和镜像打包成另一个镜像。每次你的网站发生变更,都需要更新一个新镜像,并且把网站运行相关的所有容器再重新部署一遍。一个更好的方案是,把网站内容存放在一个具名卷中。网页服务器所需的容器启动时,都会连接这个具名卷。所以,当你更新网站的时候,只要更新具名卷就可以了。

下表列出了在服务中应用绑定挂载和具名卷时,都通用的选项。

表中涵盖了所有 –mount 的通用选项。无论你看到的命令是绑定挂载还是具名卷,都可以从这些通用选项中,大概判断出挂载语句的具体含义。有通用选项,就一定有专用选项。我们将在后面的文章中,聊一聊绑定挂载和具名卷各自的专用选项。我们下期不见不散。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
秦晓武
讨论数量: 0
发起讨论 只看当前版本


暂无话题~