章节摘要:容器是随时可弃的,数据恰恰相反——数据库记录、上传文件、配置与证书,都比容器金贵。本部把数据相关的命令与选项编成三组词条:volume 命令族(create、ls、inspect、rm、prune)管 Docker 托管的命名卷;-v 与 --mount 的绑定挂载现场管"把宿主机目录递给容器";--tmpfs 管写在内存里、随容器消失的临时数据。三种方式的边界与选型,是本部要交付的核心判断力。
阅读完本部,你应当能够:
金句:可写层是草稿纸,卷是保险柜,绑定挂载是借宿主机的房子,tmpfs 是沙滩上的字。
5.1 volume 卷命令词条:volume 命令族全套词条与卷的生命周期。重点是卷与容器生死解耦的机制、匿名卷的来路与清理、以及 3.1 的 rm -v 到底删掉了什么。
5.2 bind-mount 挂载现场:-v 与 --mount 的完整义项,绑定挂载在开发热改、配置注入、只读收紧三类场景的现场会话,以及权限映射与文件事件两个高频坑。
5.3 tmpfs 临时存储词条:写在内存里的存储方式。适用场景是密钥、会话与高频中间态,特点是速度极快且随容器消失,与卷的差别不是性能而是"要不要留下"。
三节按数据"留下的欲望"从强到弱排列:命名卷要传家、绑定挂载要就地、tmpfs 用完即焚。选型判断贯穿始终:
+----------------+ +------------------+ +----------------+ | 5.1 命名卷 | --> | 5.2 绑定挂载 | --> | 5.3 tmpfs | | volume 命令族 | | -v / --mount | | --tmpfs | | 传家数据 | | 开发与配置 | | 用完即焚 | +----------------+ +------------------+ +----------------+ | | | +--- 都是 -v/--mount/--tmpfs 三个选项的词条化展开 ----+
问:镜像自带的目录被挂载盖住后会怎样? 容器路径只能有一种来源:run 时对同一路径下挂载指令,挂载生效后镜像里那份内容在容器内不可见。特例是首次挂命名卷——Docker 会先把镜像目录的既有内容复制进空卷再挂上(5.1 细讲);绑定挂载与 tmpfs 没有这份客气,直接盖。
问:数据真身到底在哪,怎么核实? 命名卷的位置看 volume inspect 的 Mountpoint 字段;绑定挂载就在你给的路径,一分未动;tmpfs 在内存里,容器一停就没了。总账则看容器 inspect 的 Mounts 数组——Type、Source、Destination 三列对完,心里就有底。
问:删容器会不会误删卷? 默认不会。卷的生命周期独立于容器;rm 带 -v 时只顺带清掉匿名卷,命名卷只认 volume rm 与 volume prune(5.1 词条)。传家数据放命名卷的底气正来自这条边界。
前置:叁部 3.2 的存储组选项(-v 的最简形态)已露过面,本部是它的完整展开;2.1 的分层概念帮助理解可写层为什么靠不住。延伸:4.2 私有仓库的数据卷正是本部机制的应用实例;柒部 Compose 的 volumes 声明块是本部词条的声明式版本;捌部磁盘治理里的卷清理与本部 prune 词条直接衔接。过关自测:拿到"数据库数据、开发代码目录、验证码会话"三种数据需求,你能立刻各配一种正确的挂载方式,并说出反着配会出什么事。