存储
默认情况下,容器内创建的所有文件都存储在可写的容器层上,该层位于只读、不可变的镜像层之上。
写入容器层的数据在容器销毁时不会持久化。这意味着如果另一个进程需要这些数据,可能很难从容器中获取。
每个容器的可写层是唯一的。您无法轻松地将数据从可写层提取到主机或另一个容器。
存储挂载选项
Docker 支持以下类型的存储挂载,用于在容器的可写层之外存储数据:
无论您选择使用哪种类型的挂载,从容器内部看,数据看起来都是一样的。它作为目录或单个文件暴露在容器的文件系统中。
卷挂载
卷是由Docker守护进程管理的持久存储机制。即使使用它们的容器被移除,它们也会保留数据。卷数据存储在主机上的文件系统中,但为了与卷中的数据交互,您必须将卷挂载到容器中。直接访问或与卷数据交互是不受支持的、未定义的行为,并可能导致卷或其数据以意外方式损坏。
卷非常适合性能关键的数据处理和长期存储需求。由于存储位置是在守护进程主机上管理的,卷提供了与直接访问主机文件系统相同的原始文件性能。
绑定挂载
绑定挂载在主机系统路径和容器之间创建了一个直接链接,允许访问存储在主机上任何位置的文件或目录。由于它们没有被Docker隔离,主机上的非Docker进程和容器进程可以同时修改挂载的文件。
当您需要能够从容器和主机访问文件时,请使用绑定挂载。
tmpfs 挂载
tmpfs 挂载将文件直接存储在宿主机的内存中,确保数据不会写入磁盘。这种存储是临时的:当容器停止或重启,或者宿主机重启时,数据会丢失。tmpfs 挂载不会在 Docker 宿主机或容器的文件系统中持久化数据。
这些挂载适用于需要临时内存存储的场景,例如缓存中间数据、处理敏感信息(如凭证)或减少磁盘I/O。仅当数据不需要在当前容器会话之外持久化时,才使用tmpfs挂载。
命名管道
命名管道 可以用于Docker主机和容器之间的通信。常见的用例是在容器内运行第三方工具,并使用命名管道连接到Docker Engine API。
下一步
- 了解更多关于 volumes.
- 了解更多关于 bind mounts.
- 了解更多关于 tmpfs 挂载.
- 了解更多关于 存储驱动的信息,它们与绑定挂载或卷无关,但允许您在容器的可写层中存储数据。